查看: 5326|回复: 4

[经验] ESP8266物联网模块使用碰到的小问题分享

[复制链接]
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

    发表于 2017-9-14 16:35 | 显示全部楼层 |阅读模式
    本帖最后由 sun910231 于 2017-9-14 16:43 编辑

    8266价格低廉,工作能力强大,是WIFI控制的比较理想选择,引脚和功能如下:
    8266-01.jpg

      
    PIN
      
    Function
    Description
    1
    URXD
    1)UART_RXD,接收;
      
    2)General Purpose Input/Output:GPIO3;
    2
    UTXD
    1)UART_TXD,发送;
      
    2General Purpose Input/OutputGPIO1
      
    3)开机时禁止下拉;
    5
    RESETGPIO 16
    外部Reset信号,低电平复位,高电平工作(默认高);
    6
    GND
    GND
    8
    VCC
    3.3V模块供电;
    9
    ANT
    WiFi Antenna
    11
    GPIO0
    1)默认WiFi Status:WiFi工作状态指示灯控制信号;
      
    2)工作模式选择:
      
        上拉:Flash  Boot,工作模式;
      
        下拉:UART  Download,下载模式;
    12
    ADC
    ADC,输入范围:0V-1V
    13
    GPIO15
    下拉:工作模式;
    14
    CH_PD
    1)高电平工作;
      
    2)低电平模块供电关掉;
    15
    GPIO2
    1)开机上电时必须为高电平,禁止硬件下拉;
      
    2)内部默认已拉高
























    以前在网上买了一片,作为一般的玩法试了试,还行,也没深玩,就丢边上了;

    前段时间,在网上看了几篇文章,越来越多的人用这个来做WIFI的智能控制,而且用ARDUINO来进行编译,因为自己也是刚入门,太难估计也摆弄不了,就想试着玩一玩,弄个智能插座或者智能控制的东西,于是在网上买了约10片左右的826688266-01,也有212F,还买了一个WIFI控制模块(是8266+继电器+一个51单片机),以前手里还有一片D1,弄起来玩,不过玩的过程中,碰到一些问题,现在说出来,供以后玩这个的同学参考;


    首先开发板管理这些网上都有,自己找过来看看,不是很难,这个不详细说明;
    1,程序验证:
    因为ESP8266-01接线比较麻烦,而且还有很多小窍门一般要自己摸索,如果开始试程序,可以先试用D1,这样程序可以验证程序不会错,出错的机会少;不管是D1还是其他的8266芯片,在程序中引脚号码,都是GPIO 的号码,尤其是D1,正面印刷的数字引脚号码不用理,要看板背面的GPIO号码;

    程序验证完成后,再移植到EPS8266-01上,这样可以排除程序问题出错;
    微信图片_20170914154844.jpg 微信图片_20170914154836.jpg

    2,8266AT控制:

    8266AT命令控制实际还是比较好用,可以查询和设置芯片;需要串口助手或者其他的网络助手之类的都可以,而且操作起来十分简单,但是在使用中注意,如果用ARDUINO烧写过程序后,AT命令基本没办法操作(可以用程序命令的方式除外),没有任何返回值,可能是因为ARDUINO程序一上电运行开始进入死循环的原因,暂时还没有找到原因,在网上也没有找到对这个的说明,所以,如果想要用AT命令对MCU进行操作,先不要烧写程序;或许用中断可以解决,暂时未试。
    com.jpg

    3,硬件供电:

    8266在运行时供电要充足,普通的TTL下载器上的3.3V供电有时会不足,造成运行异常,需要外接单独的3.3V电源;为防止产生电源冲突,一般情况下,下载器只接3条线,RX TX GND,外接的3.3V电源和下载器,8266GND;单独用一个2596的电源模块给8266供电,实际应用时,遥控插座我用的是开关电源模块接市电给8266供电;壁炉开关控制,我从原来的壁炉里面引出12V电源,用一个分压电阻后,通过7805稳压给模块供电,然后7805后面接个1117 3.3V的稳压器给8266供电;
    微信图片_20170914154830.jpg

    4,程序烧写:
    在开机时,CH_PD脚要接高电平,通过一个1K电阻接3.3V即可,烧写时,GPIO 0要接GND,否则不会烧写成功,另外,有个很重要的事项,在重复烧写时,826-01一定要做硬件复位,才不会烧写错误,否则会出现烧写同步错误等错误而失败;D1不会有这样的问题,可能是D1USBTTL芯片已经有复位信号给芯片了;复位方法,GPIO 16GND短路一下后再断开,短路复位时,8266上的蓝灯会闪烁一下;复位后就可以再烧写程序;

    8266-ban1.jpg 8266-ban2.jpg 选择开发板

    8266_up1.jpg 程序正常烧写 8288_err.jpg 烧写错误,需要将硬件复位后再重新烧写
    5IO输出:

    8266IO输出比较特别,在写程序时,我直接让GPIO2做输出,点亮LED没有问题,使用D1推继电器模块和点亮LED都可以,但是8266-01在推继电器模块实际输出时却不能输出,上电后,模块蓝灯常亮,模块不能正常工作,开始以为模块挂了,拆下模块换另外一个,有同样的问题,后来查看引脚资料才知道,GPIO 2在启动时不能接低电平,继电器模块的IN通过推动三极管的PN结对地连接,虽然有阻抗,但是模块认为已经接了低电平,所以不开机;拆掉继电器模块后8266可以正常工作,试换低电平启动的继电器模块和换光耦隔离的继电器模块都不行,这样似乎应用会有问题,引脚资料只是说开机时禁止硬件下拉,那么我上拉应该可以吧,用10K电阻跨接电源,启动仍然有问题,将电阻减小到1K,上电,可以正常启动;试工作也正常;但是,在开机的瞬间,会因为上拉电阻的问题,继电器会有一次通断,造成动作干扰;这个问题没有想到方案解决,后来改用GPIO 3做输出,不再有问题;


    微信图片_20170914162506.jpg
    这个是壁炉开关控制板,GPIO 2我用了一个上拉电阻
    6,接入Wi-Fi热点和密码设置问题:
    目前找到例程几乎都是在写程序时写入WIFI热点名称和密码,因为考虑实际使用的话,会因为网络密码或者网络接入点变化而要重新写程序,会产生比较大的麻烦,家里修改WIFI密码是十分正常的事情,如果因为这个不能使用确实比较麻烦,后来查资料有方法,通过信息广播的方式用手机输入给8266模块接收后写入Flash记忆,但是没有试用;找时间重新写程序试一下;
    下面附例是找人家的程序,稍微修改一下,用手机控制壁炉开关和遥控插座的程序,比较简单:手机控制端用的是网络调试助手,苹果板的需要到苹果商店下载;
    另外,这个模块有10位的ADC,按道理比ARDUINO的要强很多,输入电压范围是0~1V,但是,在8266-01上没有找到引脚,D112F上可以找到;

    微信图片_20170914160344.jpg IMG_4823.PNG

    这个是一个手机遥控插座
    [kenrobot_code]/*把8266作为TCPcleint,加入电脑创建的tcpServer中
    来控制一个继电器*/

    #include <ESP8266WiFi.h>

    #define relay1 3 //继电器连接在8266的GPIO 3上


    const char *ssid     = "WRWRQ";//这里是我的wifi,你使用时修改为你要连接的wifi ssid
    const char *password = "WRWRWQ";//你要连接的wifi密码
    const char *host = "192.168.0.127";//修改为你建立的Server服务端的IP地址
    WiFiClient client;
    const int tcpPort = 8266;//修改为你建立的Server服务端的端口号


    void setup()
    {
        Serial.begin(115200);    pinMode(relay1,OUTPUT);
        delay(10);
      //  digitalWrite(relay1, HIGH);  
        Serial.println();
        Serial.println();
        Serial.print("Connecting to ");//
        Serial.println(ssid);

        WiFi.begin(ssid, password);

        while (WiFi.status() != WL_CONNECTED)//WiFi.status() ,这个函数是wifi连接状态,返回wifi链接状态
      //这里就不一一赘述它返回的数据了,有兴趣的到ESP8266WiFi.cpp中查看
        {
       delay(500);
      Serial.print(".");
        }//如果没有连通向串口发送.....

        Serial.println("");
        Serial.println("WiFi connected");
        Serial.println("IP address: ");
        Serial.println(WiFi.localIP());//WiFi.localIP()返回8266获得的ip地址
    }


    void loop()
    {
        while (!client.connected())//几个非连接的异常处理
        {
    if (!client.connect(host, tcpPort))
        {
        Serial.println("connection....");
      //client.stop();
       delay(500);

       }
        }

        while (client.available())//available()同ARDUINO,不解释了
        {
        char val = client.read();//read()同arduino
       if(val=='A'){//pc端发送0和1来控制
      digitalWrite(relay1, HIGH);
        delay(500);
      digitalWrite(relay1, LOW);  
        }

        }


    }[/kenrobot_code]

    这个程序是开关控制,发送大写的A,机器开关一次,如果是插座,让继电器高电平后不转低,然后再发送一次其他字母转低或者再发送同样命令电平翻转也可以;


    打赏一点,努力一点
  • TA的每日心情
    奋斗
    2018-9-29 19:01
  • 签到天数: 66 天

    [LV.6]常住居民II

    发表于 2018-7-29 12:49 | 显示全部楼层
    大神,在吗?我想问一下我ESP8266驱动继电器的方法,折腾了好久,还是不能。QQ3320987642
    打赏作者鼓励一下!
  • TA的每日心情
    开心
    2018-9-20 15:06
  • 签到天数: 279 天

    [LV.8]以坛为家I

     楼主| 发表于 2018-8-6 14:43 | 显示全部楼层
    新手之帆 发表于 2018-7-29 12:49
    大神,在吗?我想问一下我ESP8266驱动继电器的方法,折腾了好久,还是不能。QQ3320987642 ...

    用8266的高低电平驱动都可以推动继电器模块,或者你说一下你的问题,和折腾的过程,或许能看出问题点~
    打赏一点,努力一点
  • TA的每日心情
    奋斗
    2018-9-29 19:01
  • 签到天数: 66 天

    [LV.6]常住居民II

    发表于 2018-8-6 19:09 | 显示全部楼层
    sun910231 发表于 2018-8-6 14:43
    用8266的高低电平驱动都可以推动继电器模块,或者你说一下你的问题,和折腾的过程,或许能看出问题点~ ...

    大神,我已经好了。可能是因为8266的电压是3V3而我继电器模块不兼容3V3,换一个继电器就可以驱动控制了!
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-8-10 16:20 | 显示全部楼层
    wifimode不需要设置吗
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    体验OneNET,登录就送好礼
    体验OneNET,登录就送好礼
    OneNET--中国移动物联网开发平台,解决协议适配、海量连接、数据存储、设备管理等物
    初学arduino求助
    初学arduino求助
    大佬们,我想问一下,我现在想做一个程序:按下开关持续时间t,延迟7.77t后点亮led0.
    Arduino模拟USB鼠标
    Arduino模拟USB鼠标
    [md]### 模拟鼠标控制 下面将使用摇杆模块和Arduino Leonardo模拟USB鼠标。 [/md] [s
    ATK-esp8266WiFi模块
    ATK-esp8266WiFi模块
    我的esp8266模块以前烧进去过一次,半年没玩了。重新烧就提示错误了[/backcolor] 这是
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表