簡體   English   中英

使用貓鼬(javascript)+ ESP32從MQTT flespi打開/關閉繼電器

[英]Switch ON/OFF Relay from MQTT flespi using mongoose (javascript) + ESP32

我有一個項目來打開和關閉連接到ESP32的中繼板(使用Mongoose OS Javascript進行編程)。 現在,使用flespi MQTT,我想通過訂閱主題來打開和關閉繼電器。 我已經完成設置和配置flespi MQTT代理,該代理可以通過在flespi MQTT上鍵入任何消息來打開和關閉中繼板。

因為我是MQTT的新手,所以當我從flespi MQTT接收(訂閱)時,如何僅發出能夠打開和關閉繼電器的特定消息。 例如,“ ON Relay” =將打開繼電器,“ OFF Relay” =將關閉繼電器。 僅此消息將觸發板。

這是我的代碼:

load('api_config.js');
load('api_gpio.js');
load('api_mqtt.js');
load('api_net.js');
load('api_sys.js');
load('api_timer.js');
load('api_adc.js');

let currentState = 0,
  relaypin = 4;

GPIO.set_mode(relaypin, GPIO.MODE_OUTPUT);

MQTT.sub('topic/#', function(conn, topic, msg) {
  print('Topic', topic, 'message', msg);
  print('ok');
  currentState = 1 - currentState;
  GPIO.write(relaypin, currentState);
  print('Relay is = ' + (currentState ? 'OFF' : 'ON'));

}, null);

我已經解決了這個問題:

/*This command will trigger relay 
ON
{
"actuator" : "relay1",
"state": 1
}
OFF
{
"actuator" : "relay1",
"state": 0
}
*/

load('api_config.js');
load('api_gpio.js');
load('api_mqtt.js');
load('api_net.js');
load('api_sys.js');
load('api_timer.js');
load('api_adc.js');

let relaypin = 4;

GPIO.set_mode(relaypin, GPIO.MODE_OUTPUT);
GPIO.write(relaypin, 1);

MQTT.sub('my/rainsensor', function(conn, topic, payload)
{
    let test = JSON.parse(payload);
    print('Topic:', topic, 'actuator type:', test.actuator, 'state:', test.state);

    //Check if '1' received and trigger relay ON
    if (1 === test.state) 
    {
    GPIO.write(relaypin, 0);
    print('Relay is = ON');
    }

    else if (0 === test.state) 
    {
    GPIO.write(relaypin, 1);
    print('Relay is = OFF');
    }

    else
    {
      print('WRONG COMMAND!!!');
    }
}, null);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM