• 基于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 static WiFiClient espClient;

    // 引入阿里云 IoT SDK

    #include

    // 设置产品和设备的信息,从阿里云设备信息里查看

    #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

    static WiFiClient espClient;

    // 引入阿里云 IoT SDK

    #include

    // 设置产品和设备的信息,从阿里云设备信息里查看

    #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。

  • 相关阅读:
    UIAutomatorViewer排查问题
    人脸检测5种方法
    Spring Boot 框架知识汇总
    探究Socks5代理和代理IP在技术领域的多重应用
    无频闪护眼灯哪个好?五款无频闪护眼台灯推荐
    【HarmonyOS】【Demo】【JAVA UI】 鸿蒙怎么在Webview上添加组件
    BCC源码内容概览(3)
    idea2021.1.3版本双击启动,没反应
    Mysql 45讲学习笔记(十四)count(*)
    轻松掌握组件启动之MongoDB(上):高可用复制集架构环境搭建
  • 原文地址:https://blog.csdn.net/weixin_41114301/article/details/126441216