Diferència entre revisions de la pàgina «Accés ModBus al sensor de temperatura i humitat CWT-TH03S»

De things.cat
Salta a: navegació, cerca
m (NodeRed)
m (Placa IoT-02)
 
(Hi ha 11 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 
= Protocol específic =
 
= Protocol específic =
<!-- [[Image:CWT-TH03S_modbusRegisters.png|center|thumb|Protocol ModBus CWT-TH03S]] -->
+
[https://www.aliexpress.com/item/1005001404952412.html CWT-TH03S a AliExpress]
  
 +
== Cables de connexió ==
 +
Marró: Alimentació (entre 5V i 30V)
 +
Groc: A (D+)
 +
Blau: B (D-)
 +
Negre: Massa
 +
 +
== Programari de canvi de paràmetres ==
 +
[https://www.binefa.cat/training/modbus/eines/RS485ControlV22.exe Programa per Windows RS485ControlV22.exe per a canviar paràmetres dels dispositius ModBus]
 +
 +
[https://www.binefa.cat/training/modbus/eines/VID_20180306_094431.mp4 Vídeo del funcionament del programa RS485ControlV22.exe]
 +
 +
== Visió general ==
 
[[Image:CWT-TH03S_modbusRegisters.png|center|Protocol ModBus CWT-TH03S]]
 
[[Image:CWT-TH03S_modbusRegisters.png|center|Protocol ModBus CWT-TH03S]]
 +
 +
== Lectura ==
 +
Exemple de trama de petició de lectura de temperatura i humitat a un dispositiu a l'adreça 0x01:
 +
[[Image:CWT-TH03S_read_T_RH.png|center|Protocol ModBus CWT-TH03S]]
 +
 +
== Canvi d'adreça ==
 +
Exemple de trama per a canviar l'adreça del dispositiu a 0x02 (per defecte és 0x01):
 +
[[Image:CWT-TH03S_setSlaveID_0x02.png|center|Protocol ModBus CWT-TH03S]]
 +
 +
== Canvi de velocitat de comunicació ==
 +
Exemple de trama per a canviar la velocitat de comunicació a 9600 bauds (per defecte és 4800 bauds) a un dispositiu a l'adreça 0x01:
 +
[[Image:CWT-TH03S_setBaudRate_9600.png|center|Protocol ModBus CWT-TH03S]]
  
 
= Implementacions =
 
= Implementacions =
Línia 10: Línia 34:
  
 
[https://www.binefa.cat/training/python/sensors/CWT-TH03S_python_00.zip mb_T_01.py]
 
[https://www.binefa.cat/training/python/sensors/CWT-TH03S_python_00.zip mb_T_01.py]
 +
 +
Sol·licitud de lectura de temperatura i humitat:
 +
if q == 'sensor1':
 +
  print("{\nSending: Reading sensor 1")
 +
  stMB = "%c%c%c%c%c%c"%(0x01,0x03,0x00,0x00,0x00,0x02)
 +
  self.writeCommand(stMB)
 +
 +
Processament de la resposta a la petició de lectura de temperatura i humitat:
 +
szByH = ("{0:02X}".format(sz[3]))
 +
szByL = ("{0:02X}".format(sz[4]))
 +
szWordHR = szByH + szByL
 +
szByH = ("{0:02X}".format(sz[5]))
 +
szByL = ("{0:02X}".format(sz[6]))
 +
szWordT = szByH + szByL
 +
print("HR: %.1f %%  <-->  T: %.1f ºC" % (int(szWordHR,16) / 10,int(szWordT,16) / 10))
  
 
== NodeRed ==
 
== NodeRed ==
 +
[[Image:CWT-TH03S_flux_nodered.png|center|Protocol ModBus CWT-TH03S]]
 +
 
Codi que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb sistema operatiu (ordinador o Raspberry Pi):
 
Codi que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb sistema operatiu (ordinador o Raspberry Pi):
  
 
[https://www.binefa.cat/training/nodered/modbusLocal/CWT-TH03S.nodered.json.txt CWT-TH03S.nodered.json.txt]
 
[https://www.binefa.cat/training/nodered/modbusLocal/CWT-TH03S.nodered.json.txt CWT-TH03S.nodered.json.txt]
  
Configuració del servidor ModBus al NodeRed:
+
=== Configuració del node ModBus de lectura ===
 +
[[Image:CWT-TH03S_nodeRed_ModBus_lectura.png|center|thumb|Protocol ModBus CWT-TH03S]]
 +
 
 +
=== Configuració del servidor ModBus al NodeRed ===
 
[[Image:CWT-TH03S_nodeRed_ModBus_Server.png|center|thumb|Protocol ModBus CWT-TH03S]]
 
[[Image:CWT-TH03S_nodeRed_ModBus_Server.png|center|thumb|Protocol ModBus CWT-TH03S]]
 +
 +
=== Funció ''ModBus -> T, RH'' ===
 +
Per a obtenir dues sortides amb números reals, el byte del vector es transforma en un enter. Després es converteix a real i es divideix per 10:
 +
var fT = parseFloat(parseInt(msg.payload[1]))/10;
 +
var fRH = parseFloat(parseInt(msg.payload[0]))/10;
 +
 +
return [{"payload": fT},{"payload": fRH}];
  
 
== Placa IoT-02 ==
 
== Placa IoT-02 ==
Codi (provisional. Cal fer neteja) per a l'IDE d'Arduino que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb ESP32 (exemple per a la placa IoT-02):
+
[[Image:CWT-TH03S_IoT-02.png|center|thumb|Protocol ModBus CWT-TH03S]]
 +
 
 +
 
 +
Codi (provisional. Cal fer molta neteja) per a l'IDE d'Arduino que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb ESP32 (exemple per a la [https://github.com/jordibinefa/IoT-02 placa IoT-02]):
  
 
[https://www.binefa.cat/training/iot02/modbus/CWT-TH03S_mqtt_01.zip CWT-TH03S_mqtt_01.zip]
 
[https://www.binefa.cat/training/iot02/modbus/CWT-TH03S_mqtt_01.zip CWT-TH03S_mqtt_01.zip]

Revisió de 11:04, 7 set 2021

Protocol específic

CWT-TH03S a AliExpress

Cables de connexió

Marró: Alimentació (entre 5V i 30V)
Groc: A (D+)
Blau: B (D-)
Negre: Massa

Programari de canvi de paràmetres

Programa per Windows RS485ControlV22.exe per a canviar paràmetres dels dispositius ModBus

Vídeo del funcionament del programa RS485ControlV22.exe

Visió general

Protocol ModBus CWT-TH03S

Lectura

Exemple de trama de petició de lectura de temperatura i humitat a un dispositiu a l'adreça 0x01:

Protocol ModBus CWT-TH03S

Canvi d'adreça

Exemple de trama per a canviar l'adreça del dispositiu a 0x02 (per defecte és 0x01):

Protocol ModBus CWT-TH03S

Canvi de velocitat de comunicació

Exemple de trama per a canviar la velocitat de comunicació a 9600 bauds (per defecte és 4800 bauds) a un dispositiu a l'adreça 0x01:

Protocol ModBus CWT-TH03S

Implementacions

Python

Codi (provisional. Cal fer neteja) que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb sistema operatiu (ordinador o Raspberry Pi):

mb_T_01.py

Sol·licitud de lectura de temperatura i humitat:

if q == 'sensor1':
 print("{\nSending: Reading sensor 1")
 stMB = "%c%c%c%c%c%c"%(0x01,0x03,0x00,0x00,0x00,0x02)
 self.writeCommand(stMB)

Processament de la resposta a la petició de lectura de temperatura i humitat:

szByH = ("{0:02X}".format(sz[3]))
szByL = ("{0:02X}".format(sz[4]))
szWordHR = szByH + szByL
szByH = ("{0:02X}".format(sz[5]))
szByL = ("{0:02X}".format(sz[6]))
szWordT = szByH + szByL
print("HR: %.1f %%  <-->  T: %.1f ºC" % (int(szWordHR,16) / 10,int(szWordT,16) / 10))

NodeRed

Protocol ModBus CWT-TH03S

Codi que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb sistema operatiu (ordinador o Raspberry Pi):

CWT-TH03S.nodered.json.txt

Configuració del node ModBus de lectura

Protocol ModBus CWT-TH03S

Configuració del servidor ModBus al NodeRed

Protocol ModBus CWT-TH03S

Funció ModBus -> T, RH

Per a obtenir dues sortides amb números reals, el byte del vector es transforma en un enter. Després es converteix a real i es divideix per 10:

var fT = parseFloat(parseInt(msg.payload[1]))/10;
var fRH = parseFloat(parseInt(msg.payload[0]))/10;

return [{"payload": fT},{"payload": fRH}];

Placa IoT-02

Protocol ModBus CWT-TH03S


Codi (provisional. Cal fer molta neteja) per a l'IDE d'Arduino que permet llegir temperatura i humitat del sensor CWT-TH03S fent servir un dispositiu amb ESP32 (exemple per a la placa IoT-02):

CWT-TH03S_mqtt_01.zip