一、ESP8266 CP2102介紹
NodeMCU闆載ESP-12E(4MBFlash) WIFI模組和USB轉TTL序列槽(CP2102/CH340)晶片,友善下載下傳固件和調試, NodeMCU預設為Lua固件,如需使用AT指令,請下載下傳新的AT固件。開發闆核心處理器ESP8266在較小尺寸封裝中內建了業界領先的TensilicaL106超低功耗32位微型MCU,帶有16位精簡模式,主頻支援80MHz和160MHz,支援RTOS,內建Wi-FiMAC/B/RF/PA/LNA,闆載天線。支援标準的IEEE802.11b/g/n協定,完整的TCP/IP協定棧。使用者可以使用該子產品為現有的裝置添加聯網功能,也可以建構獨立的網絡控制器。
ESP8266是高性能無線SOC,以最低成本提供最大實用性, 為WiFi功能嵌入其他系統提供無限可能。
802.11 b/g/n
内置TensilicaL106超低功耗32位微型MCU,主頻支援80MHz和160MHz,支援RTOS
160KB SRAM(64KB lRAM+96KB DRAM)
内置10bit高精度ADC
内置TCP/IP協定棧
内置TR開關、balun、LNA、功率放大器和比對網絡内置PLL、穩壓器和電源管理元件, 802.11b模式下+20dBm的輸出功率
A-MPDU、A-MSDU的聚合和0.4s的保護間隔
[email protected],支援WPA/WPA2安全模式
支援AT遠端更新及雲端OTA更新
支援STA/AP/STA+AP工作模式
支援Smart Config功能(包括Android和ios裝置)
HSPI、UART、I2C、12S、IRRemote Control、PWM、GPIO深度睡眠保持電流為10uA,關斷電流小于5uA
2ms之内喚醒、連接配接并傳遞資料包
支援Smart Config/AirKiss-鍵配網支援SDK二次開發
待機狀态消耗功率小于1.0mW (DTIM3)
本次實驗使用的是16号管腳,也就是圖上的D0管腳、VCC和GND。其中DO設定為輸出管腳。
二、相關軟體的下載下傳
本次實驗需要用到的程式設計軟體是Arduino和微信開發者平台。其中,Arduino主要用于舵機端連接配接阿裡雲,微信開發者平台作用是用于手機端,通過微信小程式,實作控制舵機旋轉的功能。
2.1 Arduino安裝和下載下傳
在官網下載下傳Arduino Software | Arduino ,網頁右邊選擇與自己電腦比對的版本。
本次實驗用到的版本則是通過以下步驟進行下載下傳。
第一步:打開百度并且輸入Arduino
第二步:在搜尋結果下點選Arduino中文社群
第三步:在頁面右上腳點選軟體下載下傳
第四步:點選如圖所示下載下傳相應的版本
2.2 配置Ardunio
1.在Arduino中配置開發闆管理器網址,打開【Arduino】 → 【檔案】-->首選項,在附加開發闆管理器網址中填入 https://arduino.esp8266.com/stable/package_esp8266com_index.json
2.安裝esp8266開發闆,打開【工具】 → 【開發闆】 → 【開發闆管理器】,搜尋“esp8266”,選擇版本,安裝:
3.在IDE中選擇對應開發闆,【工具】 →【開發闆】 →【NodeMCU 1.0(ESP-12E Module)】
三、功能實作
3.1 擷取Ardunio連結阿裡雲官方代碼
第一步:打開Ardunio,點選 項目->加載庫->管理庫 在搜尋打aliyun,下載下傳
第二步:等待安裝完成,點選上圖的More info 将官方執行個體代碼複制下來
// 引入 wifi 子產品,并執行個體化,不同的晶片這裡的依賴可能不同 #include <ESP8266WiFi.h>static WiFiClient espClient; // 引入阿裡雲 IoT SDK #include <AliyunIoTSDK.h> // 設定産品和裝置的資訊,從阿裡雲裝置資訊裡檢視 #define PRODUCT_KEY "xxx" #define DEVICE_NAME "Device_D" #define DEVICE_SECRET "xxxxxxxxxxxxxx" #define REGION_ID "cn-shanghai" // 設定 wifi 資訊 #define WIFI_SSID "xxxxx" #define WIFI_PASSWD "xxxxx" void setup() { Serial.begin(115200); // 初始化 wifi wifiInit(WIFI_SSID, WIFI_PASSWD); // 初始化 iot,需傳入 wifi 的 client,和裝置産品資訊 AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID); // 綁定一個裝置屬性回調,當遠端修改此屬性,會觸發 powerCallback // PowerSwitch 是在裝置産品中定義的物聯網模型的 id AliyunIoTSDK::bindData("PowerSwitch", powerCallback); // 發送一個資料到雲平台,LightLuminance 是在裝置産品中定義的物聯網模型的 id AliyunIoTSDK::send("LightLuminance", 100); } void loop() { AliyunIoTSDK::loop(); } // 初始化 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 powerCallback(JsonVariant p) { int PowerSwitch = p["PowerSwitch"]; if (PowerSwitch == 1) { // 啟動裝置 } } |
第三步:在相應的地方填寫相關資訊
上圖填寫的是在阿裡雲建立的裝置舵機端的三劍客,點選下圖位置可檢視到
下圖是配置wifi相關資訊(連接配接wifi的使用者名和密碼)
這些填好之後,同時編譯成功,同時将代碼燒入我們的開發闆就可連上阿裡雲了
要注意以下幾個點
1.✔為編譯 →為下載下傳
2.在第一次編譯的時候可能會顯示缺少某些檔案
解決方法很簡單,它顯示缺少什麼檔案。項目->加載庫->管理庫 在搜尋框搜尋相應的檔案下載下傳,就可以解決問題了。
3.2 實作阿裡雲控制舵機旋轉
第一步在Ardunio上編寫相關函數
在官方提供的代碼上沒有多少改動,跟舵機有關的代碼如下标紅的部分,主要通過定義相關管腳,配置管腳模式(輸出模式),建立一個函數,輸出相應的高低電平時間進而讓舵機旋轉相應的角度。
// 引入 wifi 子產品,并執行個體化,不同的晶片這裡的依賴可能不同 #include <ESP8266WiFi.h> static WiFiClient espClient; // 引入阿裡雲 IoT SDK #include <AliyunIoTSDK.h> // 設定産品和裝置的資訊,從阿裡雲裝置資訊裡檢視 #define PRODUCT_KEY "" #define DEVICE_NAME "" #define DEVICE_SECRET "" #define REGION_ID "cn-shanghai" // 設定 wifi 資訊 #define WIFI_SSID "" #define WIFI_PASSWD "" int pwmPin=16; void setup() { Serial.begin(115200); pinMode(pwmPin,OUTPUT); // 初始化 wifi wifiInit(WIFI_SSID, WIFI_PASSWD); // 初始化 iot,需傳入 wifi 的 client,和裝置産品資訊 AliyunIoTSDK::begin(espClient, PRODUCT_KEY, DEVICE_NAME, DEVICE_SECRET, REGION_ID); // 綁定一個裝置屬性回調,當遠端修改此屬性,會觸發 powerCallback // PowerSwitch 是在裝置産品中定義的物聯網模型的 id AliyunIoTSDK::bindData("PowerSwitch", powerCallback); // 發送一個資料到雲平台,LightLuminance 是在裝置産品中定義的物聯網模型的 id AliyunIoTSDK::send("LightLuminance", 100); } void pwm_motor(int timepwm) { int a,i; for(a=0;a<50;a++) { for(i=0;i<5*(50+timepwm/1.4);i++) { digitalWrite(pwmPin,HIGH); } for(i=0;i<5*2000;i++) { //20毫秒 digitalWrite(pwmPin,LOW); } } } void loop() { AliyunIoTSDK::loop(); } // 初始化 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 powerCallback(JsonVariant p) { int PowerSwitch = p["PowerSwitch"]; if (PowerSwitch == 1) { // 啟動裝置 } pwm_motor(PowerSwitch); } |
3.3 實作阿裡雲控制舵機旋轉
當裝置連上阿裡雲之後,裝置會顯示線上狀态
此時可以通過線上調試進行對舵機進行控制(監控運維->線上調試),同時打開Adrunio的序列槽螢幕。如圖所示:
在阿裡雲線上調試,輸入想讓舵機旋轉的角度值,點選設定
此時,Adrunio序列槽螢幕頁面會收到一串指令
Message arrived [/sys/h7jyDsK3guc/Vqc0cvYHS82Y5cL54JFI/thing/service/property/set] {"method":"thing.service.property.set","id":"161410917","params":{"PowerSwitch":30},"version":"1.0.0"} |
這是我們可以吧這一串資料分成以下幾部分
第一份指的是阿裡雲發送資料成功到我們的開發闆上中,同時這一部分也是阿裡雲的物模型通信Topic清單的屬性設定模型
Message arrived [/sys/h7jyDsK3guc/Vqc0cvYHS82Y5cL54JFI/thing/service/property/set] |
第二部分則是一種發送資料給我們的開發闆,進而讓開發闆驅動舵機旋轉的功能
{"method":"thing.service.property.set","id":"161410917","params":{"PowerSwitch":30},"version":"1.0.0"} |
我們将這段資料複制,到舵機端就可以實作阿裡雲控制舵機旋轉的功能
點選産品->舵機端->TOPIC清單->釋出消息