arduino Uno+arduino D1 實現 阿里雲物聯網控制+IIC匯流排通訊點燈
arduino Uno+arduino D1 實現 阿里雲物聯網控制+IIC匯流排通訊點燈
連線圖
①由於arduino D1在Fritzinig中沒找到,用一個arduino代替一下((ˉ▽ˉ;)…強行改名字)
②三塊板子的SCL連在一起,SDA連在一起。
程式碼
主機程式碼(arduino D1):
#include <ESP8266WiFi.h>//安裝esp8266arduino開發環境
#include <Wire.h> //宣告I2C庫檔案
#include <AliyunIoTSDK.h>//引入阿里雲 IoT SDK
//需要安裝crypto庫、PubSubClient庫
static WiFiClient espClient;
//設定產品和裝置的資訊,從阿里雲裝置資訊裡檢視
//物聯網平臺→例項概覽→公共例項→裝置管理→裝置→檢視→DeviceSecre(右邊的檢視)
#define PRODUCT_KEY "*********"//替換自己的PRODUCT_KEY
#define DEVICE_NAME "*********"//替換自己的DEVICE_NAME
#define DEVICE_SECRET "*********"//替換自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai"//預設cn-shanghai
//設定連線WiFi資訊
#define WIFI_SSID "*********"//自己的WIFI名稱(熱點同樣)
#define WIFI_PASSWD "*********"//自己的WIFI密碼
//-------------------------------------------------------------------------
unsigned long lastMsMain = 0;
char a; //從機LED1狀態,用於傳送到雲平臺
char b; //從機LED2狀態,用於傳送到雲平臺
//-------------------------------------------------------------------------
void setup()
{
Serial.begin(9600);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);
//連線到wifi
wifiInit(WIFI_SSID, WIFI_PASSWD);
//初始化 iot,需傳入 wifi 的 client,和裝置產品資訊
AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID);
//繫結一個裝置屬性回撥,當遠端修改此屬性,會觸發LED函式
AliyunIoTSDK::bindData("LED", LED);//主機的板載LED
AliyunIoTSDK::bindData("LED1", LED1);//從機1的板載LED
AliyunIoTSDK::bindData("LED2", LED2);//從機2的板載LED
Wire.begin(); // 加入 i2c 匯流排,作為主機
}
//-------------------------------------------------------------------------
void loop()
{
AliyunIoTSDK::loop();//必要函式
if (millis() - lastMsMain >= 2000)//每2秒傳送一次
{
lastMsMain = millis();
//傳送LED狀態到雲平臺(高電平:1;低電平:0)
AliyunIoTSDK::send("LEDPIN", digitalRead(LED_BUILTIN));
AliyunIoTSDK::send("LEDPIN1", a);
AliyunIoTSDK::send("LEDPIN2", b);
}
}
//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");
}
//主機板載燈控制函式(阿里雲端修改LED屬性時觸發)-------------------------------------------------------
void LED(JsonVariant L)//固定格式,修改引數L
{
int LED = L["LED"];//引數傳入(LED)
if (LED == 0)
{
digitalWrite(LED_BUILTIN, HIGH);
}
else
{
digitalWrite(LED_BUILTIN, LOW);
}
Serial.printf("收到的LED是:"); Serial.println(LED);
}
//從機1 IIC通訊傳送板載燈控制訊號函式(阿里雲端修改LED1屬性時觸發)--------------------------
void LED1(JsonVariant L)//固定格式,修改引數L
{
int LED = L["LED1"];//引數傳入(LED1)
Wire.beginTransmission(4); // 傳送資料到裝置號為4的從機
Wire.write("light is "); // 傳送字串"light is "
Wire.write(LED); // 傳送變數LED的值
Wire.endTransmission(); // 結束資料傳送
Wire.requestFrom(4, 1); //通知4號從機上傳1個位元組(從機板載燈的狀態)
while(Wire.available()>0) // 當主機接收到從機資料時觸發
{
a=Wire.read(); //將板載燈狀態賦值給a,用於傳輸回阿里雲,修改狀態指示
}
Serial.printf("收到的LED1是:"); Serial.println(a);
}
//從機2 IIC通訊傳送板載燈控制訊號函式(阿里雲端修改LED2屬性時觸發)--------------------------
void LED2(JsonVariant L)//固定格式,修改引數L
{
int LED = L["LED2"];//引數傳入(LED2)
Wire.beginTransmission(5); // 傳送資料到裝置號為5的從機
Wire.write("light is "); // 傳送字串"light is "
Wire.write(LED); // 傳送變數LED的值
Wire.endTransmission(); // 結束資料傳送
Wire.requestFrom(5, 1); //通知5號從機上傳1個位元組(從機板載燈的狀態)
while(Wire.available()>0) // 當主機接收到從機資料時觸發
{
b=Wire.read(); //將板載燈狀態賦值給b,用於傳輸回阿里雲,修改狀態指示
}
Serial.printf("收到的LED2是:"); Serial.println(b );
}
//如果要增加控制從機數量,繼續增加函式數量即可
從機程式碼1(arduino Uno):
#include <Wire.h> //宣告I2C庫檔案
int x; //變數x值決定本從機的LED是否點亮
//初始化————————————————————————————————————
void setup()
{
Wire.begin(4); // 加入 i2c 匯流排,設定從機地址為 #4
Wire.onReceive(receiveEvent); // 註冊接收到主機字元的事件
Wire.onRequest(requestEvent); // 註冊主機通知從機上傳資料的事件
Serial.begin(9600); // 設定串列埠波特率
pinMode(LED_BUILTIN,OUTPUT); // 設定本從機板載燈為輸出
}
//主程式————————————————————————————————————
void loop()
{
delay(100); //延時
}
//收到主機字元事件————————————————————————————————
void receiveEvent(int howMany) //當從機接收到主機字元,執行該事件
{
while( Wire.available()>1) // 迴圈執行,直到資料包只剩下最後一個字元
{
char c = Wire.read(); // 作為字元接收位元組
Serial.print(c); // 把接收到的字元列印到串列埠監視器中
}
x = Wire.read(); //接收主機傳送的資料包中的最後一個位元組(板載燈控制位元組)
Serial.println("");
Serial.println(x); //把控制位元組列印到串列埠監視器中
if(x==1) //對控制位元組進行判斷,點亮or熄滅LED。
{
digitalWrite(LED_BUILTIN,HIGH);
}
else
{
digitalWrite(LED_BUILTIN,LOW);
}
}
//當主機通知從機上傳資料,執行該事件,上傳板載燈狀態————————————————
void requestEvent()
{
Wire.write( x); // 響應主機的通知,向主機傳送一個位元組資料
}
從機程式碼2(Uno 只修改了從機地址引數,方便複製):
#include <Wire.h> //宣告I2C庫檔案
int x; //變數x值決定本從機的LED是否點亮
//初始化————————————————————————————————————
void setup()
{
Wire.begin(5); // 加入 i2c 匯流排,設定從機地址為 #5
Wire.onReceive(receiveEvent); // 註冊接收到主機字元的事件
Wire.onRequest(requestEvent); // 註冊主機通知從機上傳資料的事件
Serial.begin(9600); // 設定串列埠波特率
pinMode(LED_BUILTIN,OUTPUT); // 設定本從機板載燈為輸出
}
//主程式————————————————————————————————————
void loop()
{
delay(100); //延時
}
//收到主機字元事件————————————————————————————————
void receiveEvent(int howMany) //當從機接收到主機字元,執行該事件
{
while( Wire.available()>1) // 迴圈執行,直到資料包只剩下最後一個字元
{
char c = Wire.read(); // 作為字元接收位元組
Serial.print(c); // 把接收到的字元列印到串列埠監視器中
}
x = Wire.read(); //接收主機傳送的資料包中的最後一個位元組(板載燈控制位元組)
Serial.println("");
Serial.println(x); //把控制位元組列印到串列埠監視器中
if(x==1) //對控制位元組進行判斷,點亮or熄滅LED。
{
digitalWrite(LED_BUILTIN,HIGH);
}
else
{
digitalWrite(LED_BUILTIN,LOW);
}
}
//當主機通知從機上傳資料,執行該事件,上傳板載燈狀態————————————————
void requestEvent()
{
Wire.write( x); // 響應主機的通知,向主機傳送一個位元組資料
}
阿里雲物聯網控制
阿里雲物聯網平臺建立產品、裝置
第一步:進入公共例項(免費嘛( ̄▽ ̄)")
第二步:建立產品
第三步:建立自定義品類產品
第四步:編輯功能草稿
第五步:新增自定義功能(新增完後記得左下角的“釋出上線”)
第六步:建立裝置
裝置建立完成後,如果你的Arduino D1已經連上網了,而且保證程式碼中的這幾項沒有填錯,裝置將顯示線上狀態。
//設定產品和裝置的資訊,從阿里雲裝置資訊裡檢視
//物聯網平臺→例項概覽→公共例項→裝置管理→裝置→檢視→DeviceSecre(右邊的檢視)
#define PRODUCT_KEY "*********"//替換自己的PRODUCT_KEY
#define DEVICE_NAME "*********"//替換自己的DEVICE_NAME
#define DEVICE_SECRET "*********"//替換自己的DEVICE_SECRET
#define REGION_ID "cn-shanghai"//預設cn-shanghai
//設定連線WiFi資訊
#define WIFI_SSID "*********"//自己的WIFI名稱(熱點同樣)
#define WIFI_PASSWD "*********"//自己的WIFI密碼
阿里雲物聯網使用線上除錯進行測試
如果以上操作未出現錯誤,到這裡應該能看到三個板載燈按照你設定的引數實現亮滅。
IoT Studio 阿里雲web視覺化開發
第一步:
第二步:
第三步:
第四步:
第五步:
第六步:儲存、釋出、進入網頁
相關文章
- 元件間通訊--利用mitt實現事件匯流排元件MIT事件
- 學習筆記-Verilog實現IIC匯流排協議筆記協議
- 現場匯流排與工業乙太網通訊模型模型
- 樂訊通雲通訊:物聯網路卡在智慧路燈的應用
- IIC序列匯流排的組成及工作原理
- WebWorker與WebSocket實現前端訊息匯流排Web前端
- RS-485匯流排通訊裝置
- 樂訊通雲通訊:什麼是物聯網路卡?物聯網路卡的優點是什麼?
- 物聯網:實現sIoT配置並實現sIoT上mqtt訊息的通訊MQQT
- 樂訊通雲通訊:物聯網路卡有什麼優點
- ECU通訊:CAN匯流排模擬測試
- 物聯網閘道器開發:基於MQTT訊息匯流排的設計過程(上)MQQT
- MQTT物聯網通訊協議入門及Demo實現MQQT協議
- 【物聯網雲端對接-2】通過MQTT協議與阿里雲物聯網套件進行雲端通訊MQQT協議阿里套件
- 樂訊通雲通訊:物聯網路卡在物聯網中起到什麼作用
- 最小物聯網系統(八)——與微控制器通訊
- “人類先鋒”點亮物聯網燈塔
- 樂訊通雲通訊:物聯網路卡在車聯網的應用
- 樂訊通雲通訊:物聯網路卡在車聯網中的作用
- 無線通訊與環境獵能將實現萬物聯網
- 樂訊通雲通訊:如何選擇物聯網路卡
- 樂訊通雲通訊:物聯網路卡有哪些功能
- 樂訊通雲通訊:物聯網路卡都有哪些用途
- 物聯網通訊協議介紹協議
- 事件匯流排的設計與實現事件
- 我最喜歡的程式之間通訊方式-訊息匯流排
- 匯流排
- 點亮城市名片丨計訊物聯智慧燈杆系統在通訊基地的成功應用
- 物聯網?快來看 Arduino 上雲啦UI
- 物聯網常見通訊協議梳理協議
- 樂訊通雲通訊:物聯卡與物聯網技術讓窗簾更加的智慧化
- 手寫訊息匯流排LiveDataBusLiveData
- SpringCloud(六)Bus訊息匯流排SpringGCCloud
- I2S音訊匯流排音訊
- 樂訊通雲通訊:物聯網路卡在食品的應用
- 樂訊通雲通訊:物聯網路卡在無人機的應用無人機
- 樂訊通雲通訊:物聯網路卡是做什麼的
- 樂訊通雲通訊:物聯網路卡助力智慧音響