使用 amazon mqtt 从 esp8266 发布按钮按下
Using amazon mqtt to publish a button press from a esp8266
我有以下代码打印到我在 mongoose os 中的串行控制台。我可以在 amazon aws 和 mdash 中看到该设备在线。我从酒吧回来了一个 0,它从来没有向 aws mqtt 发送消息我已经在 mqtt 的测试部分订阅了这个主题,所以不确定我做错了什么
load("api_gpio.js");
load("api_mqtt.js");
load("api_sys.js");
let pin = 0;
GPIO.set_button_handler(
pin,
GPIO.PULL_UP,
GPIO.INT_EDGE_NEG,
50,
function (x) {
let topic = "mOS/topic1";
let message = JSON.stringify({
total_ram: Sys.total_ram(),
free_ram: Sys.free_ram(),
});
let ok = MQTT.pub(topic, message, message.length);
let test = ok;
let res = MQTT.pub("mOS/topic1", JSON.stringify({ a: 1, b: 2 }), 1);
print(res);
print("Published:", res ? "yes" : "no");
},
true
);
print("Flash button is configured on GPIO pin", pin);
print("Press the flash button now!");
MQTT.sub(
"mOS/topic1",
function (conn, topic, msg) {
print("Topic:", topic, "message:", msg);
},
null
);
我很确定我已经满足了所有这些要求
有效连接
有效且有效的证书
允许所需连接和操作的策略
我有一个 mos-默认策略,具有以下内容
{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
],
"Version": "2012-10-17"
}
下面有一个 mos.yml 文件。我的应用程序中确实有 aws.crt.pem 和 aws.key.pem 文件。
author: mongoose-os
description: A JS-enabled demo Mongoose OS firmware
# arch: PLATFORM
version: 1.0
manifest_version: 2017-05-18
libs_version: ${mos.version}
modules_version: ${mos.version}
mongoose_os_version: ${mos.version}
config_schema:
- ["mqtt.server", "iot.eclipse.org:1883"]
- ["i2c.enable", true]
tags:
- js
filesystem:
- fs
libs:
- origin: https://github.com/mongoose-os-libs/boards
- origin: https://github.com/mongoose-os-libs/js-demo-bundle
conds:
# It's not that we can't work with multicore
# but we cannot afford it because of space (32K).
- when: mos.platform == "esp32"
apply:
build_vars:
ESP_IDF_SDKCONFIG_OPTS: >
${build_vars.ESP_IDF_SDKCONFIG_OPTS}
CONFIG_FREERTOS_UNICORE=y
let connected = MQTT.isConnected();
print(connected);
returns 错误,我不知道如何调试这个
我遵循了此处的所有说明,包括互联网按钮视频
https://mongoose-os.com/docs/mongoose-os/cloud/aws.md
好的,它又开始工作了,我需要删除亚马逊中的设备,然后再次 运行 mos aws 设置命令。
所以真正的问题是我每次更新我的代码时都在刷新我的设备,它会覆盖我的 wifi 设置、我的 aws 设置和我的 mdash 设置。
感谢其他 source 的帮助,这为我解决了问题
Use mos call FS.List to get a directory listing of the files in your device
Use mos get to retrieve your credentials and save them locally in your fs dir.
E.g.:
$ mos get aws-esp32_807A98.key.pem > fs/aws-esp32_807A98.key.pem
$ mos get aws-esp32_807A98.crt.pem > fs/aws-esp32_807A98.crt.pem
$ mos get ca.pem > fs/ca.pem
Use mos config-get to read your config, or just copy from that verbose output you get when you initialize your device. Save those to mos.yml.
E.g.:
["aws.thing_name", ""]
["mqtt.enable", true]
["mqtt.server", "a1234b5678cde-ats.iot.us-east-2.amazonaws.com:8883"]
["mqtt.ssl_ca_cert", "ca.pem"]
["mqtt.ssl_cert", "aws-esp32_807A98.crt.pem"]
["mqtt.ssl_key", "aws-esp32_807A98.key.pem"]
So, when you re-flash, you re-write your credentials and configure your device with the same data again.
我有以下代码打印到我在 mongoose os 中的串行控制台。我可以在 amazon aws 和 mdash 中看到该设备在线。我从酒吧回来了一个 0,它从来没有向 aws mqtt 发送消息我已经在 mqtt 的测试部分订阅了这个主题,所以不确定我做错了什么
load("api_gpio.js");
load("api_mqtt.js");
load("api_sys.js");
let pin = 0;
GPIO.set_button_handler(
pin,
GPIO.PULL_UP,
GPIO.INT_EDGE_NEG,
50,
function (x) {
let topic = "mOS/topic1";
let message = JSON.stringify({
total_ram: Sys.total_ram(),
free_ram: Sys.free_ram(),
});
let ok = MQTT.pub(topic, message, message.length);
let test = ok;
let res = MQTT.pub("mOS/topic1", JSON.stringify({ a: 1, b: 2 }), 1);
print(res);
print("Published:", res ? "yes" : "no");
},
true
);
print("Flash button is configured on GPIO pin", pin);
print("Press the flash button now!");
MQTT.sub(
"mOS/topic1",
function (conn, topic, msg) {
print("Topic:", topic, "message:", msg);
},
null
);
我很确定我已经满足了所有这些要求
有效连接
有效且有效的证书
允许所需连接和操作的策略
我有一个 mos-默认策略,具有以下内容
{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*"
}
],
"Version": "2012-10-17"
}
下面有一个 mos.yml 文件。我的应用程序中确实有 aws.crt.pem 和 aws.key.pem 文件。
author: mongoose-os
description: A JS-enabled demo Mongoose OS firmware
# arch: PLATFORM
version: 1.0
manifest_version: 2017-05-18
libs_version: ${mos.version}
modules_version: ${mos.version}
mongoose_os_version: ${mos.version}
config_schema:
- ["mqtt.server", "iot.eclipse.org:1883"]
- ["i2c.enable", true]
tags:
- js
filesystem:
- fs
libs:
- origin: https://github.com/mongoose-os-libs/boards
- origin: https://github.com/mongoose-os-libs/js-demo-bundle
conds:
# It's not that we can't work with multicore
# but we cannot afford it because of space (32K).
- when: mos.platform == "esp32"
apply:
build_vars:
ESP_IDF_SDKCONFIG_OPTS: >
${build_vars.ESP_IDF_SDKCONFIG_OPTS}
CONFIG_FREERTOS_UNICORE=y
let connected = MQTT.isConnected();
print(connected);
returns 错误,我不知道如何调试这个
我遵循了此处的所有说明,包括互联网按钮视频 https://mongoose-os.com/docs/mongoose-os/cloud/aws.md
好的,它又开始工作了,我需要删除亚马逊中的设备,然后再次 运行 mos aws 设置命令。
所以真正的问题是我每次更新我的代码时都在刷新我的设备,它会覆盖我的 wifi 设置、我的 aws 设置和我的 mdash 设置。
感谢其他 source 的帮助,这为我解决了问题
Use mos call FS.List to get a directory listing of the files in your device
Use mos get to retrieve your credentials and save them locally in your fs dir.
E.g.:
$ mos get aws-esp32_807A98.key.pem > fs/aws-esp32_807A98.key.pem
$ mos get aws-esp32_807A98.crt.pem > fs/aws-esp32_807A98.crt.pem
$ mos get ca.pem > fs/ca.pem
Use mos config-get to read your config, or just copy from that verbose output you get when you initialize your device. Save those to mos.yml.
E.g.:
["aws.thing_name", ""]
["mqtt.enable", true]
["mqtt.server", "a1234b5678cde-ats.iot.us-east-2.amazonaws.com:8883"]
["mqtt.ssl_ca_cert", "ca.pem"]
["mqtt.ssl_cert", "aws-esp32_807A98.crt.pem"]
["mqtt.ssl_key", "aws-esp32_807A98.key.pem"]
So, when you re-flash, you re-write your credentials and configure your device with the same data again.