8266端代码 基本功能是 esp8266 先通过STA模式连接附近wifi上网,然后通过MQTT协议和手机端APP通信,app发送信号给8266,控制继电器开/关,从而控制开机
C代码 #include <ESP8266WiFi.h> /* 依赖 PubSubClient 2.4.0 */ #include <PubSubClient.h> /* 连接您的WIFI SSID和密码 */ #define WIFI_SSID "ZY" #define WIFI_PASSWD "87194821" /* 线上环境域名和端口号 */ #define MQTT_SERVER "a14UbBVbU7b.iot-as-mqtt.cn-shanghai.aliyuncs.com" #define MQTT_PORT 1883 #define MQTT_USRNAME "esp8266&a14UbBVbU7b" #define CLIENT_ID "esp8266|securemode=3,signmethod=hmacsha1|" #define MQTT_PASSWD "AD4D5041FEF582284891A98095E38950BAA7E4F5" //发布消息用的topic #define PubTopic "/a14UbBVbU7b/esp8266/user/led" unsigned long lastMs = 0; WiFiClient espClient; PubSubClient client(espClient); //收到消息后的回调函数 void callback(char *topic, byte *payload, unsigned int length) { if ((strstr((char *)payload, "369") != NULL)) { // 如果收到的信息以“1”为开始 digitalWrite(LED_BUILTIN, LOW); // 则点亮LED。 digitalWrite(0, LOW); Serial.println("LED OFF"); delay(800); Serial.println("LED ON"); digitalWrite(LED_BUILTIN, HIGH); digitalWrite(0, HIGH); } Serial.print("Message arrived ["); Serial.print(topic); Serial.print("] "); payload[length] = '\0'; Serial.println((char *)payload); } // wifi初始化 void wifiInit() { WiFi.mode(WIFI_STA); WiFi.begin(WIFI_SSID, WIFI_PASSWD); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("WiFi not Connect"); } Serial.println("Connected to AP"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.print("espClient ["); client.setServer(MQTT_SERVER, MQTT_PORT); /* 连接WiFi之后,连接MQTT服务器 */ client.setCallback(callback); } //发布一个字符串的消息 void pubMsg(char *msg) { boolean d = client.publish(PubTopic, msg); if (d) { Serial.println("publish success"); } else { Serial.println("publish fail"); } } //发布指定长度的字符消息 void pubMsgLen(uint8_t *msg, int len) { boolean d = client.publish(PubTopic, msg, len); if (d) { Serial.println("publish success"); } else { Serial.println("publish fail"); } } //连接到服务器 void mqttCheckConnect() { while (!client.connected()) { Serial.println("Connecting to MQTT Server ..."); if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD)) { Serial.println("MQTT Connected!"); } else { Serial.print("MQTT Connect err:"); Serial.println(client.state()); delay(5000); } } } void setup() { pinMode(LED_BUILTIN, OUTPUT); // 设置板上LED引脚为输出模式 pinMode(0, OUTPUT); // 设置板上继电器引脚为输出模式 digitalWrite(LED_BUILTIN, HIGH); // 启动后关闭板上LED /* initialize serial for debugging */ Serial.begin(9600); //开启串口 Serial.println("Demo Start"); wifiInit(); //连接wifi mqttCheckConnect(); //连接阿里云 pubMsg((char *)"hello aliyun!"); } // the loop function runs over and over again forever void loop() { if (client.connected()) { // 如果开发板成功连接服务器 client.loop(); // 处理信息以及心跳 } else { // 如果开发板未能成功连接服务器 mqttCheckConnect(); // 则尝试连接服务器 Serial.println("connect fail"); delay(500); } }
手机端 手机端采用 appinventor 开发。
上面仅为发送信息测试程序
MQTT服务器采用的是阿里云服务器,所以需要账号和密码这些,有些MQTT插件没有账号密码的功能
MQTT 插件下载 https://yun.laohu.space/share/wg_g-Oa0
待完善…………