close

作者:HelloGitHub-Anthony

這裡是 HelloGitHub 推出的講解開源硬件開發平台 Arduino 的系列教程。

第一篇:Arduino 介紹和開發環境搭建
第二篇:製作溫濕度顯示器

上一篇文章,我們介紹了如何安裝 Arduino 支持庫、DHT 11 溫濕度傳感器以及 OLED 屏幕的使用,並用 Arduino 製作了一個小型溫濕度顯示器。

在這個講究萬物互聯的時代,讓咱們的 Arduino 溫濕度也去「雲上」玩玩,有個學名叫物聯網。

物聯網(IoT) 是由物理對象組成的網絡,這些物理對象嵌入了傳感器、軟件和其他技術,以便可以通過互聯網與其他設備和系統建立連接並交換數據。

是不是瞬間感覺高大上了一些,但是不用擔心本期的知識超綱,因為高深的我也不會!

今天我們講解:如何把上一期做的溫濕度設備上雲,通過物聯網平台完成實時數據上傳和遠程控制設備。實現將 Arduino 設備測量的溫濕度數據上傳到物聯網平台,然後接收平台發送指令控制設備上 LED 燈光開關。

你是否已經開始摩拳擦掌了呢?下面我們開始「上雲」!

一、實現聯網功能 1.1 模塊介紹

首先,如果想要 Arduino 連接到物聯網平台的服務器,必然需要先讓設備能夠連接到網絡(比如家裡的 WiFi),這裡我們就需要用到 ESP-01(s) 模塊,來實現這個功能。

其使用方法和前文介紹過的組件類似,只需要用到 VCC(3.3v)、GND、TX、RX 四根線,就能和 Arduino 進行通信。我這裡使用的是 ESP-01+轉接板,轉接板實現了 5v->3.3v 的變壓以及 Rx 和 Tx 接口的引出,方便後續使用。

大多數 ESP-01(s) 模塊在出廠時,都已經內置了 AT 指令固件,在使用時只需要向模塊發送 AT 指令即可進行網絡連接、數據傳輸等操作。

關於什麼是 AT 指令,簡單來講就是設備間一種通信消息規範,更具體的定義和應用場景讀者可以自行了解。

1.2 模塊使用

ESP-01 模塊接線方式如下:

GND -> GND
VCC -> 3.3v(單獨模塊) 5.5v(帶轉接板)
Tx -> Rx
Rx -> TX

用到的 AT 指令如下:

AT+RST:重置模塊
AT+CWMODE=1:切換模式
AT+CWQAP:斷開 WiFi 連接
AT+CWJAP="WiFi名","密碼":連接 WiFi
AT+CIPSTART="TCP","IP",端口:連接服務器
AT+CIPMODE=1:切換到 TCP 透傳模式
AT+CIPSEND:開始發送數據
1.3 代碼

Arduino 連接 WiFi 的代碼:

#include<Arduino.h>booleanat_exec(char*data,char*keyword,unsignedlongtime_out){Serial.println(data);Serial.flush();delay(100);//等待響應unsignedlongstart=millis();while(Serial.available()<strlen(keyword)){if(millis()-start>time_out)returnfalse;}if(Serial.find(keyword))returntrue;elsereturnfalse;while(Serial.available())Serial.read();//清空串口緩存}voidsetup(){Serial.begin(115200);while(!at_exec("AT+RST","OK",1000));while(!at_exec("AT+CWMODE=1","OK",1000));while(!at_exec("AT+CWQAP","OK",1000));while(!at_exec("AT+CWJAP=\"HelloGithub\",\"PassWord\"","WIFICONNECTED",2000));while(!at_exec("AT+CIPSTART=\"TCP\",\"183.230.40.40\",1811","CONNECT",1000));while(!at_exec("AT+CIPMODE=1","OK",500));while(!at_exec("AT+CIPSEND","OK",500));//Serial.println("*產品ID#鑒權信息#腳本名稱*");//下文會將如何獲取這部分信息}

注意:

下載之前要斷開 Arduino 和 ESP-01 的連接,否則可能會下載失敗
執行 AT+CIPSEND 後,模塊將不再響應 AT 指令,如果需要修改配置則必須斷電重啟模塊
記得改 AT+CWJAP 的參數,對應 WiFi 用戶名和密碼

燒錄後,連接模塊重啟 Arduino。如果在路由器管理界面的「已連接設備」頁面,看到我們的 WiFi 設備,則表示成功!

二、物聯網平台

這裡我們使用的是 OneNet 物聯網平台,它是由中國移動打造的物聯網 PaaS 開放平台,通過這個平台可以輕鬆(免費)實現設備」上雲「。

下面,將介紹從註冊開始到完成設備上雲,所需的所有雲端配置步驟。

2.1 註冊

打開 OneNet 官網,點擊右上角的「註冊」註冊賬號。

2.2 新建產品

完成註冊登錄賬號後,點擊右上角的「控制台」進入控制頁面。

