ESPHOME et port RS232

Bonjour,
J’essaie de connecter un appareil via sa prise RS232 et un esp D1 mini.
J’ai lu pas mal de chose (en comprenant qu’une petite partie :sweat_smile:), fais mes connections esp-RS232 et tapé un bout de code sur ESPhome. Comme je m’y attendait vu mes connaissances ça ne fonctionne pas.
J’ai créé 2 switch pour allumer/éteindre l’appareil.
J’aimerais également récupérer certaines infos de l’appareil mais je n’ai pas su faire.
Le baud rate de l’appareil est bon.

Merci d’avance pour les pistes !

Le YAML esphome:

esphome:
  name: projecteur-benq-w1800
  friendly_name: Projecteur Benq W1800

esp8266:
  board: esp01_1m

# Enable logging
logger:
  baud_rate: 0

# Enable Home Assistant API
api:
  encryption:
    key: "XXX"

ota:
  password: "XXX"

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Projecteur-Benq-W1800"
    password: "XXX"

captive_portal:

uart:
  tx_pin: GPIO1
  rx_pin: GPIO3
  baud_rate: 115200

switch:
  - platform: uart
    name: "Projecteur on"
    data: '<CR>*pow=on#<CR>'
    icon: "mdi:power"
  - platform: uart
    name: "Projecteur off"
    data: '<CR>*pow=off#<CR>'

Salut

Cela ne peut pas marcher et tu risques de bousiller les GPIO de ton D1 car les niveaux RS-232 sont des niveaux souvent d’au moins 5/12V ! Il faut intercaler un circuit type MAX232 pour obtenir un port série RS-232 classique !
Pour avoir eu la problématique, la seule board que j’ai trouvé toute faite qui fasse cela c’est la board Tuya Adapter de Kincony que j’ai détourné (https://www.kincony.com/esp32-tuya-iot-adapter.html) et cela marche parfaitement (utilisé pour contrôler des TV Loewe entre autre, un ampli Méridian…
Sketch utilisé et us as même un cas avec une string dynamique pour transmettre un niveau de volume (il faut utiliser les lambda !).
Ne pas oublier aussi de configurer la parité si différente du défaut (aucune) et le bit d’arrêt (si différent de 1) :wink:

substitutions:
  device_name: PH

esphome:
  name: esp-tr-12
  platform: ESP32
  board: esp32dev
  friendly_name: TV Poolhouse

logger:

web_server:

ota:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_passwd
  manual_ip:
    static_ip: 172.16.2.98
    gateway: 172.16.1.1
    subnet: 255.255.252.0
  #use_address: 172.16.2.97
  ap:
    ssid: esp-tr-12

captive_portal:

api:
  reboot_timeout: 10min

sensor:
  - platform: uptime
    name: esp-tr-12 Uptime
    filters:
      - lambda: return x / 60.0 /60.0;
    unit_of_measurement: hours
  - platform: wifi_signal
    name: esp-tr-12 WiFi Signal
    update_interval: 60s


button:
  - platform: template
    name: $device_name TV HDMI1
    on_press:
      - uart.write: "prog -6\r\n"
  - platform: template
    name: $device_name TV HDMI2
    on_press:
      - uart.write: "prog -7\r\n"

switch:
  - platform: template
    name: "$device_name TV mute"
    #assumed_state: True
    optimistic: True
    turn_on_action: 
      - uart.write: "data mute 1\r\n"
    turn_off_action: 
      - uart.write: "data mute 0\r\n"
  - platform: template
    name: "$device_name Power tv"
    assumed_state: True
    optimistic: True
    turn_on_action: 
      - uart.write: "power tv\r\n"
    turn_off_action: 
      - uart.write: "power off\r\n"

number:
  - platform: template
    name: "$device_name TV Volume"
    id: volume
    optimistic: true
    min_value: 0
    max_value: 95
    step: 1
    #set_action:
    on_value:
       - uart.write: !lambda  
                      char buf[128];
                      sprintf(buf, "data volume %.1f\r\n", id(volume).state);
                      std::string s = buf;
                      return std::vector<unsigned char>( s.begin(), s.end() );

uart:
  tx_pin: GPIO17
  rx_pin: GPIO16
  baud_rate: 9600

Merci @vincen pour ta réponse. Effectivement, j’oublié de le préciser, j’ai évidemment ce module être mon esp et l’appareil. https://a.aliexpress.com/_EjvC6FV

ah oki parfait alors :wink: tu as essayé aussi l’éternelle question de la rs-232: Croisé or not Croisé :smiley: Tu intervertis RX/TX à un des bouts et tu retestes !

J’ai testé, c’est pas mieux. Je me demande si mon code est bon :thinking:

Bonjour

Quand tu dis que tu as fait l’essai en croissant TX et RX, c’est bien côté connecteur 9 points, pas entre le convertisseuret l’esp…??? :hugs:

Ensuite , sur le projo il y a un RTS et un CTS … J’ai un doute pour les strapper…

Enfin, ton code ne fonctionne pas, car tu envoies des commandes encadrées par des <CR>, alors qu’il s’agit de Carrier Return ou Retour Chariot… La, tu envoie les caracteres <CR> , il faut envoyer le code ASCII correpondant…

Slts

tu as testé ma version de code en adaptant les strings ? on a pas utilisé la même façon d’envoyer les strings :wink:
As-tu essayé au lieu de mettre les <CR> de mettre la version « échappée » comme j’ai fait ?

Comme le dit vinula, il faut encadrer les commandes avec \r au lieu de<CR>
Slts

Hello,
Désolé du retour tardif. Beaucoup de problèmes personnels me sont tombés dessus, du coup plus de temps à consacrer à la domotique.
J’ai essayé avec des \r et ça fonctionne bien.
Merci beaucoup pour l’aide apporté !!!