- Buffer de transicion persistente (sprTrans) de 25KB asignado una sola vez en setup() para evitar fallos de memoria heap contigua - Eliminacion de carga y descarga dinamica de fuentes en renderPage2ToSprite durante las transiciones para evitar fugas de RAM - Timeout de seguridad por hardware de 250ms en waitForTouchRelease() para prevenir bloqueos por ruido en la lamina resistiva - Pantallas 2 y 3: Reloj atomico GPS con DSEG7 de 80pt y Telemetria satelital completa (rumbo, satelites, altitud, coordenadas) - Documentacion de conexion y pines para modulo GPS N32+/U-blox
305 lines
15 KiB
Python
305 lines
15 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Genera el diagrama de conexión completo para la placa ESP32 CYD:
|
|
- 2x Sensores de temperatura DS18B20 en conector CN1 (1-Wire GPIO 22)
|
|
- 1x Módulo GPS N32+ / U-blox en conectores P1 y P3 (5V, GND, GPIO 35 RX, GPIO 1 TX)
|
|
"""
|
|
|
|
from PIL import Image, ImageDraw, ImageFont
|
|
import os
|
|
|
|
W, H = 1060, 750
|
|
im = Image.new("RGB", (W, H), (11, 15, 25)) # Sleek dark navy
|
|
draw = ImageDraw.Draw(im)
|
|
|
|
# Load fonts
|
|
try:
|
|
font_title = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 18)
|
|
font_subtitle = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 12)
|
|
font_sec = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 13)
|
|
font_bold = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf", 11)
|
|
font_reg = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 11)
|
|
font_small = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 10)
|
|
font_tiny = ImageFont.truetype("/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf", 9)
|
|
except Exception:
|
|
font_title = ImageFont.load_default()
|
|
font_subtitle = font_sec = font_bold = font_reg = font_small = font_tiny = font_title
|
|
|
|
# Helper for drawing rounded boxes
|
|
def draw_card(box, fill, outline, radius=6):
|
|
draw.rounded_rectangle(box, radius=radius, fill=fill, outline=outline, width=1)
|
|
|
|
# Color palette
|
|
C_BG = (11, 15, 25)
|
|
C_CARD = (20, 26, 42)
|
|
C_CARD_BORDER = (45, 58, 88)
|
|
C_CARD_HEADER = (28, 36, 58)
|
|
C_TEXT_WHITE = (240, 243, 248)
|
|
C_TEXT_MUTED = (140, 153, 175)
|
|
C_TEXT_CYAN = (0, 210, 255)
|
|
|
|
# Wire Colors
|
|
COLOR_VCC_3V3 = (255, 75, 75) # Red (3.3V Sensores)
|
|
COLOR_GND_DS = (40, 130, 255) # Blue (GND Sensores)
|
|
COLOR_DATA_DS = (245, 195, 35) # Gold / Yellow (Datos Sensores)
|
|
|
|
# GPS Wire Colors (Matching User's physical soldered cable)
|
|
COLOR_GPS_VCC = (255, 120, 20) # Cable Naranja (Pad V y EN puenteados)
|
|
COLOR_GPS_TX = (35, 130, 245) # Cable Azul (Pad T / TX del GPS)
|
|
COLOR_GPS_RX = (235, 240, 250) # Cable Blanco (Pad R / RX del GPS)
|
|
COLOR_GPS_GND = (40, 200, 110) # Cable Verde (Pad G / GND del GPS)
|
|
|
|
# -------------------------------------------------------------
|
|
# 1. HEADER
|
|
# -------------------------------------------------------------
|
|
draw.text((35, 20), "DIAGRAMA DE CONEXION: SENSORES DS18B20 Y MODULO GPS A PLACA CYD", fill=C_TEXT_WHITE, font=font_title)
|
|
draw.text((35, 45), "ESP32-2432S028 (CYD 2.8\" TFT) - Conectores Traseros CN1, P1 (Alimentación / TX) y P3 (RX)", fill=C_TEXT_CYAN, font=font_subtitle)
|
|
draw.line([(35, 68), (W - 35, 68)], fill=(35, 46, 72), width=1)
|
|
|
|
# -------------------------------------------------------------
|
|
# 2. SECCIÓN IZQUIERDA ARRIBA: SENSORES DS18B20
|
|
# -------------------------------------------------------------
|
|
ds_panel_box = [35, 80, 520, 315]
|
|
draw_card(ds_panel_box, (15, 20, 34), C_CARD_BORDER, radius=8)
|
|
draw.text((50, 92), "1. BUS 1-WIRE: TEMPERATURA INTERIOR Y EXTERIOR", fill=(100, 215, 255), font=font_sec)
|
|
|
|
# Sensor 1 (Interior)
|
|
s1_box = [50, 120, 175, 195]
|
|
draw_card(s1_box, (24, 32, 50), (60, 75, 105), radius=5)
|
|
draw.text((70, 126), "SENSOR 1", fill=(100, 215, 255), font=font_bold)
|
|
draw.text((72, 142), "DS18B20", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((68, 158), "Habitaculo", fill=C_TEXT_MUTED, font=font_small)
|
|
draw.text((68, 172), "(Cara plana)", fill=(100, 115, 135), font=font_tiny)
|
|
|
|
# Sensor 2 (Exterior)
|
|
s2_box = [205, 120, 330, 195]
|
|
draw_card(s2_box, (24, 32, 50), (60, 75, 105), radius=5)
|
|
draw.text((225, 126), "SENSOR 2", fill=(100, 215, 255), font=font_bold)
|
|
draw.text((227, 142), "DS18B20", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((229, 158), "Exterior", fill=C_TEXT_MUTED, font=font_small)
|
|
draw.text((223, 172), "(Cara plana)", fill=(100, 115, 135), font=font_tiny)
|
|
|
|
# Pines Sensor 1
|
|
p1_s1 = (72, 195)
|
|
p2_s1 = (112, 195)
|
|
p3_s1 = (152, 195)
|
|
draw.text((65, 200), "P1:GND", fill=COLOR_GND_DS, font=font_tiny)
|
|
draw.text((106, 200), "P2:DQ", fill=COLOR_DATA_DS, font=font_tiny)
|
|
draw.text((144, 200), "P3:VCC", fill=COLOR_VCC_3V3, font=font_tiny)
|
|
|
|
# Pines Sensor 2
|
|
p1_s2 = (227, 195)
|
|
p2_s2 = (267, 195)
|
|
p3_s2 = (307, 195)
|
|
draw.text((220, 200), "P1:GND", fill=COLOR_GND_DS, font=font_tiny)
|
|
draw.text((261, 200), "P2:DQ", fill=COLOR_DATA_DS, font=font_tiny)
|
|
draw.text((299, 200), "P3:VCC", fill=COLOR_VCC_3V3, font=font_tiny)
|
|
|
|
# Resistencia 4.7k
|
|
res_box = [370, 235, 415, 265]
|
|
draw_card(res_box, (220, 200, 160), (140, 120, 80), radius=3)
|
|
# Bandas de color de 4.7k (Amarillo, Violeta, Rojo, Dorado)
|
|
draw.line([(380, 235), (380, 265)], fill=(240, 210, 20), width=3) # Amarillo (4)
|
|
draw.line([(388, 235), (388, 265)], fill=(150, 40, 180), width=3) # Violeta (7)
|
|
draw.line([(396, 235), (396, 265)], fill=(220, 30, 30), width=3) # Rojo (x100)
|
|
draw.line([(406, 235), (406, 265)], fill=(210, 175, 55), width=2) # Dorado (+-5%)
|
|
draw.text((352, 218), "Resistencia 4.7k", fill=C_TEXT_WHITE, font=font_bold)
|
|
draw.text((362, 272), "(Pull-up)", fill=C_TEXT_MUTED, font=font_small)
|
|
|
|
# Wires DS18B20:
|
|
# GND (Azul) - Pata 1 de ambos
|
|
draw.line([(p1_s1[0], 215), (p1_s1[0], 285)], fill=COLOR_GND_DS, width=2)
|
|
draw.line([(p1_s2[0], 215), (p1_s2[0], 285)], fill=COLOR_GND_DS, width=2)
|
|
draw.line([(p1_s1[0], 285), (540, 285)], fill=COLOR_GND_DS, width=2)
|
|
draw.ellipse([p1_s1[0]-3, 285-3, p1_s1[0]+3, 285+3], fill=COLOR_GND_DS)
|
|
draw.ellipse([p1_s2[0]-3, 285-3, p1_s2[0]+3, 285+3], fill=COLOR_GND_DS)
|
|
|
|
# DQ Datos (Amarillo) - Pata 2 de ambos
|
|
draw.line([(p2_s1[0], 215), (p2_s1[0], 255)], fill=COLOR_DATA_DS, width=2)
|
|
draw.line([(p2_s2[0], 215), (p2_s2[0], 255)], fill=COLOR_DATA_DS, width=2)
|
|
draw.line([(p2_s1[0], 255), (370, 255)], fill=COLOR_DATA_DS, width=2)
|
|
draw.line([(415, 255), (540, 255)], fill=COLOR_DATA_DS, width=2)
|
|
draw.ellipse([p2_s1[0]-3, 255-3, p2_s1[0]+3, 255+3], fill=COLOR_DATA_DS)
|
|
draw.ellipse([p2_s2[0]-3, 255-3, p2_s2[0]+3, 255+3], fill=COLOR_DATA_DS)
|
|
|
|
# VCC 3.3V (Rojo) - Pata 3 de ambos y conectado al otro extremo de resistencia 4.7k
|
|
draw.line([(p3_s1[0], 215), (p3_s1[0], 230)], fill=COLOR_VCC_3V3, width=2)
|
|
draw.line([(p3_s2[0], 215), (p3_s2[0], 230)], fill=COLOR_VCC_3V3, width=2)
|
|
draw.line([(p3_s1[0], 230), (540, 230)], fill=COLOR_VCC_3V3, width=2)
|
|
draw.ellipse([p3_s1[0]-3, 230-3, p3_s1[0]+3, 230+3], fill=COLOR_VCC_3V3)
|
|
draw.ellipse([p3_s2[0]-3, 230-3, p3_s2[0]+3, 230+3], fill=COLOR_VCC_3V3)
|
|
draw.line([(392, 235), (392, 230)], fill=COLOR_VCC_3V3, width=2)
|
|
draw.ellipse([392-3, 230-3, 392+3, 230+3], fill=COLOR_VCC_3V3)
|
|
|
|
|
|
# -------------------------------------------------------------
|
|
# 3. SECCIÓN IZQUIERDA ABAJO: MODULO GPS (FOTO REAL / PADS V, EN, T, R, G, VB)
|
|
# -------------------------------------------------------------
|
|
gps_panel_box = [35, 335, 520, 560]
|
|
draw_card(gps_panel_box, (15, 20, 34), C_CARD_BORDER, radius=8)
|
|
draw.text((50, 347), "2. MODULO GPS N32+ / U-BLOX (TUS CABLES SOLDADOS)", fill=(100, 255, 160), font=font_sec)
|
|
|
|
# Modulo GPS Box
|
|
gps_body_box = [50, 375, 255, 545]
|
|
draw_card(gps_body_box, (20, 38, 70), (40, 80, 140), radius=6)
|
|
draw.text((65, 382), "MODULO GPS", fill=C_TEXT_WHITE, font=font_bold)
|
|
draw.text((65, 396), "N32+ (Foto Real)", fill=C_TEXT_CYAN, font=font_tiny)
|
|
|
|
# Antena Cerámica cuadrada en el módulo
|
|
ant_box = [62, 415, 140, 495]
|
|
draw_card(ant_box, (180, 145, 60), (120, 95, 35), radius=4)
|
|
draw.ellipse([94, 448, 106, 460], fill=(230, 230, 230), outline=(100, 100, 100))
|
|
draw.text((65, 500), "Antena GPS", fill=C_TEXT_MUTED, font=font_tiny)
|
|
|
|
# Pila de botón abajo a la derecha
|
|
draw.ellipse([80, 516, 102, 538], fill=(195, 202, 212), outline=(130, 135, 145))
|
|
draw.text((108, 522), "VB: Pila Backup", fill=(140, 155, 175), font=font_tiny)
|
|
|
|
# Pines del GPS (en el lateral derecho del módulo x=255)
|
|
gps_p_vcc = (255, 395)
|
|
gps_p_tx = (255, 435)
|
|
gps_p_rx = (255, 470)
|
|
gps_p_gnd = (255, 505)
|
|
|
|
draw.text((150, 387), "V+EN (5V)", fill=COLOR_GPS_VCC, font=font_bold)
|
|
draw.text((150, 399), "[Naranja]", fill=COLOR_GPS_VCC, font=font_tiny)
|
|
|
|
draw.text((150, 427), "T: TX", fill=COLOR_GPS_TX, font=font_bold)
|
|
draw.text((150, 439), "[Azul]", fill=COLOR_GPS_TX, font=font_tiny)
|
|
|
|
draw.text((150, 462), "R: RX", fill=COLOR_GPS_RX, font=font_bold)
|
|
draw.text((150, 474), "[Blanco]", fill=(200, 205, 215), font=font_tiny)
|
|
|
|
draw.text((150, 497), "G: GND", fill=COLOR_GPS_GND, font=font_bold)
|
|
draw.text((150, 509), "[Verde]", fill=COLOR_GPS_GND, font=font_tiny)
|
|
|
|
# Puntos de conexión en el borde
|
|
draw.ellipse([gps_p_vcc[0]-4, gps_p_vcc[1]-4, gps_p_vcc[0]+4, gps_p_vcc[1]+4], fill=COLOR_GPS_VCC)
|
|
draw.ellipse([gps_p_tx[0]-4, gps_p_tx[1]-4, gps_p_tx[0]+4, gps_p_tx[1]+4], fill=COLOR_GPS_TX)
|
|
draw.ellipse([gps_p_rx[0]-4, gps_p_rx[1]-4, gps_p_rx[0]+4, gps_p_rx[1]+4], fill=COLOR_GPS_RX)
|
|
draw.ellipse([gps_p_gnd[0]-4, gps_p_gnd[1]-4, gps_p_gnd[0]+4, gps_p_gnd[1]+4], fill=COLOR_GPS_GND)
|
|
|
|
# Trazado de cables GPS hacia la derecha (todos al conector UART / P1)
|
|
# Cable Naranja (VCC 5V) -> va a Pin 1 de P1 (x=600, y=278)
|
|
draw.line([gps_p_vcc, (340, 395), (340, 278), (605, 278)], fill=COLOR_GPS_VCC, width=2)
|
|
|
|
# Cable Blanco (RX GPS) -> va a Pin 2 de P1 (x=600, y=298)
|
|
draw.line([gps_p_rx, (280, 470), (280, 298), (605, 298)], fill=COLOR_GPS_RX, width=2)
|
|
|
|
# Cable Azul (TX GPS) -> va a Pin 3 de P1 (x=600, y=318)
|
|
draw.line([gps_p_tx, (300, 435), (300, 318), (605, 318)], fill=COLOR_GPS_TX, width=2)
|
|
|
|
# Cable Verde (GND GPS) -> va a Pin 4 de P1 (x=600, y=338)
|
|
draw.line([gps_p_gnd, (320, 505), (320, 338), (605, 338)], fill=COLOR_GPS_GND, width=2)
|
|
|
|
|
|
# -------------------------------------------------------------
|
|
# 4. SECCIÓN DERECHA: PLACA ESP32 CYD (ESP32-2432S028)
|
|
# -------------------------------------------------------------
|
|
cyd_box = [570, 80, 1025, 560]
|
|
draw_card(cyd_box, (18, 24, 38), (240, 190, 40), radius=10)
|
|
draw.text((590, 92), "PLACA ESP32 CYD (ESP32-2432S028)", fill=(255, 215, 60), font=font_sec)
|
|
draw.text((590, 110), "Vista de Conectores Traseros JST 1.25mm", fill=C_TEXT_MUTED, font=font_small)
|
|
|
|
# --- CONECTOR CN1 (4 pines) ---
|
|
cn1_box = [590, 135, 1005, 235]
|
|
draw_card(cn1_box, (25, 34, 52), (50, 68, 100), radius=6)
|
|
draw.text((605, 142), "CONECTOR CN1 (Sensores Temperatura 1-Wire)", fill=(100, 215, 255), font=font_bold)
|
|
|
|
draw.rectangle([605, 160, 620, 172], fill=COLOR_VCC_3V3)
|
|
draw.text((630, 160), "Pin 1: 3.3V (VCC)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((760, 160), "<-- Pata 3 de ambos DS18B20", fill=COLOR_VCC_3V3, font=font_small)
|
|
|
|
draw.rectangle([605, 177, 620, 189], fill=(70, 75, 85))
|
|
draw.text((630, 177), "Pin 2: (No usar / Libre)", fill=(130, 135, 145), font=font_small)
|
|
|
|
draw.rectangle([605, 194, 620, 206], fill=COLOR_DATA_DS)
|
|
draw.text((630, 194), "Pin 3: GPIO 22 (Datos)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((785, 194), "<-- Pata 2 de ambos DS18B20 + 4.7k", fill=COLOR_DATA_DS, font=font_small)
|
|
|
|
draw.rectangle([605, 211, 620, 223], fill=COLOR_GND_DS)
|
|
draw.text((630, 211), "Pin 4: GND (Masa)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((765, 211), "<-- Pata 1 de ambos DS18B20", fill=COLOR_GND_DS, font=font_small)
|
|
|
|
# Conexion fisica cables CN1
|
|
draw.line([(540, 230), (575, 230), (575, 166), (605, 166)], fill=COLOR_VCC_3V3, width=2)
|
|
draw.line([(540, 255), (570, 255), (570, 200), (605, 200)], fill=COLOR_DATA_DS, width=2)
|
|
draw.line([(540, 285), (565, 285), (565, 217), (605, 217)], fill=COLOR_GND_DS, width=2)
|
|
|
|
|
|
# --- CONECTOR P1 / UART (4 pines: Vin, TX0, RX0, GND) ---
|
|
p1_box = [590, 245, 1005, 370]
|
|
draw_card(p1_box, (25, 34, 52), (50, 68, 100), radius=6)
|
|
draw.text((605, 252), "CONECTOR UART / P1 (Conexion GPS Completa)", fill=(255, 180, 50), font=font_bold)
|
|
|
|
draw.rectangle([605, 272, 620, 284], fill=COLOR_GPS_VCC)
|
|
draw.text((630, 272), "Pin 1: Vin (5V USB)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((760, 272), "<-- Cable Naranja (Pad V+EN GPS)", fill=COLOR_GPS_VCC, font=font_bold)
|
|
|
|
draw.rectangle([605, 292, 620, 304], fill=COLOR_GPS_RX)
|
|
draw.text((630, 292), "Pin 2: GPIO 1 (TX0)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((760, 292), "--> Cable Blanco (Pad R/RX GPS)", fill=(235, 240, 250), font=font_bold)
|
|
|
|
draw.rectangle([605, 312, 620, 324], fill=COLOR_GPS_TX)
|
|
draw.text((630, 312), "Pin 3: GPIO 3 (RX0)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((760, 312), "<-- Cable Azul (Pad T/TX GPS)", fill=COLOR_GPS_TX, font=font_bold)
|
|
|
|
draw.rectangle([605, 332, 620, 344], fill=COLOR_GPS_GND)
|
|
draw.text((630, 332), "Pin 4: GND (Masa)", fill=C_TEXT_WHITE, font=font_reg)
|
|
draw.text((760, 332), "<-- Cable Verde (Pad G/GND GPS)", fill=COLOR_GPS_GND, font=font_bold)
|
|
|
|
|
|
# --- CONECTOR P3 (4 pines: 3.3V, GND, GPIO 35, GPIO 21) ---
|
|
p3_box = [590, 380, 1005, 545]
|
|
draw_card(p3_box, (25, 34, 52), (50, 68, 100), radius=6)
|
|
draw.text((605, 387), "CONECTOR P3 (Libre / GPIOs Auxiliares)", fill=(100, 255, 160), font=font_bold)
|
|
|
|
draw.rectangle([605, 407, 620, 419], fill=(70, 75, 85))
|
|
draw.text((630, 407), "Pin 1: 3.3V (Libre)", fill=(130, 135, 145), font=font_small)
|
|
|
|
draw.rectangle([605, 427, 620, 439], fill=(70, 75, 85))
|
|
draw.text((630, 427), "Pin 2: GND (Masa auxiliar)", fill=(130, 135, 145), font=font_small)
|
|
|
|
draw.rectangle([605, 447, 620, 459], fill=(70, 75, 85))
|
|
draw.text((630, 447), "Pin 3: GPIO 35 (Libre)", fill=(130, 135, 145), font=font_small)
|
|
|
|
draw.rectangle([605, 467, 620, 479], fill=(70, 75, 85))
|
|
draw.text((630, 467), "Pin 4: GND / IO21 (Libre)", fill=(130, 135, 145), font=font_small)
|
|
|
|
|
|
# -------------------------------------------------------------
|
|
# 5. RESUMEN DE CONEXION RAPIDA (BLOQUE INFERIOR)
|
|
# -------------------------------------------------------------
|
|
summary_box = [35, 575, 1025, 730]
|
|
draw_card(summary_box, (15, 20, 32), (50, 65, 95), radius=8)
|
|
draw.text((50, 585), "TABLA RESUMEN DE CONEXIONES EXACTAS PARA TUS CABLES:", fill=C_TEXT_WHITE, font=font_bold)
|
|
|
|
# Columna 1: DS18B20
|
|
draw.rectangle([50, 608, 62, 620], fill=COLOR_GND_DS)
|
|
draw.text((70, 608), "Pata 1 Sensores (Masa) --> Pin 4 de CN1 (GND)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
draw.rectangle([50, 628, 62, 640], fill=COLOR_DATA_DS)
|
|
draw.text((70, 628), "Pata 2 Sensores (Datos) --> Pin 3 de CN1 (GPIO 22) [+ Resistencia 4.7k a 3.3V]", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
draw.rectangle([50, 648, 62, 660], fill=COLOR_VCC_3V3)
|
|
draw.text((70, 648), "Pata 3 Sensores (VCC) --> Pin 1 de CN1 (3.3V Corriente)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
# Columna 2: GPS (Todo al conector UART / P1)
|
|
col2_x = 540
|
|
draw.rectangle([col2_x, 608, col2_x + 12, 620], fill=COLOR_GPS_VCC)
|
|
draw.text((col2_x + 20, 608), "Cable NARANJA (Pads V + EN) --> Pin 1 de UART (Vin 5V USB Alimentación)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
draw.rectangle([col2_x, 628, col2_x + 12, 640], fill=COLOR_GPS_RX)
|
|
draw.text((col2_x + 20, 628), "Cable BLANCO (Pad R / RX) --> Pin 2 de UART (GPIO 1 / TX0 Comandos Sleep)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
draw.rectangle([col2_x, 648, col2_x + 12, 660], fill=COLOR_GPS_TX)
|
|
draw.text((col2_x + 20, 648), "Cable AZUL (Pad T / TX) --> Pin 3 de UART (GPIO 3 / RX0 Datos NMEA)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
draw.rectangle([col2_x, 668, col2_x + 12, 680], fill=COLOR_GPS_GND)
|
|
draw.text((col2_x + 20, 668), "Cable VERDE (Pad G / GND) --> Pin 4 de UART (GND / Masa Común)", fill=C_TEXT_WHITE, font=font_small)
|
|
|
|
# Guardar en ambas ubicaciones
|
|
im.save("hardware/diagrama_conexion_ds18b20.png", "PNG")
|
|
im.save("diagrama_conexion_ds18b20.png", "PNG")
|
|
im.save("hardware/diagrama_conexion_hardware.png", "PNG")
|
|
print("Imagenes generadas exitosamente!")
|