RS232
RS232
Une entrée RS232 est possible (en plus de la ligne de commande/debug) en spécifiant dans le config :
- Dans la section [General]
RS232 = 0/1 pour enabled (par defaut : 0 )
RS232_BD= Baud rate (par défaut 9600)
RS232_STX = Start Character (par defaut 0 )
RS232_ETX = Stop Character (par défaut 10 - LF)
RS232_prefix = Prefixe pour les messages générés (par defaut M_)
- Dans la section [Device]
rs2_in_pin= no du pin en réception
rs2_out_pin= no pin en émission
rs2_on_hw = 1/0 : variable spécifiant si l'implémentation demandée est une implémentation logiciel (0) ou matériel (1)
Sur ce point, il faut se référer aux disponibilités matériels du processeur
Le fonctionnement est le suivant :
Envoi : La fonction d'envoi est la fonction
SendRS(Text to send);
ou SRS(Text to send);
Réception : La réception donne lieu à un Event sur l'arbre de traitement (main.xml / ap.xml)
Dans ce cas, la source est <RS> et le message reçu est l'événement précédé du préfixe donné dans le config (RS232_prefix):
Exemple (pour un préfixe par défaut - M_):
La réception de message 'Hello' va lancer l'événement <RS><M_Hello>
Donc pour un main.xml contenant l'arbre :
<RS>
<M_Hello>DP(M_Hello);</M_Hello>
</RS>
On aura le Display(M_Hello) qui sera exécuté, ainsi si on boucle l'entrée et la sortie, l'affichage donnera :
SRS(Hello);
Hello
Exemple de config.ini :
[General]
...
RS232=1
[Device]
...
rs2_in_pin=9
rs2_out_pin=7
rs2_on_hw=1
Attention, si un bouton est sur le même IO que la RS, il sera impossible d'activer les deux entrées. Il faut désactiver le bouton. Par exemple, pour le UHW_003 :
[General]
...
RS232=1
[Device]
Type=UHW_003
btn_count=0
rs2_out_pin=14
rs2_in_pin=13
rs2_on_hw=0
rf_pin=12
Exemple de lecture de cartes RFID connecté en RS232 :
Matériel :
- lecteur de carte à puce RDM6300
- Wemos HW-665 (ESP32 sur un board de taille WeMos D1)
Les lignes RS232 sont connectées ainsi sur le WeMos:
Pinout Wemos d1 : D2 -> Sur HW-665 GPIO : 21 ==> RS232b_IN ------> PIN 1 (TX) du RDM6300
Pinout Wemos d1 : D3 -> Sur HW-665 GPIO : 17 ==> RS232b_OUT ------> PIN 2 (RX) du RDM6300
La config :
[General]
...
RS232=1
RS232_STX=2
RS232_ETX=3
[Device]
Type=WEMOS_665
led_green_pin=2
btn_count=0
btn_IO_1=255
rs2_in_pin=21
rs2_out_pin=17
rs2_on_hw=1
Et le main.xml :
<RS>
<M_..>DP(GS(lastRSMsg));</M_..>
</RS>
Quelques remarques :
Le module RDM6300 communique en 9600 Baud, donc la valeur par défaut, il n'est pas nécessaire de spécifier RS232BD=9600 dans la section [General]
Le module envoie l'id des cartes à puce avec le format 0x02 CARD-ID 0x03. Nous mettons donc les deux paramètres (Start et Stop) dans le config (RS232_STX=2 et RS232_ETX=3)
Les IO utilisées sont rs2_in_pin=21 et rs2_out_pin=17 et, s'agissant d'un ESP32, on active l'UART matériel.
On désactive les boutons (btn_count=0 et btn_IO_1=255) car le shield Button de Wemos utilise par défaut le IO 21)
Dans le config, on ne spécifie pas de préfixe de message (RS232_prefix) donc les messages RS232 seront préfixés de M_ (val par defaut)
Le main.xml récupère les messages M_ en utilsant le regex M_.. ainsi tous les messages de plus de 2 caractères seront récupérés.
Le code lui-même pourra être récupéré par la variable système lastRSMsg. Donc l'affichage se fait avec Display(GetSystem(lastRSMsg));
Même exemple avec un MeMos d1
Dans le cas de l'utilisation d'un WeMos D1 original (basé sur un ESP8266), le config serait à modifier ainsi (Pin D2 / GPIO 4 : RS232b_IN et pin D3 / GPIO 0 : RS232b_OUT ce qui correspond à la même position physique que dans l'exemple précédent)
[Device]
Type=WEMOS
i2c_scl_pin=255
i2c_sda_pin=255
led_RGB_pin=255
btn_count=0
btn_IO_1=255
rs2_in_pin=4
rs2_out_pin=0
rs2_on_hw=0
Considérations matériels :
Sur ESP8266 on n'a qu'une seule UART, donc l'UART supplémentaire doit être en logiciel : rs2_on_hw=0
Sur ESP32 : sont implémentée en matériel deux - parfois plus - UART. On peut donc mettre : rs2_on_hw=1
Spécificité des ESP32
Sur S2 on a UART 0 et UART 1 (2 UART matériel) sur n'importe quel GPIO
Référence :
https://docs.espressif.com/projects/esp-idf/en/latest/esp32s2/_images/esp32-s2_saola1-pinout.jpg
et
https://www.espressif.com/sites/default/files/documentation/esp32-s2_datasheet_en.pdf
Sur C3 on a UART 0 et UART 1 (2 UART matériel) sur n'importe quel GPIO
Sur ESP32 WROOM on a UART 0,1 et 2 (3 UART matériel) sur n'importe quel GPIO
Créé avec HelpNDoc Personal Edition: Créer des sites web d'aide facilement