0


基于ESP8266远程舵机的控制与实现

一、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的保护间隔

WiFi@2.4GHz,支持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列表->发布消息

点击确认就可以实现控制舵机旋转的功能。可以观看远程舵机bilibili

要想改变舵机旋转的角度,只要修改标红的地方就可以实现控制舵机旋转不同的角度。

注意:我们不难看出,我们主要通过修改PowerSwitch的值从而实现控制舵机旋转不同的角度,所以在我们进行对产品的功能定义的时候,要把关键字设为PowerSwitch。

标签: ui

本文转载自: https://blog.csdn.net/weixin_41114301/article/details/126441216
版权归原作者 ST小智 所有, 如有侵权,请联系我们删除。

“基于ESP8266远程舵机的控制与实现”的评论:

还没有评论