|
|
Arduino環(huán)境編譯esp8266 mqtt連接阿里云,實(shí)現(xiàn)設(shè)備運(yùn)云端雙向通信,并同時(shí)獲取sntp網(wǎng)絡(luò)時(shí)間
Arduino源程序如下:
- //13=D7 16=D0 15=D8 14=D5 12=D6 4=D2 3=D9 2=D4=GPIO2 1=D10 0=D3=GPIO0
- #include <ESP8266WiFi.h>//安裝esp8266arduino開(kāi)發(fā)環(huán)境
- #include <AliyunIoTSDK.h>//引入阿里云 IoT SDK
- #include <NTPClient.h>
- #include <WiFiUdp.h>
- #define PRODUCT_KEY "***********"//替換自己的PRODUCT_KEY
- #define DEVICE_NAME "***********"//替換自己的DEVICE_NAME
- #define DEVICE_SECRET "***********"//替換自己的DEVICE_SECRET
- #define REGION_ID "cn-shanghai"//默認(rèn)cn-shanghai
- #define WIFI_SSID "***********"//替換自己的WIFI
- #define WIFI_PASSWD "***********"//替換自己的WIFI
- #define ledPin 0
- static WiFiClient espClient;
- WiFiUDP ntpUDP;
- NTPClient timeClient(ntpUDP,"ntp1.aliyun.com",0,0);//30*60*1000
- unsigned long lastMsMain = 0;
- String rxbuff="";
- void setup()
- {
- Serial.begin(9600);
- pinMode(ledPin, OUTPUT);
- digitalWrite(ledPin, HIGH);
- //連接到wifi
- wifiInit(WIFI_SSID, WIFI_PASSWD);
- timeClient.begin();//SNTP begin
- //初始化 iot,需傳入 wifi 的 client,和設(shè)備產(chǎn)品信息
- AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
- //綁定一個(gè)設(shè)備屬性回調(diào),當(dāng)遠(yuǎn)程修改此屬性,會(huì)觸發(fā)LED函數(shù)
- AliyunIoTSDK::bindData("PowerSwitch", Relay_Control);//電器開(kāi)關(guān)
- AliyunIoTSDK::bindData("VehACSwitch", Air_Control);//空調(diào)開(kāi)關(guān)
- AliyunIoTSDK::bindData("LightLuminance",PWM_Control);//主燈亮度PWM
- }
- void loop()
- {
- int t=36;
- AliyunIoTSDK::loop();//必要函數(shù)
-
- //時(shí)刻讀取硬件串口數(shù)據(jù)
- while (Serial.available())
- {
- rxbuff += char(Serial.read());
- }
- while (Serial.read() >= 0) {} //清除串口緩存
- if (rxbuff.length() > 0)
- {
- Serial.println(rxbuff[2]);
- rxbuff="";
- }
-
- if (millis() - lastMsMain >= 2000)//每2秒發(fā)送一次
- {
- lastMsMain = millis();
- //發(fā)送溫度到云平臺(tái)
- AliyunIoTSDK::send("IndoorTemperature", t);//溫度上傳
- timeClient.update();
- //Serial.println(timeClient.getFormattedTime());
- //Serial.println(timeClient.getEpochTime());
- }
- }
- //wifi 連接
- void wifiInit(const char *ssid, const char *passphrase)
- {
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, passphrase);
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(1000);
- Serial.println("WiFi not Connect");
- }
- Serial.println("Connected to AP");
- }
- //繼電器開(kāi)關(guān)的屬性修改的回調(diào)函數(shù)
- void Relay_Control(JsonVariant L)//固定格式,修改參數(shù)l
- {
- int Relay = L["PowerSwitch"];//參數(shù)l “”為aliyun 的標(biāo)志符
- AliyunIoTSDK::send("PowerSwitch", Relay);
- if (Relay == 1)
- {
- Serial.println("Relay On_____________");
- digitalWrite(ledPin,HIGH);
- }
- else
- {
- Serial.println("Relay Off____________");
- digitalWrite(ledPin,LOW);
- }
-
- }
- //空調(diào)開(kāi)關(guān)的屬性修改的回調(diào)函數(shù)
- void Air_Control(JsonVariant L)
- {
- int Air = L["VehACSwitch"];//參數(shù)l “”為aliyun 的標(biāo)志符
- AliyunIoTSDK::send("VehACSwitch", Air);
- if (Air == 1)
- Serial.println("Air PowerOn___________");
-
- else
- Serial.println("Air PowerOff__________");
- }
- //PWM變頻的屬性修改的回調(diào)函數(shù)
- void PWM_Control(JsonVariant L)
- {
- int PWM = L["LightLuminance"];//參數(shù)l “”為aliyun 的標(biāo)志符
- AliyunIoTSDK::send("LightLuminance", PWM);
- Serial.println("PWM value:");
- Serial.println(PWM);
- }
復(fù)制代碼
以上程序51hei提供下載:
esp.zip
(1.61 KB, 下載次數(shù): 98)
2020-4-5 14:29 上傳
點(diǎn)擊文件名下載附件
ArduinoIDE 開(kāi)發(fā)esp8266連接mqtt阿里云+sntp 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|