天天看點

基于ESP8266遠端舵機的控制與實作

一、ESP8266 CP2102介紹

基于ESP8266遠端舵機的控制與實作

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)

基于ESP8266遠端舵機的控制與實作

本次實驗使用的是16号管腳,也就是圖上的D0管腳、VCC和GND。其中DO設定為輸出管腳。  

二、相關軟體的下載下傳

本次實驗需要用到的程式設計軟體是Arduino和微信開發者平台。其中,Arduino主要用于舵機端連接配接阿裡雲,微信開發者平台作用是用于手機端,通過微信小程式,實作控制舵機旋轉的功能。

2.1 Arduino安裝和下載下傳

在官網下載下傳Arduino ​​Software | Arduino​​ ,網頁右邊選擇與自己電腦比對的版本。

基于ESP8266遠端舵機的控制與實作

本次實驗用到的版本則是通過以下步驟進行下載下傳。

第一步:打開百度并且輸入Arduino

第二步:在搜尋結果下點選Arduino中文社群

基于ESP8266遠端舵機的控制與實作

第三步:在頁面右上腳點選軟體下載下傳

第四步:點選如圖所示下載下傳相應的版本

基于ESP8266遠端舵機的控制與實作
基于ESP8266遠端舵機的控制與實作

2.2 配置Ardunio

1.在Arduino中配置開發闆管理器網址,打開【Arduino】 → 【檔案】-->首選項,在附加開發闆管理器網址中填入 ​​https://arduino.esp8266.com/stable/package_esp8266com_index.json​​

基于ESP8266遠端舵機的控制與實作

2.安裝esp8266開發闆,打開【工具】 → 【開發闆】 → 【開發闆管理器】,搜尋“esp8266”,選擇版本,安裝:

基于ESP8266遠端舵機的控制與實作

3.在IDE中選擇對應開發闆,【工具】 →【開發闆】 →【NodeMCU 1.0(ESP-12E Module)】

基于ESP8266遠端舵機的控制與實作

三、功能實作

3.1 擷取Ardunio連結阿裡雲官方代碼

第一步:打開Ardunio,點選  項目->加載庫->管理庫   在搜尋打aliyun,下載下傳

基于ESP8266遠端舵機的控制與實作

第二步:等待安裝完成,點選上圖的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)

    {

        // 啟動裝置

    }

}

第三步:在相應的地方填寫相關資訊

基于ESP8266遠端舵機的控制與實作

上圖填寫的是在阿裡雲建立的裝置舵機端的三劍客,點選下圖位置可檢視到

基于ESP8266遠端舵機的控制與實作

下圖是配置wifi相關資訊(連接配接wifi的使用者名和密碼)

基于ESP8266遠端舵機的控制與實作

這些填好之後,同時編譯成功,同時将代碼燒入我們的開發闆就可連上阿裡雲了

要注意以下幾個點

1.✔為編譯 →為下載下傳

基于ESP8266遠端舵機的控制與實作

 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 實作阿裡雲控制舵機旋轉

當裝置連上阿裡雲之後,裝置會顯示線上狀态

基于ESP8266遠端舵機的控制與實作

此時可以通過線上調試進行對舵機進行控制(監控運維->線上調試),同時打開Adrunio的序列槽螢幕。如圖所示:

基于ESP8266遠端舵機的控制與實作
基于ESP8266遠端舵機的控制與實作

在阿裡雲線上調試,輸入想讓舵機旋轉的角度值,點選設定

此時,Adrunio序列槽螢幕頁面會收到一串指令

基于ESP8266遠端舵機的控制與實作
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]
基于ESP8266遠端舵機的控制與實作

第二部分則是一種發送資料給我們的開發闆,進而讓開發闆驅動舵機旋轉的功能

{"method":"thing.service.property.set","id":"161410917","params":{"PowerSwitch":30},"version":"1.0.0"}

我們将這段資料複制,到舵機端就可以實作阿裡雲控制舵機旋轉的功能

點選産品->舵機端->TOPIC清單->釋出消息

基于ESP8266遠端舵機的控制與實作