有很多人问我上个手机APP接MQTT控制文章怎么没写具体控制的代码,现在我就来补充一下说明。首先下载下面资料,安装Arduino软件,如果已经装了软件就安装esp8266的芯片库。
Arduino官网:https://www.arduino.cc/en/software
下面是esp8266芯片库的一键安装
链接:https://pan.baidu.com/s/1Tt4HjUhW6e68t2BYnDYZuA?pwd=lkjh
提取码:lkjh
一键安装时要把Arduino关闭,当然你也可以在Arduino软件里面搜索安装,如果你想崩溃,你就去尝试吧,因为这是外网,我们下载会时不时会断开,有时候会失败,网速还特别慢,我不建议。
安装完毕之后
打开软件点击对应操作如图所示,你会看到多了一个esp8266
安装完毕之后选择芯片第一个
然后简单写几行代码
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
WiFiClient espClient;
PubSubClient client(espClient);
volatile boolean bz=HIGH;
#ifndef AP_CONFIG
String UID = "esp82661";//随便填
#endif
const char* UserName = "thidp@apfkk|esp66|0|MD5";//你的ID
const char* PassWord = "28767a7785e87b959403fdf37fc";//你的密码
bool subTopicCenterFlag = false;
unsigned long bemfa_mqtt_current_millis;
unsigned long bemfa_mqtt_last_re_millis = 0;
void reConnect() {
if (!client.connected()) {
if(client.connect(UID.c_str(),UserName,PassWord)){
Serial.println("connected");
subTopicCenterFlag = true;
} else {
bemfa_mqtt_current_millis = millis();
if (bemfa_mqtt_current_millis - bemfa_mqtt_last_re_millis > 2000) {
bemfa_mqtt_last_re_millis = millis();
Serial.println(" try again reconnect");
}
}
}
}
void subMqttTopicCenter() {
if(subTopicCenterFlag == true){
subTopicCenterFlag = false;
Serial.print("sub topic:");Serial.println("LED");
client.subscribe("LED");//你的主题
}}
void callback(char* rtopic, byte* payload, unsigned int length) {
String msg = "";
String topic = rtopic;
for (int i = 0; i < length; i++) {
msg += (char)payload[i];
}
Serial.println(topic);
Serial.println(msg);//msg是你订阅收到的信息
if(msg=="1")
{
bz=!bz;
digitalWrite(2,bz);
}
msg = "";
topic = "";
}
void setup(){
WiFi.begin("807", "807807807");//你的wifi账号密码
pinMode(2, OUTPUT);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Local IP:");
Serial.print(WiFi.localIP());
client.setServer("amapfkk.iot.gz.baidubce.com", 1883);
client.setCallback(callback);
Serial.begin(9600);
}
void loop(){
reConnect();
client.loop();
subMqttTopicCenter();
// client.publish("LED", "1");//发布信息
// Serial.println("A message has been published");
// delay(1000);
}
除了备注,其他的不用管
备注已经写好了,
然后烧录代码,只要在客户端发送‘1’,单片机灯状态就会去反,快来试一下吧!
如果有什么不足之处,请各位批评指正,如果有帮助那就点个赞关注一下吧