mirror of https://github.com/arendst/Tasmota.git
Add support for La Crosse TX23 Anemometer (#3146)
This commit is contained in:
parent
e9c7026e82
commit
ea99cdce57
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX20_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RF TX"
|
#define D_SENSOR_RFSEND "RF TX"
|
||||||
#define D_SENSOR_RFRECV "RF RX"
|
#define D_SENSOR_RFRECV "RF RX"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya TX"
|
#define D_SENSOR_TUYA_TX "Tuya TX"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFRecv"
|
#define D_SENSOR_RFRECV "RFRecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -564,7 +564,7 @@
|
||||||
#define D_SENSOR_TM1638_STB "TM16 STB"
|
#define D_SENSOR_TM1638_STB "TM16 STB"
|
||||||
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
#define D_SENSOR_HX711_SCK "HX711 SCK"
|
||||||
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
#define D_SENSOR_HX711_DAT "HX711 DAT"
|
||||||
#define D_SENSOR_TX20_TX "TX20"
|
#define D_SENSOR_TX2X_TX "TX2x"
|
||||||
#define D_SENSOR_RFSEND "RFSend"
|
#define D_SENSOR_RFSEND "RFSend"
|
||||||
#define D_SENSOR_RFRECV "RFrecv"
|
#define D_SENSOR_RFRECV "RFrecv"
|
||||||
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
#define D_SENSOR_TUYA_TX "Tuya Tx"
|
||||||
|
|
|
@ -618,7 +618,9 @@
|
||||||
#define USE_HX711 // Add support for HX711 load cell (+1k5 code)
|
#define USE_HX711 // Add support for HX711 load cell (+1k5 code)
|
||||||
// #define USE_HX711_GUI // Add optional web GUI to HX711 as scale (+1k8 code)
|
// #define USE_HX711_GUI // Add optional web GUI to HX711 as scale (+1k8 code)
|
||||||
|
|
||||||
//#define USE_TX20_WIND_SENSOR // Add support for La Crosse TX20 anemometer (+2k code)
|
// Select none or only one of the below defines
|
||||||
|
//#define USE_TX20_WIND_SENSOR // Add support for La Crosse TX20 anemometer (+1k3 code)
|
||||||
|
//#define USE_TX23_WIND_SENSOR // Add support for La Crosse TX23 anemometer (+1k4 code)
|
||||||
|
|
||||||
//#define USE_RC_SWITCH // Add support for RF transceiver using library RcSwitch (+2k7 code, 460 iram)
|
//#define USE_RC_SWITCH // Add support for RF transceiver using library RcSwitch (+2k7 code, 460 iram)
|
||||||
|
|
||||||
|
|
|
@ -367,7 +367,7 @@ void GetFeatures(void)
|
||||||
#ifdef USE_PZEM_DC
|
#ifdef USE_PZEM_DC
|
||||||
feature_sns2 |= 0x00001000; // xnrg_06_pzem_dc.ino
|
feature_sns2 |= 0x00001000; // xnrg_06_pzem_dc.ino
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_TX20_WIND_SENSOR
|
#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
|
||||||
feature_sns2 |= 0x00002000; // xsns_35_tx20.ino
|
feature_sns2 |= 0x00002000; // xsns_35_tx20.ino
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_MGC3130
|
#ifdef USE_MGC3130
|
||||||
|
|
|
@ -212,7 +212,8 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
|
||||||
#define USE_TM1638 // Add support for TM1638 switches copying Switch1 .. Switch8 (+1k code)
|
#define USE_TM1638 // Add support for TM1638 switches copying Switch1 .. Switch8 (+1k code)
|
||||||
#define USE_HX711 // Add support for HX711 load cell (+1k5 code)
|
#define USE_HX711 // Add support for HX711 load cell (+1k5 code)
|
||||||
//#define USE_HX711_GUI // Add optional web GUI to HX711 as scale (+1k8 code)
|
//#define USE_HX711_GUI // Add optional web GUI to HX711 as scale (+1k8 code)
|
||||||
//#define USE_TX20_WIND_SENSOR // Add support for La Crosse TX20 anemometer (+2k code)
|
//#define USE_TX20_WIND_SENSOR // Add support for La Crosse TX20 anemometer (+1k3 code)
|
||||||
|
//#define USE_TX23_WIND_SENSOR // Add support for La Crosse TX23 anemometer (+1k4 code)
|
||||||
#define USE_RC_SWITCH // Add support for RF transceiver using library RcSwitch (+2k7 code, 460 iram)
|
#define USE_RC_SWITCH // Add support for RF transceiver using library RcSwitch (+2k7 code, 460 iram)
|
||||||
#define USE_RF_SENSOR // Add support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
#define USE_RF_SENSOR // Add support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||||
// #define USE_THEO_V2 // Add support for decoding Theo V2 sensors as documented on https://sidweb.nl using 434MHz RF sensor receiver (+1k4 code)
|
// #define USE_THEO_V2 // Add support for decoding Theo V2 sensors as documented on https://sidweb.nl using 434MHz RF sensor receiver (+1k4 code)
|
||||||
|
@ -404,6 +405,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
|
||||||
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
||||||
#undef USE_HX711 // Disable support for HX711 load cell
|
#undef USE_HX711 // Disable support for HX711 load cell
|
||||||
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
||||||
|
#undef USE_TX23_WIND_SENSOR // Disable support for La Crosse TX23 anemometer
|
||||||
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
||||||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||||
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
||||||
|
@ -513,6 +515,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
|
||||||
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
||||||
#undef USE_HX711 // Disable support for HX711 load cell
|
#undef USE_HX711 // Disable support for HX711 load cell
|
||||||
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
||||||
|
#undef USE_TX23_WIND_SENSOR // Disable support for La Crosse TX23 anemometer
|
||||||
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
||||||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||||
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
||||||
|
@ -625,6 +628,7 @@ extern "C" void custom_crash_callback(struct rst_info * rst_info, uint32_t stack
|
||||||
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
#undef USE_TM1638 // Disable support for TM1638 switches copying Switch1 .. Switch8
|
||||||
#undef USE_HX711 // Disable support for HX711 load cell
|
#undef USE_HX711 // Disable support for HX711 load cell
|
||||||
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
#undef USE_TX20_WIND_SENSOR // Disable support for La Crosse TX20 anemometer
|
||||||
|
#undef USE_TX23_WIND_SENSOR // Disable support for La Crosse TX23 anemometer
|
||||||
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
#undef USE_RC_SWITCH // Disable support for RF transceiver using library RcSwitch
|
||||||
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
#undef USE_RF_SENSOR // Disable support for RF sensor receiver (434MHz or 868MHz) (+0k8 code)
|
||||||
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
#undef USE_HRE // Disable support for Badger HR-E Water Meter (+1k4 code)
|
||||||
|
|
|
@ -128,7 +128,7 @@ enum UserSelectablePins {
|
||||||
GPIO_SDS0X1_TX, // Nova Fitness SDS011 Serial interface
|
GPIO_SDS0X1_TX, // Nova Fitness SDS011 Serial interface
|
||||||
GPIO_HX711_SCK, // HX711 Load Cell clock
|
GPIO_HX711_SCK, // HX711 Load Cell clock
|
||||||
GPIO_HX711_DAT, // HX711 Load Cell data
|
GPIO_HX711_DAT, // HX711 Load Cell data
|
||||||
GPIO_TX20_TXD_BLACK, // TX20 Transmission Pin
|
GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin
|
||||||
GPIO_RFSEND, // RF transmitter
|
GPIO_RFSEND, // RF transmitter
|
||||||
GPIO_RFRECV, // RF receiver
|
GPIO_RFRECV, // RF receiver
|
||||||
GPIO_TUYA_TX, // Tuya Serial interface
|
GPIO_TUYA_TX, // Tuya Serial interface
|
||||||
|
@ -267,7 +267,7 @@ const char kSensorNames[] PROGMEM =
|
||||||
D_SENSOR_PZEM016_RX "|" D_SENSOR_PZEM017_RX "|"
|
D_SENSOR_PZEM016_RX "|" D_SENSOR_PZEM017_RX "|"
|
||||||
D_SENSOR_DFR562 "|" D_SENSOR_SDS0X1_TX "|"
|
D_SENSOR_DFR562 "|" D_SENSOR_SDS0X1_TX "|"
|
||||||
D_SENSOR_HX711_SCK "|" D_SENSOR_HX711_DAT "|"
|
D_SENSOR_HX711_SCK "|" D_SENSOR_HX711_DAT "|"
|
||||||
D_SENSOR_TX20_TX "|"
|
D_SENSOR_TX2X_TX "|"
|
||||||
D_SENSOR_RFSEND "|" D_SENSOR_RFRECV "|"
|
D_SENSOR_RFSEND "|" D_SENSOR_RFRECV "|"
|
||||||
D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|"
|
D_SENSOR_TUYA_TX "|" D_SENSOR_TUYA_RX "|"
|
||||||
D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|"
|
D_SENSOR_MGC3130_XFER "|" D_SENSOR_MGC3130_RESET "|"
|
||||||
|
@ -721,8 +721,8 @@ const uint8_t kGpioNiceList[] PROGMEM = {
|
||||||
#ifdef USE_PMS5003
|
#ifdef USE_PMS5003
|
||||||
GPIO_PMS5003, // Plantower PMS5003 Serial interface
|
GPIO_PMS5003, // Plantower PMS5003 Serial interface
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_TX20_WIND_SENSOR
|
#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
|
||||||
GPIO_TX20_TXD_BLACK, // TX20 Transmission Pin
|
GPIO_TX2X_TXD_BLACK, // TX20/TX23 Transmission Pin
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_MP3_PLAYER
|
#ifdef USE_MP3_PLAYER
|
||||||
GPIO_MP3_DFR562, // RB-DFR-562, DFPlayer Mini MP3 Player Serial interface
|
GPIO_MP3_DFR562, // RB-DFR-562, DFPlayer Mini MP3 Player Serial interface
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
xsns_35_Tx20.ino - La Crosse Tx20 wind sensor support for Tasmota
|
xsns_35_Tx20.ino - La Crosse Tx20/Tx23 wind sensor support for Tasmota
|
||||||
|
|
||||||
Copyright (C) 2020 Thomas Eckerstorfer and Theo Arends
|
Copyright (C) 2020 Thomas Eckerstorfer, Norbert Richter and Theo Arends
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -17,19 +17,31 @@
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef USE_TX20_WIND_SENSOR
|
#if defined(USE_TX20_WIND_SENSOR) || defined(USE_TX23_WIND_SENSOR)
|
||||||
|
#if defined(USE_TX20_WIND_SENSOR) && defined(USE_TX23_WIND_SENSOR)
|
||||||
|
#undef USE_TX20_WIND_SENSOR
|
||||||
|
#warning **** use USE_TX20_WIND_SENSOR or USE_TX23_WIND_SENSOR but not both together, TX20 disabled ****
|
||||||
|
#endif
|
||||||
/*********************************************************************************************\
|
/*********************************************************************************************\
|
||||||
* La Crosse Tx20 wind sensor
|
* La Crosse TX20/TX23 Anemometer
|
||||||
*
|
*
|
||||||
* based on https://github.com/bunnyhu/ESP8266_TX20_wind_sensor/
|
* based on https://github.com/bunnyhu/ESP8266_TX20_wind_sensor/
|
||||||
* http://blog.bubux.de/windsensor-tx20-mit-esp8266/
|
* http://blog.bubux.de/windsensor-tx20-mit-esp8266/
|
||||||
* https://www.john.geek.nz/2011/07/la-crosse-tx20-anemometer-communication-protocol/
|
* https://www.john.geek.nz/2011/07/la-crosse-tx20-anemometer-communication-protocol/
|
||||||
|
* http://www.rd-1000.com/chpm78/lacrosse/Lacrosse_TX23_protocol.html
|
||||||
|
* https://www.john.geek.nz/2012/08/la-crosse-tx23u-anemometer-communication-protocol/
|
||||||
|
*
|
||||||
|
* TX23 RJ11 connection:
|
||||||
|
* 1 yellow - GND
|
||||||
|
* 2 green - NC
|
||||||
|
* 3 red - Vcc 3.3V
|
||||||
|
* 4 black/brown - TxD Signal (GPIOxx)
|
||||||
\*********************************************************************************************/
|
\*********************************************************************************************/
|
||||||
|
|
||||||
#define XSNS_35 35
|
#define XSNS_35 35
|
||||||
|
|
||||||
#define TX20_BIT_TIME 1220 // microseconds
|
#define TX2X_BIT_TIME 1220 // microseconds
|
||||||
#define TX20_RESET_VALUES 60 // seconds
|
#define TX2X_RESET_VALUES 60 // seconds
|
||||||
|
|
||||||
// The Arduino standard GPIO routines are not enough,
|
// The Arduino standard GPIO routines are not enough,
|
||||||
// must use some from the Espressif SDK as well
|
// must use some from the Espressif SDK as well
|
||||||
|
@ -37,17 +49,21 @@ extern "C" {
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_TX20_WIND_SENSOR
|
||||||
|
#define D_TX2x_NAME "TX20"
|
||||||
|
#else
|
||||||
|
#define D_TX2x_NAME "TX23"
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
|
const char HTTP_SNS_TX2X[] PROGMEM =
|
||||||
const char HTTP_SNS_TX20[] PROGMEM =
|
"{s}" D_TX2x_NAME " " D_TX20_WIND_SPEED "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
||||||
"{s}TX20 " D_TX20_WIND_SPEED "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
"{s}" D_TX2x_NAME " " D_TX20_WIND_SPEED_AVG "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
||||||
"{s}TX20 " D_TX20_WIND_SPEED_AVG "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
"{s}" D_TX2x_NAME " " D_TX20_WIND_SPEED_MAX "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
||||||
"{s}TX20 " D_TX20_WIND_SPEED_MAX "{m}%s " D_UNIT_KILOMETER_PER_HOUR "{e}"
|
"{s}" D_TX2x_NAME " " D_TX20_WIND_DIRECTION "{m}%s (%s°){e}";
|
||||||
"{s}TX20 " D_TX20_WIND_DIRECTION "{m}%s{e}";
|
|
||||||
|
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
|
|
||||||
const char kTx20Directions[] PROGMEM = D_TX20_NORTH "|"
|
const char kTx2xDirections[] PROGMEM = D_TX20_NORTH "|"
|
||||||
D_TX20_NORTH D_TX20_NORTH D_TX20_EAST "|"
|
D_TX20_NORTH D_TX20_NORTH D_TX20_EAST "|"
|
||||||
D_TX20_NORTH D_TX20_EAST "|"
|
D_TX20_NORTH D_TX20_EAST "|"
|
||||||
D_TX20_EAST D_TX20_NORTH D_TX20_EAST "|"
|
D_TX20_EAST D_TX20_NORTH D_TX20_EAST "|"
|
||||||
|
@ -64,133 +80,218 @@ const char kTx20Directions[] PROGMEM = D_TX20_NORTH "|"
|
||||||
D_TX20_NORTH D_TX20_WEST "|"
|
D_TX20_NORTH D_TX20_WEST "|"
|
||||||
D_TX20_NORTH D_TX20_NORTH D_TX20_WEST;
|
D_TX20_NORTH D_TX20_NORTH D_TX20_WEST;
|
||||||
|
|
||||||
uint8_t tx20_sa = 0;
|
uint8_t tx2x_sa = 0;
|
||||||
uint8_t tx20_sb = 0;
|
uint8_t tx2x_sb = 0;
|
||||||
uint8_t tx20_sd = 0;
|
uint8_t tx2x_sd = 0;
|
||||||
uint8_t tx20_se = 0;
|
uint8_t tx2x_se = 0;
|
||||||
uint16_t tx20_sc = 0;
|
uint16_t tx2x_sc = 0;
|
||||||
uint16_t tx20_sf = 0;
|
uint16_t tx2x_sf = 0;
|
||||||
|
|
||||||
float tx20_wind_speed_kmh = 0;
|
float tx2x_wind_speed_kmh = 0;
|
||||||
float tx20_wind_speed_max = 0;
|
float tx2x_wind_speed_max = 0;
|
||||||
float tx20_wind_speed_avg = 0;
|
float tx2x_wind_speed_avg = 0;
|
||||||
float tx20_wind_sum = 0;
|
float tx2x_wind_sum = 0;
|
||||||
int tx20_count = 0;
|
int tx2x_count = 0;
|
||||||
uint8_t tx20_wind_direction = 0;
|
uint8_t tx2x_wind_direction = 0;
|
||||||
|
|
||||||
bool tx20_available = false;
|
bool tx2x_available = false;
|
||||||
|
|
||||||
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
|
uint8_t tx23_stage = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef ARDUINO_ESP8266_RELEASE_2_3_0 // Fix core 2.5.x ISR not in IRAM Exception
|
#ifndef ARDUINO_ESP8266_RELEASE_2_3_0 // Fix core 2.5.x ISR not in IRAM Exception
|
||||||
void Tx20StartRead(void) ICACHE_RAM_ATTR; // As iram is tight and it works this way too
|
void TX2xStartRead(void) ICACHE_RAM_ATTR; // As iram is tight and it works this way too
|
||||||
#endif // ARDUINO_ESP8266_RELEASE_2_3_0
|
#endif // ARDUINO_ESP8266_RELEASE_2_3_0
|
||||||
|
|
||||||
void Tx20StartRead(void)
|
void TX2xStartRead(void)
|
||||||
{
|
{
|
||||||
/* La Crosse TX20 Anemometer datagram every 2 seconds
|
/**
|
||||||
|
* La Crosse TX20 Anemometer datagram every 2 seconds
|
||||||
* 0-0 11011 0011 111010101111 0101 1100 000101010000 0-0 - Received pin data at 1200 uSec per bit
|
* 0-0 11011 0011 111010101111 0101 1100 000101010000 0-0 - Received pin data at 1200 uSec per bit
|
||||||
* sa sb sc sd se sf
|
* sa sb sc sd se sf
|
||||||
* 00100 1100 000101010000 1010 1100 000101010000 - sa to sd inverted user data, LSB first
|
* 00100 1100 000101010000 1010 1100 000101010000 - sa to sd inverted user data, LSB first
|
||||||
* sa - Start frame always 00100
|
* sa - Start frame (invert) 00100
|
||||||
|
* sb - Wind direction (invert) 0 - 15
|
||||||
|
* sc - Wind speed 0 (invert) - 511
|
||||||
|
* sd - Checksum (invert)
|
||||||
|
* se - Wind direction 0 - 15
|
||||||
|
* sf - Wind speed 0 - 511
|
||||||
|
*
|
||||||
|
* La Crosse TX23 Anemometer datagram after setting TxD to low/high
|
||||||
|
* 1-1 0 1 0-0 11011 0011 111010101111 0101 1100 000101010000 1-1 - Received pin data at 1200 uSec per bit
|
||||||
|
* t s c sa sb sc sd se sf
|
||||||
|
* 1 0 1-1 00100 1100 000101010000 1010 1100 000101010000 - sa to sd inverted user data, LSB first
|
||||||
|
* t - host pulls TxD low - signals TX23 to sent measurement
|
||||||
|
* s - TxD released - TxD is pulled high due to pullup
|
||||||
|
* c - TX23U pulls TxD low - calculation in progress
|
||||||
|
* sa - Start frame 11011
|
||||||
* sb - Wind direction 0 - 15
|
* sb - Wind direction 0 - 15
|
||||||
* sc - Wind speed 0 - 511
|
* sc - Wind speed 0 - 511
|
||||||
* sd - Checksum
|
* sd - Checksum
|
||||||
* se - Wind direction 0 - 15
|
* se - Wind direction (invert) 0 - 15
|
||||||
* sf - Wind speed 0 - 511
|
* sf - Wind speed (invert) 0 - 511
|
||||||
*/
|
*/
|
||||||
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
|
if (0!=tx23_stage)
|
||||||
|
{
|
||||||
|
if ((2==tx23_stage) || (3==tx23_stage))
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
tx2x_available = false;
|
||||||
|
|
||||||
tx20_available = false;
|
tx2x_sa = 0;
|
||||||
|
tx2x_sb = 0;
|
||||||
|
tx2x_sd = 0;
|
||||||
|
tx2x_se = 0;
|
||||||
|
tx2x_sc = 0;
|
||||||
|
tx2x_sf = 0;
|
||||||
|
|
||||||
tx20_sa = 0;
|
delayMicroseconds(TX2X_BIT_TIME / 2);
|
||||||
tx20_sb = 0;
|
|
||||||
tx20_sd = 0;
|
|
||||||
tx20_se = 0;
|
|
||||||
tx20_sc = 0;
|
|
||||||
tx20_sf = 0;
|
|
||||||
|
|
||||||
delayMicroseconds(TX20_BIT_TIME / 2);
|
|
||||||
|
|
||||||
for (int32_t bitcount = 41; bitcount > 0; bitcount--) {
|
for (int32_t bitcount = 41; bitcount > 0; bitcount--) {
|
||||||
uint8_t dpin = (digitalRead(pin[GPIO_TX20_TXD_BLACK]));
|
uint8_t dpin = (digitalRead(pin[GPIO_TX2X_TXD_BLACK]));
|
||||||
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
if (bitcount > 41 - 5) {
|
if (bitcount > 41 - 5) {
|
||||||
// start, inverted
|
// start
|
||||||
tx20_sa = (tx20_sa << 1) | (dpin ^ 1);
|
tx2x_sa = (tx2x_sa << 1) | (dpin);
|
||||||
} else if (bitcount > 41 - 5 - 4) {
|
} else if (bitcount > 41 - 5 - 4) {
|
||||||
// wind dir, inverted
|
// wind dir
|
||||||
tx20_sb = tx20_sb >> 1 | ((dpin ^ 1) << 3);
|
tx2x_sb = tx2x_sb >> 1 | ((dpin) << 3);
|
||||||
} else if (bitcount > 41 - 5 - 4 - 12) {
|
} else if (bitcount > 41 - 5 - 4 - 12) {
|
||||||
// windspeed, inverted
|
// windspeed
|
||||||
tx20_sc = tx20_sc >> 1 | ((dpin ^ 1) << 11);
|
tx2x_sc = tx2x_sc >> 1 | ((dpin) << 11);
|
||||||
} else if (bitcount > 41 - 5 - 4 - 12 - 4) {
|
} else if (bitcount > 41 - 5 - 4 - 12 - 4) {
|
||||||
// checksum, inverted
|
// checksum
|
||||||
tx20_sd = tx20_sd >> 1 | ((dpin ^ 1) << 3);
|
tx2x_sd = tx2x_sd >> 1 | ((dpin) << 3);
|
||||||
|
} else if (bitcount > 41 - 5 - 4 - 12 - 4 - 4) {
|
||||||
|
// wind dir (invert)
|
||||||
|
tx2x_se = tx2x_se >> 1 | ((dpin ^ 1) << 3);
|
||||||
|
} else {
|
||||||
|
// windspeed (invert)
|
||||||
|
tx2x_sf = tx2x_sf >> 1 | ((dpin ^ 1) << 11);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
if (bitcount > 41 - 5) {
|
||||||
|
// start frame (invert)
|
||||||
|
tx2x_sa = (tx2x_sa << 1) | (dpin ^ 1);
|
||||||
|
} else if (bitcount > 41 - 5 - 4) {
|
||||||
|
// wind dir (invert)
|
||||||
|
tx2x_sb = tx2x_sb >> 1 | ((dpin ^ 1) << 3);
|
||||||
|
} else if (bitcount > 41 - 5 - 4 - 12) {
|
||||||
|
// windspeed (invert)
|
||||||
|
tx2x_sc = tx2x_sc >> 1 | ((dpin ^ 1) << 11);
|
||||||
|
} else if (bitcount > 41 - 5 - 4 - 12 - 4) {
|
||||||
|
// checksum (invert)
|
||||||
|
tx2x_sd = tx2x_sd >> 1 | ((dpin ^ 1) << 3);
|
||||||
} else if (bitcount > 41 - 5 - 4 - 12 - 4 - 4) {
|
} else if (bitcount > 41 - 5 - 4 - 12 - 4 - 4) {
|
||||||
// wind dir
|
// wind dir
|
||||||
tx20_se = tx20_se >> 1 | (dpin << 3);
|
tx2x_se = tx2x_se >> 1 | (dpin << 3);
|
||||||
} else {
|
} else {
|
||||||
// windspeed
|
// windspeed
|
||||||
tx20_sf = tx20_sf >> 1 | (dpin << 11);
|
tx2x_sf = tx2x_sf >> 1 | (dpin << 11);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
delayMicroseconds(TX2X_BIT_TIME);
|
||||||
}
|
}
|
||||||
|
|
||||||
delayMicroseconds(TX20_BIT_TIME);
|
uint8_t chk = (tx2x_sb + (tx2x_sc & 0xf) + ((tx2x_sc >> 4) & 0xf) + ((tx2x_sc >> 8) & 0xf));
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t chk = (tx20_sb + (tx20_sc & 0xf) + ((tx20_sc >> 4) & 0xf) + ((tx20_sc >> 8) & 0xf));
|
|
||||||
chk &= 0xf;
|
chk &= 0xf;
|
||||||
|
|
||||||
if ((chk == tx20_sd) && (tx20_sc < 400)) { // if checksum seems to be ok and wind speed below 40 m/s
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
tx20_available = true;
|
// check checksum, non-inverted with inverted values and max. speed
|
||||||
|
if ((chk == tx2x_sd) && (tx2x_sb==tx2x_se) && (tx2x_sc==tx2x_sf) && (tx2x_sc < 511)) {
|
||||||
|
tx2x_available = true;
|
||||||
}
|
}
|
||||||
/*
|
#else
|
||||||
if ((tx20_sb == tx20_se) && (tx20_sc == tx20_sf) && (tx20_sc < 400)) {
|
if ((chk == tx2x_sd) && (tx2x_sc < 511)) { // if checksum seems to be ok and wind speed below 51.1 m/s
|
||||||
tx20_available = true;
|
tx2x_available = true;
|
||||||
}
|
}
|
||||||
*/
|
#endif
|
||||||
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
|
}
|
||||||
|
tx23_stage++;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
// Must clear this bit in the interrupt register,
|
// Must clear this bit in the interrupt register,
|
||||||
// it gets set even when interrupts are disabled
|
// it gets set even when interrupts are disabled
|
||||||
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, 1 << pin[GPIO_TX20_TXD_BLACK]);
|
GPIO_REG_WRITE(GPIO_STATUS_W1TC_ADDRESS, 1 << pin[GPIO_TX2X_TXD_BLACK]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx20Read(void)
|
void Tx2xReset(void)
|
||||||
{
|
{
|
||||||
if (!(uptime % TX20_RESET_VALUES)) {
|
tx2x_count = 0;
|
||||||
tx20_count = 0;
|
tx2x_wind_sum = 0;
|
||||||
tx20_wind_sum = 0;
|
tx2x_wind_speed_max = 0;
|
||||||
tx20_wind_speed_max = 0;
|
|
||||||
}
|
}
|
||||||
else if (tx20_available) {
|
|
||||||
tx20_wind_speed_kmh = float(tx20_sc) * 0.36;
|
void Tx2xRead(void)
|
||||||
if (tx20_wind_speed_kmh > tx20_wind_speed_max) {
|
{
|
||||||
tx20_wind_speed_max = tx20_wind_speed_kmh;
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
|
// note: TX23 speed calculation is unstable when conversion starts
|
||||||
|
// less than 2 seconds after last request
|
||||||
|
if ((uptime % 3)==0) {
|
||||||
|
// TX23 start transmission by pulling down TxD line for at minimum 500ms
|
||||||
|
// so we pull TxD signal to low every 3 seconds
|
||||||
|
tx23_stage = 0;
|
||||||
|
pinMode(pin[GPIO_TX2X_TXD_BLACK], OUTPUT);
|
||||||
|
digitalWrite(pin[GPIO_TX2X_TXD_BLACK], LOW);
|
||||||
|
} else if ((uptime % 3)==1) {
|
||||||
|
// after pulling down TxD every 3 second we pull-up TxD every 3+1 seconds
|
||||||
|
// to trigger start transmission
|
||||||
|
tx23_stage = 1; // first rising signal is invalid
|
||||||
|
pinMode(pin[GPIO_TX2X_TXD_BLACK], INPUT_PULLUP);
|
||||||
}
|
}
|
||||||
tx20_count++;
|
#endif
|
||||||
tx20_wind_sum += tx20_wind_speed_kmh;
|
if (0==Settings.tele_period && !(uptime % TX2X_RESET_VALUES)) {
|
||||||
tx20_wind_speed_avg = tx20_wind_sum / tx20_count;
|
Tx2xReset();
|
||||||
tx20_wind_direction = tx20_sb;
|
}
|
||||||
|
else if (tx2x_available) {
|
||||||
|
// Wind speed spec: 0 to 180 km/h (0 to 50 m/s)
|
||||||
|
tx2x_wind_speed_kmh = float(tx2x_sc) * 0.36;
|
||||||
|
if (tx2x_wind_speed_kmh > tx2x_wind_speed_max) {
|
||||||
|
tx2x_wind_speed_max = tx2x_wind_speed_kmh;
|
||||||
|
}
|
||||||
|
tx2x_count++;
|
||||||
|
tx2x_wind_sum += tx2x_wind_speed_kmh;
|
||||||
|
tx2x_wind_speed_avg = tx2x_wind_sum / tx2x_count;
|
||||||
|
tx2x_wind_direction = tx2x_sb;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx20Init(void) {
|
void Tx2xInit(void)
|
||||||
pinMode(pin[GPIO_TX20_TXD_BLACK], INPUT);
|
{
|
||||||
attachInterrupt(pin[GPIO_TX20_TXD_BLACK], Tx20StartRead, RISING);
|
#ifdef USE_TX23_WIND_SENSOR
|
||||||
|
tx23_stage = 0;
|
||||||
|
pinMode(pin[GPIO_TX2X_TXD_BLACK], OUTPUT);
|
||||||
|
digitalWrite(pin[GPIO_TX2X_TXD_BLACK], LOW);
|
||||||
|
#else
|
||||||
|
pinMode(pin[GPIO_TX2X_TXD_BLACK], INPUT);
|
||||||
|
#endif
|
||||||
|
attachInterrupt(pin[GPIO_TX2X_TXD_BLACK], TX2xStartRead, RISING);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Tx20Show(bool json)
|
void Tx2xShow(bool json)
|
||||||
{
|
{
|
||||||
char wind_speed_string[33];
|
char wind_speed_string[33];
|
||||||
dtostrfd(tx20_wind_speed_kmh, 2, wind_speed_string);
|
dtostrfd(tx2x_wind_speed_kmh, 1, wind_speed_string);
|
||||||
char wind_speed_max_string[33];
|
char wind_speed_max_string[33];
|
||||||
dtostrfd(tx20_wind_speed_max, 2, wind_speed_max_string);
|
dtostrfd(tx2x_wind_speed_max, 1, wind_speed_max_string);
|
||||||
char wind_speed_avg_string[33];
|
char wind_speed_avg_string[33];
|
||||||
dtostrfd(tx20_wind_speed_avg, 2, wind_speed_avg_string);
|
dtostrfd(tx2x_wind_speed_avg, 1, wind_speed_avg_string);
|
||||||
char wind_direction_string[4];
|
char wind_direction_string[4];
|
||||||
GetTextIndexed(wind_direction_string, sizeof(wind_direction_string), tx20_wind_direction, kTx20Directions);
|
GetTextIndexed(wind_direction_string, sizeof(wind_direction_string), tx2x_wind_direction, kTx2xDirections);
|
||||||
|
char wind_direction_degree[33];
|
||||||
|
dtostrfd(tx2x_wind_direction*22.5, 1, wind_direction_degree);
|
||||||
|
|
||||||
if (json) {
|
if (json) {
|
||||||
ResponseAppend_P(PSTR(",\"TX20\":{\"Speed\":%s,\"SpeedAvg\":%s,\"SpeedMax\":%s,\"Direction\":\"%s\"}"),
|
ResponseAppend_P(PSTR(",\"" D_TX2x_NAME "\":{\"Speed\":%s,\"SpeedAvg\":%s,\"SpeedMax\":%s,\"Direction\":\"%s\",\"Degree\":%s}"),
|
||||||
wind_speed_string, wind_speed_avg_string, wind_speed_max_string, wind_direction_string);
|
wind_speed_string, wind_speed_avg_string, wind_speed_max_string, wind_direction_string, wind_direction_degree);
|
||||||
|
Tx2xReset();
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
} else {
|
} else {
|
||||||
WSContentSend_PD(HTTP_SNS_TX20, wind_speed_string, wind_speed_avg_string, wind_speed_max_string, wind_direction_string);
|
WSContentSend_PD(HTTP_SNS_TX2X, wind_speed_string, wind_speed_avg_string, wind_speed_max_string, wind_direction_string, wind_direction_degree);
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -203,20 +304,20 @@ bool Xsns35(uint8_t function)
|
||||||
{
|
{
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
if (pin[GPIO_TX20_TXD_BLACK] < 99) {
|
if (pin[GPIO_TX2X_TXD_BLACK] < 99) {
|
||||||
switch (function) {
|
switch (function) {
|
||||||
case FUNC_INIT:
|
case FUNC_INIT:
|
||||||
Tx20Init();
|
Tx2xInit();
|
||||||
break;
|
break;
|
||||||
case FUNC_EVERY_SECOND:
|
case FUNC_EVERY_SECOND:
|
||||||
Tx20Read();
|
Tx2xRead();
|
||||||
break;
|
break;
|
||||||
case FUNC_JSON_APPEND:
|
case FUNC_JSON_APPEND:
|
||||||
Tx20Show(1);
|
Tx2xShow(1);
|
||||||
break;
|
break;
|
||||||
#ifdef USE_WEBSERVER
|
#ifdef USE_WEBSERVER
|
||||||
case FUNC_WEB_SENSOR:
|
case FUNC_WEB_SENSOR:
|
||||||
Tx20Show(0);
|
Tx2xShow(0);
|
||||||
break;
|
break;
|
||||||
#endif // USE_WEBSERVER
|
#endif // USE_WEBSERVER
|
||||||
}
|
}
|
||||||
|
@ -224,4 +325,4 @@ bool Xsns35(uint8_t function)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // USE_TX20_WIND_SENSOR
|
#endif // USE_TX20_WIND_SENSOR || USE_TX23_WIND_SENSOR
|
Loading…
Reference in New Issue