esp32开发板中烧入bin文件时怎样能输入不同的云端信息?
Posted: Tue Sep 05, 2023 3:09 pm
请教个问题,我用Arduino IDE进行esp32开发,写了个程序,用esp32开发板采集dht11温湿度数据并上传阿里云物联网平台,程序中我输入了我在阿里云物联网平台中建立产品信息,mqtt服务器信息,能正确运行。所以我在Arduino IDE下生成了用bin文件,并将这个bin文件发给朋友,希望他将该文件烧入他的esp32,然后展示在阿里云物联网平台上显示温湿度数据的功能。
但是他建立的阿里云物联网平台的设备和服务器信息和我的不同,每个人在阿里云物联网平台上申请的都不同。请问我不给他源程序而只给他bin文件,他怎么能烧入esp32时写入他的阿里云平台信息呢?
谢谢!
程序如下:
#include <WiFi.h>
#include <PubSubClient.h>
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID "ab"
#define WIFI_PASSWD "ab"
/* 设备证书信息*/
#define PRODUCT_KEY "hx2rELHsF" //产品ID,根据自己的产品应用进行更新
#define DEVICE_NAME "dht11" //设备名,根据自己的产品应用进行更新
#define DEVICE_SECRET "89787775ef3eb03c35ba8e66a41ed" //设备key,根据自己的产品应用进行更新
#define REGION_ID "cn-shanghai"
/* 云端域名和端口号,连接阿里云都一样,不需要改 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com" //MQTT服务器登录地址
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
/* 阿里云设备信息的MQTT连接参数中有以下两个参数可以直接拷贝过来,根据自己的产品应用进行更新*/
#define CLIENT_ID "hx2rELHsFp.dht11|securemode=2,signmethod=hmacsha256,timestamp=1669012701541|"
#define MQTT_PASSWD "dd7606f07afab6f2cf54f0e77ee9edfe8dd98338578db11181ed414535885"
#define ALINK_BODY_FORMAT "{\"id\":\"dht11\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
//设备上传数据的post主题
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
//云端服务器下发命令的set主题
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
/* 创建WiFiClient实例 */
WiFiClient espClient; //创建网络连接客户端
/* 创建mqttClient实例 */
PubSubClient mqttClient(espClient); //通过网络连接客户端创建mqtt连接客户端
void setup() {
Serial.begin(9600);
wifiInit(); // 连接Wifi
mqttClient.setServer(MQTT_SERVER, MQTT_PORT); // 连接WiFi之后,设定MQTT服务器与使用的端口
mqttClient.setCallback(callback); // 设置回调监听云端下发的指令,当ESP收到订阅消息时会调用此方法
//启动每5秒发布一次消息。attach()为每隔xx秒周期性执行,这里定义完后就开始周期执行mqttIntervalPost
tim1.attach(5,mqttIntervalPost);
}
void loop()
{
// Serial.println(" "); //为显示好看打印一个空行
while (WiFi.status() != WL_CONNECTED) //检测WIFI有没有断线,断掉的话就重连,直到连上
{
Serial.println("WiFi does not connect, try again ...");
delay(500);
}
mqttCheckConnect(); //检查是否连接到了MQTT服务器
mqttClient.loop(); //mqtt客户端监听,去掉这一行就不能进行云端控制了
}
但是他建立的阿里云物联网平台的设备和服务器信息和我的不同,每个人在阿里云物联网平台上申请的都不同。请问我不给他源程序而只给他bin文件,他怎么能烧入esp32时写入他的阿里云平台信息呢?
谢谢!
程序如下:
#include <WiFi.h>
#include <PubSubClient.h>
/* 连接您的WIFI SSID和密码 */
#define WIFI_SSID "ab"
#define WIFI_PASSWD "ab"
/* 设备证书信息*/
#define PRODUCT_KEY "hx2rELHsF" //产品ID,根据自己的产品应用进行更新
#define DEVICE_NAME "dht11" //设备名,根据自己的产品应用进行更新
#define DEVICE_SECRET "89787775ef3eb03c35ba8e66a41ed" //设备key,根据自己的产品应用进行更新
#define REGION_ID "cn-shanghai"
/* 云端域名和端口号,连接阿里云都一样,不需要改 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com" //MQTT服务器登录地址
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
/* 阿里云设备信息的MQTT连接参数中有以下两个参数可以直接拷贝过来,根据自己的产品应用进行更新*/
#define CLIENT_ID "hx2rELHsFp.dht11|securemode=2,signmethod=hmacsha256,timestamp=1669012701541|"
#define MQTT_PASSWD "dd7606f07afab6f2cf54f0e77ee9edfe8dd98338578db11181ed414535885"
#define ALINK_BODY_FORMAT "{\"id\":\"dht11\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
//设备上传数据的post主题
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
//云端服务器下发命令的set主题
#define ALINK_TOPIC_PROP_SET "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/service/property/set"
/* 创建WiFiClient实例 */
WiFiClient espClient; //创建网络连接客户端
/* 创建mqttClient实例 */
PubSubClient mqttClient(espClient); //通过网络连接客户端创建mqtt连接客户端
void setup() {
Serial.begin(9600);
wifiInit(); // 连接Wifi
mqttClient.setServer(MQTT_SERVER, MQTT_PORT); // 连接WiFi之后,设定MQTT服务器与使用的端口
mqttClient.setCallback(callback); // 设置回调监听云端下发的指令,当ESP收到订阅消息时会调用此方法
//启动每5秒发布一次消息。attach()为每隔xx秒周期性执行,这里定义完后就开始周期执行mqttIntervalPost
tim1.attach(5,mqttIntervalPost);
}
void loop()
{
// Serial.println(" "); //为显示好看打印一个空行
while (WiFi.status() != WL_CONNECTED) //检测WIFI有没有断线,断掉的话就重连,直到连上
{
Serial.println("WiFi does not connect, try again ...");
delay(500);
}
mqttCheckConnect(); //检查是否连接到了MQTT服务器
mqttClient.loop(); //mqtt客户端监听,去掉这一行就不能进行云端控制了
}