zoukankan      html  css  js  c++  java
  • 基于arduino UNO R3+ESP8266控制LED灯的开关(无USB转TTL工具实现)

       最近由于项目要求,需要开发物联网云平台,而本人对硬件和通信技术一窍不通,故而选择arduino这一简单单片机来实现学习掌握基础的硬件和通信技术。

       下面就是本人通过查阅大佬资料做的一个整合版本的通过手机APP来控制LED开关的实验:

    第一步:连线使用软串口方式,利用arduino来对ESP8266进行AT命令操作。

    连线参考图如下:


    连线完后,利用串口调试工具和Arduino IDE 软件进行编程,实现对ESP8266的软串口指令下达:

    #include <SoftwareSerial.h>

    SoftwareSerial mySerial(10, 11); // RX, TX

    void setup()
    {
    // Open serial communications and wait for port to open:
    Serial.begin(115200);
    while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
    }
    Serial.println("Goodnight moon!");

    // set the data rate for the SoftwareSerial port
    mySerial.begin(115200);
    mySerial.println("Hello, world?");
    }

    void loop() // run over and over
    {
    if (mySerial.available())
    Serial.write(mySerial.read());
    if (Serial.available())
    mySerial.write(Serial.read());
    }

    ==程序效果==

    打开串口,设置波特率为115200,串口显示:

    Goodnight moon!
    Hello, world?

    ERROR

    表示已经进入AT模式,如果只有Goodnight moon!,说明没有进入AT模式。

    发送AT,反馈OK。

    第二步:利用AT命令来对ESP8266进行设置,使其连接到和手机在同一wifi网络中。

    1:发送AT+RST(执行指令)

    指令:AT+RST

    反馈:OK

    说明:刚上电可以不发送该指令,有些厂家生产的ESP8266模块,无法即时重启复位,导致串口无响应,如已发送,则重新开关串口按钮即可。

    2:发送AT+CWMODE=3或AT+CWMODE=2(设置指令)

    指令:AT+CWMODE=<MODE>

    说明:<MODE>:1为Station模式,2为AP模式,3为Station兼AP模式

    反馈:OK

    3:发送AT+CWJAP=“long”,”12345678”(选择你所要加入的路由器名称和密码进入)

    指令:AT+CWJAP=<ssid>,<pwd>

    <ssid>:字符串参数,ESP8266WIFI名字

    <pwd>:字符串参数,WIFI密码,最长64字节,ASCII

    具体内容如下:

    //设置WiFi应用模式为Station
    AT+CWMODE=3
    //连接到WiFi路由器,请将SSID替换为路由器名称,Password替换为路由器WiFi密码
    AT+CWJAP="SSID","Password"
    //连接单连模式
    AT+CIPMUX=0
    //设置为透传模式
    AT+CIPMODE=1
    //进入透传模式,并保存(进入后模块就一直为透传模式,需要退出则取消发送新行,发送+++)
    IP地址为远端设备地址,例:我用手机控制,那么我的手机在路由器WIFI上的IP地址为192.168.1.110
    AT+SAVETRANSLINK=1,"192.168.1.110",8080,"TCP"

    2018.04.24补充:此时若无USB转TTL工具,不要使用AT+SAVETRANSLINK指令,该指令会将当前设置存储到RAM中去,ESP8266通电后自动进入连接模式,除非使用USB转TTL进行烧写,否则将无法恢复到调试模式(无法使用AT指令)。本人掉坑,后USB转TTL烧写版本后,才恢复正常。 

    第三步,将LED的正极引脚插入9号数字口,负极接地,进行编程。

    int led_pin = 9;
    //定义一个10字节的整型数据变量cmd作为命令,这里可以修改为不同的数字。此处设置为10是为了有更好的兼容性。
    char cmd[10];
    //判断收到的cmd是否有内容
    bool valid_cmd = false;
    
    void setup()
    {
    //定义连接led的引脚为输出信号
    pinMode(led_pin, OUTPUT);
    Serial.begin(115200);
    }
    void loop()
    {
    /*以下部分是串口信息处理过程*/
    //定义一个整数型变量i
    int i;
    //如果串口收到有数据
    if (Serial.available() > 0)
    {
    //变量i最大为10
    for (i = 0; i < 10; i++)
    {
    //清空缓存,存入cmd变量,并以作为结束符
    cmd[i] = '';
    }
    //此时i只能取前9位,第10位是结束符
    for (i = 0; i < 9; i++)
    {
    //再次判断串口如果收到有数据,防止数据丢失
    if (Serial.available() > 0)
    {
    //给变量cmd赋值,取串口收到的前9位字符
    cmd[i] = Serial.read();
    delay(1);
    }
    else
    {
    //如果串口数据超过9位,后面的字符直接忽略,跳到下一步
    break;
    }
    }
    /*以上串口信息处理结束*/
    
    //得到最终变量cmd的有效值
    valid_cmd = true;
    }
    
    //判断变量cmd的值,开始处理
    if (valid_cmd)
    {
    //如果变量cmd的前2位的值是on
    if (0 == strncmp(cmd, "on", 2))
    {
    //则连接led的引脚电压被置高5V,
    digitalWrite(led_pin, HIGH);
    //串口打印返回值ON,表示ON的操作执行成功
    Serial.println("ON");
    }
    else if (0 == strncmp(cmd, "off", 3)) //否则如果变量cmd的前3位的值是off
    {
    //则连接继电器的引脚电压被置低0V,灯的电路被断开,灯灭
    digitalWrite(led_pin, LOW);
    //串口打印返回值F,表示OFF的操作执行成功
    Serial.println("OFF");
    }
    else //如果以上两个条件都不成立,前2位不是ON,或者前3位不是OFF,即不正确的命令
    {
    //仅串口打印返回值X,表示指令错误。
    Serial.println("X");
    }
    //到此,变量cmd的指令被处理完毕
    valid_cmd = false;
    }
    //延迟10毫秒,返回loop主程序继续读取新的串口指令
    delay(10);
    
    }

    第四步,安装APP进行验证。

    1、打开网络调试助手,点击TCP SERVER—-配置

    18A52A9D8177DF9B8BE1276CC4941491

    2、当开启服务端后,ESP8266自动连接上了:

    93F62FF2778F7ECAEEC5835F2061EB72

    3、在发送框内发送”on”即可点亮Arduino板载LED灯。

    427716C31B543BA557EA6AC07D4D2C8D

    BAD5F840EDD341B0F583D741F7E05841

    4、在发送框内发送”off”即可熄灭Arduino板载LED灯。

    38845248DABA686998901FA0E8F019AF

    总结:通过对网上资料的整理学习,实现了一种不通过USB转TTL烧写ESP8266的方式,对APP实现同一WiFi网络内LED开关。

    本文主要参考了如下资料:

    手机通过ESP8266控制Arduino上的LED灯(AT指令方式)

    手机通过ESP8266控制Arduino上的LED灯(烧写方式)




  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/cache-yuan/p/9042339.html
Copyright © 2011-2022 走看看