使用 mongoose (javascript) + ESP32 从 MQTT flespi 切换 ON/OFF 中继
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);
我有一个项目可以打开和关闭连接到 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);