Arduino環境編譯esp8266 mqtt連接阿里云,實現設備運云端雙向通信,并同時獲取sntp網絡時間
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開發環境
- #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"//默認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,和設備產品信息
- AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
- //綁定一個設備屬性回調,當遠程修改此屬性,會觸發LED函數
- AliyunIoTSDK::bindData("PowerSwitch", Relay_Control);//電器開關
- AliyunIoTSDK::bindData("VehACSwitch", Air_Control);//空調開關
- AliyunIoTSDK::bindData("LightLuminance",PWM_Control);//主燈亮度PWM
- }
- void loop()
- {
- int t=36;
- AliyunIoTSDK::loop();//必要函數
-
- //時刻讀取硬件串口數據
- 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秒發送一次
- {
- lastMsMain = millis();
- //發送溫度到云平臺
- 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");
- }
- //繼電器開關的屬性修改的回調函數
- void Relay_Control(JsonVariant L)//固定格式,修改參數l
- {
- int Relay = L["PowerSwitch"];//參數l “”為aliyun 的標志符
- AliyunIoTSDK::send("PowerSwitch", Relay);
- if (Relay == 1)
- {
- Serial.println("Relay On_____________");
- digitalWrite(ledPin,HIGH);
- }
- else
- {
- Serial.println("Relay Off____________");
- digitalWrite(ledPin,LOW);
- }
-
- }
- //空調開關的屬性修改的回調函數
- void Air_Control(JsonVariant L)
- {
- int Air = L["VehACSwitch"];//參數l “”為aliyun 的標志符
- AliyunIoTSDK::send("VehACSwitch", Air);
- if (Air == 1)
- Serial.println("Air PowerOn___________");
-
- else
- Serial.println("Air PowerOff__________");
- }
- //PWM變頻的屬性修改的回調函數
- void PWM_Control(JsonVariant L)
- {
- int PWM = L["LightLuminance"];//參數l “”為aliyun 的標志符
- AliyunIoTSDK::send("LightLuminance", PWM);
- Serial.println("PWM value:");
- Serial.println(PWM);
- }
復制代碼
以上程序51hei提供下載:
esp.zip
(1.61 KB, 下載次數: 98)
2020-4-5 14:29 上傳
點擊文件名下載附件
ArduinoIDE 開發esp8266連接mqtt阿里云+sntp 下載積分: 黑幣 -5
|