進入後點擊 「全部產品服務」->「多協議接入」:

在「多協議接入界面」選擇 TCP 透傳->添加產品:

在彈出的側邊欄填寫相關信息,「產品行業」和「類別」隨便填寫即可,最後點擊「確定」完成新建產品。

2.3 添加設備

找到剛剛創建的產品我的是 「HelloGitHub」,然後點擊左側欄的「設備列表」,在新出現的頁面中點擊「添加設備」,填寫完相關信息最後點擊「添加」,完成增添設備的操作。

2.4 編寫數據解析腳本

接下來,我們配置雲端的數據解析腳本,不用自己動手寫直接下載官方腳本到本地改一改就能用。

在解壓下載好的文件夾中,找到 sample.lua 文件里的 device_timer_init 函數(第 303 行),改成如下內容:

functiondevice_timer_init(dev)--定時發送開關燈指令--dev:timeout(0)dev:add(10,"open","open")dev:add(12,"close","close")end

找到 device_data_analyze 函數(在文件的最後),修改為如下內容:

functiondevice_data_analyze(dev)localt={}locala=0locals=dev:size()--我們定義一次發送十個字節,分別為溫度濕度--add_val(t,"Temperature",a,dev:bytes(1,5))add_val(t,"Humidity",a,dev:bytes(6,5))dev:response()dev:send("received")returns,to_json(t)end

如果大家對腳本使用方法感興趣的話,可以查看代碼的注釋和官網上接入文檔,這裡就不做過多講解了。

2.5 上傳腳本

將該文件保存後,回到剛剛打開過的「設備列表」點擊「上傳解析腳本」。

至此,雲端配置完畢。

2.6 連接物聯網平台

修改 1.3 的代碼,將 「下文會將如何獲取這部分信息」 這行代碼改成:

Serial.println("*產品ID#ILoveHelloGitHub#HG*");

將雲端配置完成後,獲得的產品 ID、鑒權信息、腳本名稱等參數,替換到對應位置。(*產品ID#鑒權信息#腳本名稱*)

最後,重新燒錄代碼並重啟 ESP-01 模塊。稍等片刻,在雲端刷新「設備列表」頁面,看到我們的設備,證明設備成功連接上了物聯網平台。

三、Arduino 上雲

經過前面的鋪墊,我們「上雲」的旅程即將迎來最激動人心的部分。將設備所在環境的溫濕度數據上傳到雲端!

3.1 代碼

既然是上傳溫濕度數據,就需要用到我們上期講的 DHT11 模塊(溫濕度傳感器),然後結合本期連接網絡的代碼,分分鐘就可以完成啦。

但是為了增加項目的趣味性,我額外添加了個解析物聯網平台發送命令,遠程控制開關 LED 的函數。

代碼片段如下:

voidsetup(){//改成自己雲端的參數Serial.println("*產品ID#ILoveHelloGitHub#HG*");}//根據從串口收到的字符串執行相應的指令boolcommand_parse(Stringcommand){...if(command=="open"){digitalWrite(LED_BUILTIN,HIGH);}elseif(command=="close"){digitalWrite(LED_BUILTIN,LOW);}}

完整代碼:https://github.com/HelloGitHub-Team/Article/blob/master/contents/Other/Arduino/3/code.cpp

最後,修改完整代碼中的 WiFi 名和密碼,以及 產品 ID 後,重新燒錄代碼即可。

3.2 上傳溫濕度數據

稍等片刻後,查看物聯網平台的「設備信息」,如果看到 Arduino 上傳的室內溫濕度信息,就證明我們的代碼運行成功啦。

3.3 遠程控制

下面演示如何通過物聯網平台,遠程控制燈的開關。

打開物聯網平台,點擊「設備界面」的「下發指令」,在彈出的表單上選擇「字符串」選項,輸入 「open」 或 「close」 指令。

到這裡,就完成了遠程控制 Arduino 內置 LED 燈開/關的效果!

成功!撒花🎉

四、總結

這篇文章,結合 Arduino、傳感器、WiFi 以及 OneNet 物聯網平台,通過邊做邊講的方式,講述了一個設備從聯網到上雲的完整過程。雖然是入門級的教程,但是這些知識已經可以幫助你完成,諸如智能開關、自動餵食器等實用和有趣的項目。

不小看每一次小的進步,不積跬步無以至千里。

如果說移動互聯網的浪潮已經過去,那麼下一個浪潮中會不會有物聯網的影子呢?反正我覺得技多不壓身,對此你怎麼看?歡迎在評論區發表你的看法。

至此,整個 Arduino 系列教程,到這裡就結束了。完結!再次撒花🎉

希望,HelloGitHub 的 Arduino 系列教程,能夠勾起你對物聯網的興趣, 畢竟興趣才是最好的好老師。

本期的內容就是這些,這裡是 HelloGitHub 分享 GitHub 上有趣、入門級的開源項目。


感謝您的閱讀,如果覺得內容還不錯,一定要記得點讚、留言、分享,我們下期見!

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()