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

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

一、ESP8266 CP2102介绍

5daaae196693453abb26f507fec96361.png

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)


b5c1fcc3d5b94edfa17d452debdbd1b5.png

本次实验使用的是16号管脚,也就是图上的D0管脚、VCC和GND。其中DO设置为输出管脚。  

二、相关软件的下载

本次实验需要用到的编程软件是Arduino和微信开发者平台。其中,Arduino主要用于舵机端连接阿里云,微信开发者平台作用是用于手机端,通过微信小程序,实现控制舵机旋转的功能。

2.1 Arduino安装和下载

3bca2b7e2f6d42aba4ccc9deb318bd15.png本次实验用到的版本则是通过以下步骤进行下载。

第一步:打开百度并且输入Arduino

第二步:在搜索结果下点击Arduino中文社区

31df1139ddfc4e51ad5badb87c7b62fd.png


第三步:在页面右上脚点击软件下载

第四步:点击如图所示下载相应的版本

e7e199a113dc45c28b86b06f65181b3c.png

8f3176979fa94f4286fb592c3358323f.png

2.2 配置Ardunio

1.在Arduino中配置开发板管理器网址,打开【Arduino】 → 【文件】-->首选项,在附加开发板管理器网址中填入 https://arduino.esp8266.com/stable/package_esp8266com_index.json


38d627c7c9e74dce9beca2fd35c86d24.png

2.安装esp8266开发板,打开【工具】 → 【开发板】 → 【开发板管理器】,搜索“esp8266”,选择版本,安装:

5d2fb067a523490f8b80109e895ce817.png

3.在IDE中选择对应开发板,【工具】 →【开发板】 →【NodeMCU 1.0(ESP-12E Module)】

045178d43e4f4c3f922a8222427c034a.png

三、功能实现

3.1 获取Ardunio链接阿里云官方代码

第一步:打开Ardunio,点击  项目->加载库->管理库   在搜索打aliyun,下载

0a01f1b38313483792f1273365aa510e.png

第二步:等待安装完成,点击上图的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)
    {
        // 启动设备
    }
}

第三步:在相应的地方填写相关信息

8408f317804842c4902d331265e9fc91.png

上图填写的是在阿里云创建的设备舵机端的三剑客,点击下图位置可查看到

e77ed12a23c14c048804524a786b4f18.png

下图是配置wifi相关信息(连接wifi的用户名和密码)

f762d17b229f4072be997d049187c799.png

这些填好之后,同时编译成功,同时将代码烧入我们的开发板就可连上阿里云了

要注意以下几个点

1.✔为编译 →为下载

950ee9199cf242f7ac9426f1809c213e.png

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 实现阿里云控制舵机旋转

当设备连上阿里云之后,设备会显示在线状态

3bf43306b3ee41dfb4efe168ff689136.png

此时可以通过在线调试进行对舵机进行控制(监控运维->在线调试),同时打开Adrunio的串口监视器。如图所示:

fc26e47df58a44128dd104ed84731124.png

687e38e5f064444781690ab39c163b23.png

在阿里云在线调试,输入想让舵机旋转的角度值,点击设置

此时,Adrunio串口监视器页面会收到一串指令

12157fd0e902492cb8e2ffce57daf658.png

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]

054abdc4da634c0cb92b21169aed2bef.png

第二部分则是一种发送数据给我们的开发板,从而让开发板驱动舵机旋转的功能

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

我们将这段数据复制,到舵机端就可以实现阿里云控制舵机旋转的功能

点击产品->舵机端->TOPIC列表->发布消息25e47106886246878f9ab219138d41c0.png

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


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


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

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
目录
相关文章
|
25天前
STM32CubeMX配置时钟无法使用高速外部时钟HSE
STM32CubeMX配置时钟无法使用高速外部时钟HSE
如何在上电时获取MCU的复位源
如何在上电时获取MCU的复位源
|
4月前
LED驱动控制专用电路
一、基本概述 TM1628是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU 数 字接口、数据锁存器、LED 驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。 主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电 表等数码管或LED显示设备。 二、特性说明 采用CMOS工艺 多种显示模式(10 段×7 位 ~ 13段×4 位) 最大支持矩阵按键10×2 辉度调节电路(8 级占空比可调) 串行接口(CLK,STB,DIO) 振荡方式:内置RC振荡 内置上电复位电路 内置数据锁存电路
68 0
|
6月前
|
运维 小程序 API
STM32实战项目—WIFI远程开关灯
本文介绍了如何利用正点原子ESP8266和STM32F103C8T6连接腾讯云,利用舵机实现远程开关灯。给出了详细的腾讯云配置和调试步骤,给出了部分程序设计。
116 0
STM32实战项目—WIFI远程开关灯
|
8月前
|
传感器
STM32+ESP8266+QT客户端上位机显示DHT11温湿度与点灯
STM32+ESP8266+QT客户端上位机显示DHT11温湿度与点灯
|
11月前
|
芯片
14 STM32之IIC通信(软件模拟篇)
14 STM32之IIC通信(软件模拟篇)
|
安全 物联网 Android开发
利用ESP32实现蓝牙通信的方法
大家好,我是ST! 上次给大家分享了如何使用ESP32实现UDP通信,今天跟大家聊聊如何使用ESP32实现蓝牙通信。
990 0
利用ESP32实现蓝牙通信的方法
复习单片机:串口通信(内含:1.代码部分+2.串口内部结构+3.串口控制寄存器 SCON+4.电源控制寄存器 PCON+5. 串口的使用方法+6.硬件设计+7.实验现象)
复习单片机:串口通信(内含:1.代码部分+2.串口内部结构+3.串口控制寄存器 SCON+4.电源控制寄存器 PCON+5. 串口的使用方法+6.硬件设计+7.实验现象)
290 1
复习单片机:串口通信(内含:1.代码部分+2.串口内部结构+3.串口控制寄存器 SCON+4.电源控制寄存器 PCON+5. 串口的使用方法+6.硬件设计+7.实验现象)
|
物联网 芯片 开发者
串口初始化及RFID上电复位|学习笔记
快速学习串口初始化及RFID上电复位
253 0
串口初始化及RFID上电复位|学习笔记