一、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。
版权归原作者 ST小智 所有, 如有侵权,请联系我们删除。