ESP8266是啥?
你可以先搜索一下Arduino,在这里我们不妨极其粗糙地下个定义——ESP8266=国产+炒鸡便宜+带WiFi+常见的Arduino板子.我们在这里只需要知道这些就好.
不过,强烈建议简单自学一下Arduino之后,掌握基本的技能之后再回来阅读下面的部分,之后的文章默认读者已经掌握一定的Arduino编程知识.
让你的Arduino可以给ESP8266编程
默认状态下的Arduino IDE,或者是集成在VSCode等IDE中的Arduino只支持Arduino官方推出的UNO,Nano等开发版,我们需要让IDE支持给ESP8266系列的单片机编程,读者们可以参考ESP官方GitHub的Arduino页面.
核心主要是这两句:
- 输入 https://arduino.esp8266.com/stable/package_esp8266com_index.json 到 the File>Preferences>Additional Boards Manager URLs.
- 打开 Boards Manager from Tools > Board menu 然后安装 esp8266 platform (然后别忘了选上新安装的开发版,多说一句,看清楚自己购买的ESP8266开发版型号,后续以ESP-01为例).
程序部分
直接上代码,有注释,建议从头到尾通读一遍:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
// Enable SSL?
#define SSLEnable
// Hareware configuration
#define onoffPin 2
// WiFi and MQTT Server configuraton
const char *ssid = "ssid";
const char *password = "password";
const char *mqttDomain = "mqtt.example.com";
const unsigned short mqttPort = 8883;
const char *mqttID = "prc/shanghai/wanpingnan rd./no.600/lighting/onoff";
const char *mqttUsername = "admin";
const char *mqttPassword = "public";
const char *fingerprint = "45 45 07 21 11 45 14 19 19 08 10";// Sha-1 of the Certificate (Not CA Cert)
#ifdef SSLEnable
WiFiClientSecure wifiClient;
#else
WiFiClient wifiClient;
#endif
PubSubClient mqttClient(wifiClient);
void callback(char *topic, byte *_payload, unsigned int length);
void setup()
{
// Hareware setup
pinMode(onoffPin, OUTPUT);
Serial.begin(115200);
Serial.println("");
// WiFi setup
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
#ifdef SSLEnable
while (!wifiClient.setFingerprint(fingerprint))
{
Serial.println("[WiFi] SSL Fatal Error...");
delay(5000);
}
#endif
Serial.print("[WiFi] Connecting WiFi...");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println("[WiFi] WiFi connected");
Serial.println("[WiFi] IP address: " + WiFi.localIP().toString());
WiFi.setAutoConnect(true);
WiFi.setAutoReconnect(true);
// MQTT setup
mqttClient.setServer(mqttDomain, mqttPort);
mqttClient.setCallback(callback);
}
void loop()
{
// MQTT loop
while (!mqttClient.connected())
{
Serial.println("[MQTT] Not connected to MQTT server! Establishing connection... | State: " + String(mqttClient.state()));
if (mqttClient.connect(mqttID, mqttUsername, mqttPassword))
{
Serial.println("[MQTT] Connected");
mqttClient.subscribe(mqttID);
}
else
delay(5000);
}
mqttClient.loop();
}
void callback(char *topic, byte *_payload, unsigned int length)
{
// Print the message and translate the payload
String payload = "";
for (int i = 0; i < length; i++)
payload += (char)_payload[i];
Serial.println("[MQTT] Message arrived - Topic:" + String(topic) + " Payload:" + payload);
// Cope with the message
if (payload == "on")
digitalWrite(onoffPin, HIGH);
else
digitalWrite(onoffPin, LOW);
}
用你的客户端试试,是不是小灯跟着你的远程指令闪烁起来了?
Comments NOTHING