精华内容
参与话题
问答
  • ESP8266

    千次阅读 2019-07-27 12:34:46
    ESP8266EX 的工作温度范围大,且能够保持稳定的性能,能适应各种操作环境。 2.低功耗 ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。ESP8266EX 具有的省电模式适用...

    ESP8266Wi-Fi芯片

    芯片图

    ESP8266正面图片在这里插入图片描述
    在这里插入图片描述

    优点

    1.性能稳定

    超宽工作温度范围(-40°C~+125°C),且能够保持稳定的性能,能适应各种操作环境。

    2.低功耗

    超低功耗且省电模式适用于各种低功耗应用场景。ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现了超低功耗。

    3.高度集成

    ESP8266EX 集成了 32 位 Tensilica 处理器、标准数字外设接口、天线开关、射频 balun、功率放大器、低噪放大器、过滤器和电源管理模块等,仅需很少的外围电路,可将所占 PCB 空间降低。

    4.32 位 Tensilica 处理器

    ESP8266EX 内置超低功耗 Tensilica L106 32 位 RISC 处理器,CPU 时钟速度最高可达 160 MHz,支持实时操作系统 (RTOS) 和 Wi-Fi 协议栈,可将高达 80% 的处理能力留给应用编程和开发。

    STA+连接TCP Server

    事前工作

    !!!务必关闭防火墙(否则后面会运行出错)

    接好ESP8266等待

    1.打开stc,打开串口助手
    在这里插入图片描述
    2.选择文本模式
    在这里插入图片描述
    3.打开NetAssist,选择TCP Server协议类型
    在这里插入图片描述
    4.打开cmd查找IP地址
    在这里插入图片描述
    5.选择相应的主机地址
    在这里插入图片描述
    6.随意设置一个主机端口,然后点击“打开”
    在这里插入图片描述
    7.回到stc,打开串口,并在发送区输入 AT+CWMODE_DEF=1 并加回车键,然后发送数据,等待出现ok
    在这里插入图片描述
    8.输入 AT+CWJAP_DEF=“iPhone(你设置的wi-fi名称)”,“lxq23456(wi-fi密码)” ,同样要加回车键,出现“ok”表示连接成功啦!!!
    在这里插入图片描述
    9.输入AT+CIPSTART=“TCP”,“172.20.10.3(你的主机地址)”,6666(刚刚设置的主机端口)切记回车键,出现“connect”以及“ok”,耶!离成功有近了一步。
    在这里插入图片描述
    10.输入AT+CIPMODE=1 还是不要忘记回车键,这个是采用方式二:使用透传模式发送数据
    在这里插入图片描述
    11.AT+CIPSEND 勿忘回车键,出现“〉”说明成功啦!现在可以发送数据聊天拉!!!
    在这里插入图片描述
    11.试试效果
    在这里插入图片描述
    在这里插入图片描述

    快去试试远程控制它把
    展开全文
  • 51单片机通过WIFI模块ESP8266控制LED灯

    万次阅读 多人点赞 2018-06-16 18:47:40
    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而...

    写在前面:

    本想将该设计全部开源,无奈理想丰满现实骨感,笔者不得不为五斗米折腰,为了小公主奶粉钱,已将全部源码设计资料和焊接成品挂在了某宝:
    https://item.taobao.com/item.htm?ft=t&id=626621440543

     

    一、系统方案

    手机APP通过ESP8266 WIFI模块与51单片机通信控制LED灯的开关。下位机由单片机、ESP8266模块和LED灯组成,上位机由Android手机APP承担。我们在APP上发送LED灯的开关控制指令,ESP8266将收到的数据发送给单片机,从而实现对LED灯进行开关控制。

     

    设计好的实物是这个样子:

    二、硬件设计

    ESP8266模块作为一个透传模块使用,RXD、TXD分别连接51单片机的TXD和RXD,VCC和CH_PD管脚接3.3V电压,GND接地,只需要连接这些管脚,ESP8266模块就可以正常工作了。在单片机P2口上连接了三个5mm的LED灯,分别是红黄蓝三种颜色,我们的目的是通过手机APP上的开关控制着三个LED灯的亮灭。

    ESP8266实物管脚图

    三、单片机软件设计

    硬件的连接不复杂,接下来主要是单片机和手机APP代码的编写。

    单片机代码主要是串口初始化、串口中断和ESP8266的初始化。首先是串口初始化:

            TMOD=0x20;		//定时器1工作在方式2
    	TH1 = 0xfd;		//波特率9600
    	TL1 = 0xfd;
    	SM0=0;                  //串口工作在方式1
    	SM1=1;
    	EA = 1;			//开总中断
    	REN = 1;		//使能串口
    	TR1 = 1;		//定时器1开始计时

    然后是ESP8266初始化:

            delayms(1000);                        //延时
    	sendString("AT+CWMODE=2\r\n");        //设置ESP8266工作在AP模式下
    	delayms(1000);	
    	sendString("AT+CIPMUX=1\r\n");        //允许多连接
    	delayms(1000);	
    	sendString("AT+CIPSERVER=1\r\n");     //建立服务器
    	delayms(1000);	
    	ES = 1;				      //esp8266初始化之后开串口中断

    贴上51单片机负责串口发送的两个函数:

    //发送一个字节
    void sendChar(uchar a)
    {
    	SBUF = a;
    	while(TI==0);
    	TI=0;
    	
    }
    
    //发送字符串
    void sendString(uchar *s)
    {
    	while(*s!='\0')
    	{
    		sendChar(*s);
    		s++;
    	}
    		
    }

    在串口中断中处理接收到的数据:

    1:打开红色灯    2:关闭红色灯

    3:打开黄色灯    4:关闭黄色灯

    5:打开蓝色灯    6:关闭蓝色灯

    esp8266在收到数据并转发给单片机时的数据格式:+IPD,<client号>,<收到的字符长度>:收到的字符,比如+IPD,0,5:hello,其中+PID是固定的;0代表的是TCP客户端编号,esp8266最多支持5个客户端同时连接,也就是说客户端编号是0到4,在本设计中由于只有一个客户端与esp8266相连,所以客户端编号是0;5代表收到的字符长度;hello是收到的字符。在本例中esp8266发送给单片机的数据是+IPD,0,1:1,我们把接收到的字符串缓存到字符数组中,所以在处理收到的数据逻辑中,首先判断是否是以'+'开始的,否则视作无效数据,然后判断数组中的第十个数据,因为第十个数据才是上位机发送过来的数据。

    void uart() interrupt 4
    {
        if(RI == 1)   
        {
            RI = 0;     //清除串口接收标志位
    	receiveTable[i]=SBUF;
    	if(receiveTable[0]=='+')
    	{
    		i++;
    	}
    	else
    	{
    		i=0;
    	}
    	if(i==10)
    	{
    		i=0;
    		switch(receiveTable[9])
    		{
    			case '1':
    				RedLED=0;
    				break;
    			case '2':
    				RedLED=1;
    				break;
    			case '3':
    				YellowLED=0;
    				break;
    			case '4':
    				YellowLED=1;
    				break;
    			case '5':
    				BlueLED=0;
    				break;
    			case '6':
    				BlueLED=1;
    				break;
    		}
    	}
        
      }
    }

     

    四、Android APP软件设计

     

    Android APP是借助Android Studio来开发的,界面比较简单,通过编辑框输入esp8266的IP地址和端口号,esp8266默认的IP地址是192.168.4.1,端口号是333,这些都可以通过AT指令进行修改。布局页面的xml代码我们就不贴了,熟悉Android开发的读者很快就能根据截图编写出来,放上一个APP界面的截图:

    我们主要看一下逻辑代码部分:

    首先是控件的初始化和按钮点击事件回调的绑定

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mBtnConnect = (Button) findViewById(R.id.btn_connect);
            mEtIP = (EditText) findViewById(R.id.et_ip);
            mEtPort = (EditText) findViewById(R.id.et_port);
            mBtnRedOn = (Button) findViewById(R.id.btn_red_on);
            mBtnRedOff = (Button) findViewById(R.id.btn_red_off);
            mBtnYellowOn = (Button) findViewById(R.id.btn_yellow_on);
            mBtnYellowOff = (Button) findViewById(R.id.btn_yellow_off);
            mBtnBlueOn = (Button) findViewById(R.id.btn_blue_on);
            mBtnBlueOff = (Button) findViewById(R.id.btn_blue_off);
            mBtnConnect.setOnClickListener(this);
            mBtnRedOn.setOnClickListener(this);
            mBtnRedOff.setOnClickListener(this);
            mBtnYellowOn.setOnClickListener(this);
            mBtnYellowOff.setOnClickListener(this);
            mBtnBlueOn.setOnClickListener(this);
            mBtnBlueOff.setOnClickListener(this);
    
        }

    按钮的点击回调方法:

        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_connect:
                    //连接
                    if (mSocket == null || !mSocket.isConnected()) {
                        String ip = mEtIP.getText().toString();
                        int port = Integer.valueOf(mEtPort.getText().toString());
                        mConnectThread = new ConnectThread(ip, port);
                        mConnectThread.start();
                    }
                    if (mSocket != null && mSocket.isConnected()) {
                        try {
                            mSocket.close();
                            mBtnConnect.setText("连接");
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
    
                    break;
                case R.id.btn_red_on:         //开红灯
                    if (out != null) {
                        out.print("1");
                        out.flush();
                    }
                    break;
                case R.id.btn_red_off:        //关红灯
                    if (out != null) {
                        out.print("2");
                        out.flush();
                    }
                    break;
                case R.id.btn_yellow_on:
                    if (out != null) {
                        out.print("3");
                        out.flush();
                    }
                    break;
                case R.id.btn_yellow_off:
                    if (out != null) {
                        out.print("4");
                        out.flush();
                    }
                    break;
                case R.id.btn_blue_on:
                    if (out != null) {
                        out.print("5");
                        out.flush();
                    }
                    break;
                case R.id.btn_blue_off:
                    if (out != null) {
                        out.print("6");
                        out.flush();
                    }
                    break;
            }
        }
     

    负责连接esp8266的线程:

    private class ConnectThread extends Thread {
            private String ip;
            private int port;
    
            public ConnectThread(String ip, int port) {
                this.ip = ip;
                this.port = port;
            }
    
            @Override
            public void run() {
                try {
                    mSocket = new Socket(ip, port);
                    out = new PrintStream(mSocket.getOutputStream());
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mBtnConnect.setText("断开");
                        }
                    });
                    new HeartBeatThread().start();
                } catch (IOException e) {
                    e.printStackTrace();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }

    本文完!

     

    展开全文
  • ESP8266_01搭建开发环境 ESP8266_02程序的编译与下载 ESP8266_03SDK与Makefile的基本用法 ESP8266_04管脚控制与软件定时器 ESP8266_05 ESP8266有几个串口? ESP8266_06硬件定时器与IO中断 ESP8266_07基于PWM的...

    ESP8266_01搭建开发环境

    ESP8266_02程序的编译与下载

    ESP8266_03SDK与Makefile的基本用法

    ESP8266_04管脚控制与软件定时器

    ESP8266_05 ESP8266有几个串口?

    ESP8266_06硬件定时器与IO中断

    ESP8266_07基于PWM的呼吸灯

    ESP8266_08基于flash的数据掉电保护

    ESP8266_09基于IIC控制的OLED屏幕

    ESP8266_10 ESP8266的STATION模式

    ESP8266_11 ESP8266的UDP广播

    ESP8266_12 ESP8266客户端模式下的TCP通信

    ESP8266_13服务器端模式下的TCP通信

    ESP8266_14 SOFTAP模式下的服务器端和客户端

    ESP8266_15天气预报之TCP的GET操作

    ESP8266_16天气预报之JSON数据的生成与解析

    ESP8266_17简单网络时间协议-SNTP

    ESP8266_18 MQTT协议接入ONENET平台

    ESP8266_19MQTT协议接入ONENET平台_订阅主题

    ESP8266_20 基于ONENET平台的数据上传之TCP的POST操作

    ESP8266_21基于ESP8266的一键配网

    ESP8266_22基于自身ADC的电压采样

    ESP8266_23基于硬件定时器的红外遥控器解码

             上一节说了UDP,这一节就聊聊TCP,毕竟它俩经常同时出现。优缺点上一节也提了一下:安全性好,速度慢。

             除了这两点,还有就是:

             TCP通信之前是需要建立连接的,如同打电话之前先拨号一样,而UDP无连接;

             TCP只能一对一通信,UDP不止一对一,还支持一对多;

             TCP对系统资源要求更多,UDP相对少一些。

             所以两者各有优缺点,大家在选择通信协议的时候一定要根据自己的实际情况来确定。

             然后就是客户端,这是啥?和它伴随的,还有一个词经常出现,就是:服务器端。这两者又是什么关系?

             基本上,这两者在TCP通信过程中,都是结伴出现的。以浏览器为例,它就是一个客户端,当我们想上网的时候,输入一个网址。浏览器会根据我们输入的网址向相应的服务器端发出请求,然后服务器端返回相应的网页给浏览器。这就是它们的应用场景之一。

            所以,在TCP通信过程中,一般都是由客户端发起请求,服务器端相应请求。

            那么,在windows/linux下,是如何进行这方面的编程的?步骤如下(参考百度):

    TCP编程的服务器端一般步骤是:

    1、创建一个socket,用函数socket();

    2、设置socket属性,用函数setsockopt(); * 可选

    3、绑定IP地址、端口等信息到socket上,用函数bind();

    4、开启监听,用函数listen();

    5、接收客户端上来的连接,用函数accept();

    6、收发数据,用函数send()和recv(),或者read()和write();

    7、关闭网络连接;

    8、关闭监听;

     

    TCP编程的客户端一般步骤是:

    1、创建一个socket,用函数socket();

    2、设置socket属性,用函数setsockopt();* 可选

    3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选

    4、设置要连接的对方的IP地址和端口等属性;

    5、连接服务器,用函数connect();

    6、收发数据,用函数send()和recv(),或者read()和write();

    7、关闭网络连接;

     

           可以看到,从第四步开始,客户端和服务器端的工作内容有了不一样。

           socket是啥?

           简单来说,是个函数,用来创建套接字。

           那么,套接字又是什么鬼?

           为了防止本篇日志闲扯太多,我尽量简单说,根据字面意思,socket字面意思是(电源)插座,而套接字本质上是一种网络编程接口,用来完成两个应用程序之间的数据传输。你把设备插头插到电源插座上,设备通上电了,同理,你把应用程序的端口插到socket里,数据就通上了。

           注:因为本人是硬件出身,所以对这些协议的理解全靠百度和工作积累,如果有表达错误的,欢迎指正。

           这一节先在8266上面写一个客户端的程序,咱们看一下实现的效果。跟上一节一样,还是要借助一个网络调试助手。同时,本节代码都是在上一节基础上修改来的,所以,如果上一节看懂了,这一节就很好理解,反之,你懂的~

           先说步骤,依然很多,参考上面提到的“TCP编程的客户端一般步骤”,这里大致分为7步:

          1、包含头文件

    #include "espconn.h"
    
    #include "mem.h"

    主要是"espconn.h",涉及到TCP通讯所需的各种数据结构。上一节已经包含了,可以略过。

          2、设置工作模式为station+ soft-ap模式,并连接到当前环境下的wifi

          因为前几步跟上一节一模一样,所以整合了一下:

    wifi_set_opmode(0x03);          // station+ soft-ap模式
    
    struct softap_config config;    //定义AP参数结构体,
    
    wifi_softap_get_config(&config);   //获取当前AP模式的参数
    
    os_memcpy(config.ssid,"ESP8266",strlen("ESP8266"));         //修改AP名称
    
    os_memcpy(config.password,"123456789",strlen("123456789"));      //修改AP密码
    
    config.ssid_len=strlen("ESP8266");         //修改 AP名称的长度
    
    wifi_softap_set_config(&config);             //使修改后的参数生效

    然后连到我家wifi,你们要改成你们家里或者办公室里的wifi。

          3、确定TCP连接的参数

          这里要确定几点:你是谁?你要和谁连接?连接的端口是多少?

          你是谁——ESP8266,8266连接家里路由成功之后,会自动获得一个IP,这是客户端IP

          你要和谁连接——因为是在我电脑上使用网络调试助手模拟TCP服务器端,所以服务器端的IP是我电脑的IP:192.168.1.103

          连接的端口——长话短说,TCP连接的端口从0到65535都有,但一般0~1023是公有的,从1024开始往后,可以选为自己的端口。这里选1024.

    struct ip_info info;
    
    const char remote_ip[4]={192,168,1,103};    //TCP服务端IP
    
    wifi_get_ip_info(STATION_IF,&info);                 //获取8266的WIFI信息
    
    tcp_client_init((struct ip_addr *)remote_ip,&info.ip,1024);

          4、TCP客户端初始化

          其实就是第三步里面的tcp_client_init函数,咱们主要看一下函数内部实现的功能。首先是在client.h文件中定义了一个espconn格式的结构体:

    struct espconn user_tcp_conn;                //对应网络连接的结构体

    然后在tcp_client_init函数中,对结构体的各个部分进行配置:

    {
    
             //TCP通信时,对应的espconn参数配置
    
             user_tcp_conn.type=ESPCONN_TCP;
    
             user_tcp_conn.state=ESPCONN_NONE;
    
             user_tcp_conn.proto.tcp=(esp_tcp *)os_zalloc(sizeof(esp_tcp));
    
             os_memcpy(user_tcp_conn.proto.tcp->local_ip,local_ip,4);
    
             os_memcpy(user_tcp_conn.proto.tcp->remote_ip,remote_ip,4);
    
             user_tcp_conn.proto.tcp->local_port=espconn_port();
    
             user_tcp_conn.proto.tcp->remote_port=remote_port;
    
             //注册连接回调函数和重连回调函数
    
             espconn_regist_connectcb(&user_tcp_conn,user_tcp_connect_cb);
    
             espconn_regist_reconcb(&user_tcp_conn,user_tcp_recon_cb);
    
             //启用连接
    
             espconn_connect(&user_tcp_conn);
    
    }

             函数中可以看到,espconn的参数设置完成之后,注册了两个回调函数,连接完成回调函数(连接完成以后,你想干嘛?)和重连回调函数(重连的时候,该咋办?):

    espconn_regist_connectcb(&user_tcp_conn,user_tcp_connect_cb);
    
    espconn_regist_reconcb(&user_tcp_conn,user_tcp_recon_cb);

             最后,开始TCP连接:

            

    espconn_connect(&user_tcp_conn);      //连接TCP server,连接成功返回0.

     

             5、定义连接成功的回调函数

             void ICACHE_FLASH_ATTR user_tcp_connect_cb(void *arg){
    
             struct espconn *pespconn=arg;
    
             espconn_regist_recvcb(pespconn,user_tcp_recv_cb);
    
              espconn_regist_sentcb(pespconn,user_tcp_sent_cb);
    
              espconn_regist_disconcb(pespconn,user_tcp_discon_cb);
    
              espconn_sent(pespconn,"hello,this is esp8266!",strlen("hello,this is esp8266!"));
    
    }

             函数内部进行了几个操作:

             注册接收完成的回调函数:接收完成以后,你想做点啥~

             注册发送完成的回调函数:发送完成以后,你想做点啥~

             注册断开TCP连接的回调函数:断开TCP连接以后,你想做点啥~

             TCP连接下,发送数据:hello,this is esp8266!

     

             6、定义user_tcp_connect_cb函数内部注册的回调函数

             这里先说一下,基本上从上一节开始,代码的编写就进入了回调函数套回调函数的情形。如果是没接触过回调函数的,刚开始看肯定有些别扭。但如果适应以后,你会发现这样操作还是很方便的。

             因为每个回调函数,在手册里都有说明,功能、参数、返回值,都很清晰。基本上只要看着手册和官方SDK里的例程,大部分问题都能解决。

    //接收完成回调函数,把收到的数据打印出来,延时,断开连接
    
    void ICACHE_FLASH_ATTR user_tcp_recv_cb(void *arg,
    
                       char *pdata,
    
                       unsigned short len){
    
             os_printf("receive data:%s\r\n",pdata);
    
             os_delay_us(300);
    
             espconn_disconnect((struct espconn *)arg);
    
    }
    
    //发送完成回调函数,打印发送完成标志
    
    void ICACHE_FLASH_ATTR user_tcp_sent_cb(void *arg){
    
             os_printf("send success!");
    
    }
    
    //断开TCP连接的回调函数,打印相关信息
    
    void ICACHE_FLASH_ATTR user_tcp_discon_cb(void *arg){
    
             os_printf("disconnect success!");
    
    }

     

             7、定义TCP重连的回调函数

             在第4步里注册了两个回调函数,一个是连接成功的回调函数,第5步已经说了。另一个就是重连的回调函数:

    //如果连接错误,打印一下故障码,然后重新连接
    
             void ICACHE_FLASH_ATTR user_tcp_recon_cb(void *arg, sint8 err){
    
             os_printf("error,error code is%d\r\n",err);
    
             espconn_connect((struct espconn *)arg);
    
    }

          好,到此为止,程序修改完毕。

          注:本例程里提到的大部分函数,都参照手册2c-esp8266_sdk_api_guide_cn_v1.5.4。

          再说一点,很多函数定义的时候,后面会跟一个参数:void *arg,这是什么?

          以第5步里注册回调函数为例:

    espconn_regist_recvcb(pespconn,user_tcp_recv_cb);

          注册了user_tcp_recv_cb函数,这个函数在定义的时候就有如下几个参数

    (void *arg,char *pdata,unsigned short len)

          从哪来的?

          打开手册2c-esp8266_sdk_api_guide_cn_v1.5.4,查找espconn_regist_recvcb函数,可以看到如下说明;

             其中的espconn_recv_callback,咱们继续向下找:

             至此,可以看到相关参数已经在回调函数的格式里定义好了,咱们只需要照着写就行。

     

          程序修改完成,保存、清理、编译、下载一条龙,然后重新上电。这里,需要借助串口助手和网络调试助手两个工具来查看效果。效果如下所示:

             设置网络调试助手:

             可以看到,在网络调试助手上,分别显示了client上线的时间和发来的数据。如果这时候咱们手动给client发一个数据:mcu lover。

             可以在串口助手上看到:

             显示了收到的数据,最后断开TCP连接。

             至此,TCP客户端通信说完了。还是希望大家多动手,毕竟这类东西要动手才有收获。后面会说一下TCP服务器端的用法(跟这个差不多),然后是POST和GET的用法,再然后,就可以根据GET,搞一个天气预报的小应用,相信很多人会比较感兴趣。

             这篇日志写的比较痛苦,因为我是从一个硬件工程师的视角去说这些东西,所以希望跟我类似的人能比较好的理解日志中出现的这些网络协议。因为通常来说,搞硬件的就是搞硬件,画画PCB、搞搞焊接、给单片机写写程序,甚至再写一写上位机,在linux下写一些应用。至于说整天研究TCP/UDP,或者POST、GET,比较少,或者说不算硬件工程师/单片机工程师的范畴了。

             但是物联网芯片的出现打破了这一屏障,它小巧,单片机级别的资源就能应用;但它又强大,可以联网,实现各种网络通信。所以,我们要不停的学习,千万不要自我满足。

    单片机爱好者

     

    展开全文
  • 最近学习APP与单片机通过ESP8266通信,ESP8266做服务器,APP能将数据发送到ESP8266,但ESP8266不能发送给单片机,请各位大佬帮忙解答一下。下面是代码。万分感谢 ``` void UartConfiguration() { TMOD |=0x20; ...
  • ESP8266开发之旅 基础篇① 走进ESP8266的世界

    万次阅读 多人点赞 2019-06-19 13:44:33
        欢迎大家来到ESP8266的世界,从现在开始,笔者将带领大家慢慢揭开ESP8266神秘的面纱。 1. 简介     从笔者的角度来说,ESP8266这个词可以理解为ESP8266EX芯片(当然,后面也有可能出现了其他芯片,...

    基于Arduino的ESP8266开发技术全系列教程

    一、基础篇

    1. ESP8266开发之旅 基础篇① 走进ESP8266的世界
    2. ESP8266开发之旅 基础篇② 如何安装ESP8266的Arduino开发环境
    3. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
    4. ESP8266开发之旅 基础篇④ ESP8266与EEPROM
    5. ESP8266开发之旅 基础篇⑤ ESP8266 SPI通信和I2C通信
    6. ESP8266开发之旅 基础篇⑥ Ticker——ESP8266定时库

    二、网络篇

    1. ESP8266开发之旅 网络篇① 认识一下Arduino Core For ESP8266
    2. ESP8266开发之旅 网络篇② ESP8266 工作模式与ESP8266WiFi库
    3. ESP8266开发之旅 网络篇③ Soft-AP——ESP8266WiFiAP库的使用
    4. ESP8266开发之旅 网络篇④ Station——ESP8266WiFiSTA库的使用
    5. ESP8266开发之旅 网络篇⑤ Scan WiFi——ESP8266WiFiScan库的使用
    6. ESP8266开发之旅 网络篇⑥ ESP8266WiFiGeneric——基础库
    7. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client
    8. ESP8266开发之旅 网络篇⑧ SmartConfig——一键配网
    9. ESP8266开发之旅 网络篇⑨ HttpClient——ESP8266HTTPClient库的使用
    10. ESP8266开发之旅 网络篇⑩ UDP服务
    11. ESP8266开发之旅 网络篇⑪ WebServer——ESP8266WebServer库的使用
    12. ESP8266开发之旅 网络篇⑫ 域名服务——ESP8266mDNS库
    13. ESP8266开发之旅 网络篇⑬ SPIFFS——ESP8266 Flash文件系统
    14. ESP8266开发之旅 网络篇⑭ web配网
    15. ESP8266开发之旅 网络篇⑮ 真正的域名服务——DNSServer
    16. ESP8266开发之旅 网络篇⑯ 无线更新——OTA固件更新
    17. ESP8266开发之旅 网络篇⑰ NTP——时间服务
    18. ESP8266开发之旅 网络篇⑱ WebSocket——全双工通信

    三、应用篇

    1. ESP8266开发之旅 应用篇① 局域网应用 ——炫酷RGB彩灯
    2. ESP8266开发之旅 应用篇② OLED显示天气屏
    3. ESP8266开发之旅 应用篇③ 简易版WiFi小车
    4. ESP8266开发之旅 应用篇④ WiFi广告机
    5. ESP8266开发之旅 应用篇⑤ WiFi探针
    6. ESP8266开发之旅 应用篇⑥ 检测周边WiFi杀手
    7. ESP8266开发之旅 应用篇⑦ WiFi自动考勤机
    8. ESP8266开发之旅 应用篇⑦ 简易版本在线获取特定省份新型冠状病毒情况
    9. ESP8266开发之旅 应用篇⑧Arduino版本 WiFi杀手
    10. ESP8266开发之旅 应用篇⑨ 小白半小时轻松接入百度天工IOT
    11. ESP8266开发之旅 应用篇⑩ 小白半小时轻松接入阿里云MQTT
    12. ESP8266开发之旅 应用篇⑪ 基于ESP8266的人流量简单统计系统
    13. ESP8266开发之旅 应用篇⑫ 基于ESP8266的校园图书馆学习时长排行榜(记录思路,尚未实现)

    四、高级篇

    1. ESP8266开发之旅 进阶篇① 代码优化 —— ESP8266内存管理
    2. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266配置
    3. ESP8266开发之旅 进阶篇③ 闲聊 ESP8266 Flash
    4. ESP8266开发之旅 进阶篇④ 常见问题 —— 解决困扰
    5. ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美
    6. ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明
    7. ESP8266开发之旅 进阶篇⑦ 如何尽量做到一套代码兼容esp8266和esp32
    8. ESP8266开发之旅 进阶篇⑧ 认识 PROGMEM on ESP8266
    9. ESP8266开发之旅 进阶篇⑨ 深入了解 802.11 无线协议(非常重要)
    10. ESP8266开发之旅 进阶篇⑩ sniffer混杂模式,监听802.11帧,黑科技基础
    11. ESP8266开发之旅 进阶篇⑪ 深入了解 Esp8266 Https访问

    五、阿里云篇

    1. ESP8266开发之旅 阿里云物联网平台篇① 了解阿里云物联网平台(纯理论,了解概念即可)
    2. ESP8266开发之旅 阿里云物联网平台篇② MQTT.FX客户端模拟 调试 MQTT LED智能灯控制系统
    3. ESP8266开发之旅 阿里云物联网平台篇③ LED智能灯控制系统(MQTT客户端直连)
    4. ESP8266开发之旅 阿里云物联网平台篇④ LED智能灯控制系统(MQTTS客户端直连)
    5. ESP8266开发之旅 阿里云物联网平台篇⑤ LED智能灯控制系统(使用HTTPS认证再连接)
    6. ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信))

    六、小程序篇

    1. ESP8266开发之旅 小程序之阿里云篇① “IOT菜鸟”小程序,小白简单配置就可以玩起来
    2. ESP8266开发之旅 小程序之阿里云篇② “IOT菜鸟”小程序,源码分析,创作自己的小程序

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力。希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石。。。

    快速导航
    单片机菜鸟的博客快速索引(快速找到你要的)

    如果觉得有用,麻烦点赞收藏,您的支持是博主创作的动力。

        欢迎大家来到ESP8266的世界,从现在开始,笔者将带领大家慢慢揭开ESP8266神秘的面纱。

    1. 简介

        从笔者的角度来说,ESP8266这个词可以理解为ESP8266EX芯片(当然,后面也有可能出现了其他芯片,这里首推ESP8266EX)以及依赖ESP8266EX芯片开发的系列模组的简称。
        ESP8266EX是由乐鑫信息科技公司(Espressif)出品的一款应用于物联网编程的WiFi芯片。从它被设计出来,就引起了物联网开发的热潮,获得了业界同行的肯定。芯片的具体相关介绍,笔者这里就不占用章节篇幅,请读者自行查看乐鑫官网详细介绍。
        ESP8266系列模组是深圳安信可(Ai-thinker)公司开发的一系列基于乐鑫ESP8266EX的超低功耗的UART-WiFi模块的模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
        从厂商角度来看,乐鑫是ESP8266的芯片厂商,安信可是依赖ESP8266生产模组,在ESP8266芯片的基础上,完善了外围器件布局和优化天线,并提供一系列开发方案的厂家。网上各种盗版模块居多,笔者推荐大家购买安信可官方正版模块。

    温馨提示

        请注意,笔者后面章节提到的ESP8266均指ESP8266系列模组。

    2. 特性

        其典型特征如下:

    • 802.11 b/g/n
    • 内置Tensilica L106 超低功耗 32 位微型 MCU,主频支持 80 MHz 和160 MHz,支持 RTOS
    • 内置10 bit高精度ADC
    • 内置TCP/IP协议栈
    • 内置TR 开关、balun、LNA、功率放大器和匹配网络
    • 内置PLL、稳压器和电源管理组件,802.11b 模式下+20 dBm的输出功率
    • A-MPDU 、 A-MSDU 的聚合和 0.4 s的保护间隔
    • WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式
    • 支持AT远程升级及云端OTA升级
    • 支持 STA/AP/STA+AP 工作模式
    • 支持 Smart Config 功能(包括 Android 和 iOS 设备)
    • HSPI 、UART、I2C、I2S、IR Remote Control、PWM、GPIO
    • 深度睡眠保持电流为 10 uA,关断电流小于 5 uA
    • 2 ms 之内唤醒、连接并传递数据包
    • 待机状态消耗功率小于1.0 mW (DTIM3)
    • 工作温度范围:-40℃- 125℃

    3. 系列模组

        据笔者了解,目前安信可生产的ESP8266系列模组主要有:

    1. ESP-01S
      image

    2. ESP-07S
      在这里插入图片描述

    3. ESP-12E
      在这里插入图片描述

    4. ESP-12F

    在这里插入图片描述

    1. ESP-12S
      image

    温馨提示

        1.以上5张图均引用安信可官网,如有侵权,麻烦告知。
        2.模组之间的区别在哪里?
        不同系列之间的差别更多的是封装工艺以及Flash闪存大小不同,具体差别情况下表1:

    型号 封装 flash大小 天线 可用IO
    ESP-01S DIP-8 8Mbit(1MB) PCB天线 2
    ESP-07S SMD-16 32Mbit(4MB) IPEX 9
    ESP-12E SMD-22 32Mbit(4MB) PCB天线 9
    ESP-12F SMD-22 32Mbit(4MB) PCB天线 9
    ESP-12S SMD-16 32Mbit(4MB) PCB天线 9

        请注意,flash芯片是外接在ESP8266芯片外面,通过SPI与8266芯片通信。虽然有些系列模组flash比较大,但是不意味着全部flash空间都可以用来装载固件代码。一般来说,我们开发的业务代码不能超过1MB,剩下的flash空间可以用来做文件系统,笔者后面章节会讲解。
        从性价比角度来说,目前开发最常用的就是ESP12F,迷你尺寸,IO口多,flash空间大,价格可以低于10元。具体更多的型号介绍可以参考安信可官网 。

    4. 使用原因

        之所以采用 ESP8266 做为研发平台,主要是因为其超低成本,并且将处理器和 WiFi 芯
    片精致集成在一起,具有 GPIO、PWM、I2C、1‐Wire、ADC 等功能,为开发者提供一套极具性价
    比的开发平台。ESP8266 是一个完整且自成体系的 Wi‐Fi 网络解决方案,能够搭载软件应
    用,也就是说可以将应用直接在 ESP8266 上运行,或通过另一个应用处理器进行业务逻辑处
    理,而仅使用 ESP8266 的 Wi‐Fi 网络功能(通常做为串口透传使用,目前淘宝上销售的大部
    分已经写入基于 AT 指令的串口转 wifi 固件的模块,方便直接连接原有单片机系统)。
        综合来说,大众选择ESP8266的主要原因有:

    1. 作为WiFi模块来用,价格实惠(批发价可以低于10元)。同时,从初学者角度来看,就算购买了ESP8266开发板,价格也是在20-30元左右,学习成本低。所以,前期入门学习,笔者建议初学者可以考虑购买一个ESP8266开发板,可以绕过不少弯路,达到快速学习ESP8266的目的,比如NodeMcu开发板;
    2. 除了作为WiFi模块来用,其自身内置了32位处理器,也可以进行二次开发。读者可以把ESP8266当做Arduino+WiFi功能来开发;
    3. 基本的ESP8266开发体系形成,其自身的SDK不断迭代开发、基于LUA的NodeMcu模式、基于Arduino的生态移植、论坛社区上众多的参考资料,都使得ESP8266开发速度加快;
    4. ESP8266有三种工作模式:Station模式、Soft-AP模式、Station兼Soft-AP模式,可以满足大部分场合开发需求;
    5. 对于习惯用AT指令的同学,也支持给ESP8266烧写AT固件,可以当做Uart转WiFi使用,不过这不是本书的重点,需要研究的同学可以参考笔者写的一个技术帖子(https://www.arduino.cn/thread-44963-1-1.html) 。

    5. 使用场景

        作为一款WiFi芯片,可以毫不夸张地说,只要需要使用无线网络环境的都可以应用它。
        简单来说,就是通过WiFi控制的各类设备。比如,现在比较流行的词,物联网、智能插座、智能家居、智能家电、可穿戴电子产品、WiFi定位、WiFi探针、WiFi彩灯等等。只有你想不到的,没有你做不到的。当然,虽然目前市面上没有看到智能产品的广泛应用,但是不要慌,总有一天会实现的,而我们就是实现这个路途的奠基石。

    6. 总结

        本章作为本书的开篇,主要带领读者走进ESP8266的世界,简单介绍了ESP8266是什么,有什么特性,为什么我们要使用它,以及它能帮助我们做什么。作为纯描述性的章节,笔者只是简单一笔带过,不希望花费读者太多时间在这上面,更希望大家形成这么一个概念即可——ESP8266是个WiFi模块,可以联网,可以基于Arduino平台开发。下面就是进入真真正正的基于Arduino平台的ESP8266开发之旅,旅途愉快,Hello Arduino ESP8266!

    展开全文
  •     在网络篇①中,博主主要讲解了Arduino上开发ESP8266的插件库 Arduino Core For ESP8266。但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式: Station模式; AP模式; ...
  • ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    万次阅读 多人点赞 2019-06-19 13:47:50
        笔者本书的主题是基于Arduino平台来开发ESP8266。那么从另外一个角度来看待这句话,可以理解为:把ESP8266当作一款类似于Arduino UNO型号(为什么不是Mega2560呢?可以从硬件资源方向考虑)的Arduino开发板...
  • 基于Arduino平台开发ESP8266,我们至少要分别准备好硬件和软件开发环境:     1. 硬件     ESP8266模块,或者ESP8266开发板,笔者建议初学者直接使用开发板;     2. 软件     Arduino IDE开发...
  • 1、 Esp8266之 搭建开发环境,开始一个“hellow world”串口打印。 2、 Esp8266之 利用GPIO开始使用按钮点亮你的“第一盏灯”。 3、 Esp8266之 利用 “软件定时器 ” 定时0.5秒闪烁点亮一盏LED。 4 、Esp8266之 ...
  • ESP8266】基于ESP8266的MicroPython入门笔记

    万次阅读 多人点赞 2017-01-01 16:36:29
    本文是ESP8266运行MicroPython入门笔记,记录自己在探索MicroPython所见所思的同时,也顺便简单评估该开发方式的优缺点。 开发环境 ESP8266开发板: ESP-LAUNCHER(4 MB Flash) 操作系统:Win10 64位 ...
  • 该文件为百度云连接,...ESP8266 wifi模块 ESP8266无线开发板 8266 SDK开发 wifi模块 视频和资料。以及源码demo案例 和几个简单视频的案例教程 完全适合喜欢esp8266 sdk开发的同学 支持esp8266 专门的eclipse 进行开发
  • 智能家居简单实现---使用ESP8266简单实现和APP通讯

    万次阅读 多人点赞 2017-11-14 16:29:56
    前段时间,公司利用 ESP8266 这个WiFi模块,做了好多小产品。从手机 APP 直连这个 ESP8266 进行通讯,再到实现远程控制。中间实现过程磕磕碰碰,虽然这方面已经做得非常成熟,但是网上的资料少之又少。现在把实现...
  • ESP8266 wifi模块开发汇总

    千次阅读 2018-10-23 08:35:19
    ESP8266 wifi模块开发汇总   ESP8266 wifi模块开发汇总本文档主要介绍开发者在ESP8266开发中常见的一些问题。 这些问题主要包括以下几大类: 基本概念相关 ESP8266 相关 AiCloud 相关 固件编译调试相关 文档...
  • ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢? 因为ESP8266模块是一款高性能的WIFI串口模块,可以不用知道太多WIFI相关知识就可以很好的上手。说白了,只是个WIFI转串口的设备,你...
  • ESP8266WiFi模块入门使用手册

    千次阅读 2018-06-04 11:10:00
    ESP8266WiFi模块系列模块使用指南,模组全家福,技术资料请 点击打开链接
  • ESP8266wifi模块与51单片机通信教程

    千次阅读 2019-11-10 17:45:59
    ** ESP8266wifi模块与51单片机通信教程 准备两个200欧左右的电阻 ...注意:为保证通信正常必须先将ESP8266上电5S左右后才开启51单片机或MCU,这一步是为了将单片机发送的指令成功发送给ESP8266...
  • ESP8266 SDK学习笔记(一):ESP8266 SDK结构

    万次阅读 多人点赞 2018-03-09 12:41:08
    本人自从2015年3月使用ESP8266以来,发现自己在使用ESP8266的过程中学习到了好多有关嵌入式开发的知识,特此写此系列进行整理。 ESP8266虽然同STM32属于微控制器级别,但其从编译到下载,和keil那种「傻瓜式」环境...
  • 打开arduino 打开file ->... 将这个链接http://arduino.esp8266.com/stable/package_esp8266com_index.json填入’Additional Boards Manager URls’中 打开tool->board->boards manage,在其...
  • esp8266FTPServer, 使用 esp8266/esp32 SPIFFs的简单FTP服务器 esp8266FTPServer使用 esp8266/esp32 SPIFFs的简单FTP服务器现在应该支持 esp32 !为了使用 esp8266,我修改了来自 arduino/wifi屏蔽的FTP服务器。这...
  • Esp8266 进阶之路32 当esp8266遇到 Html,该怎么内置网页控制设备,理清内置网页的实现过程,esp8266烧录html文件,实现无需路由器手机也可以控制esp8266。...
  • ESP8266-Websocket, 用于 ESP 8266的web socket库 web socket客户端和ESP-8266服务器这是一个实现 web socket客户端和运行在ESP-8266上的服务器的简单库。正在启动应该从你可以访问的任何web服务器中提供示例 ...
  • esp8266-fritzing-parts, 用于Fritzing的自定义ESP8266部件 esp8266-fritzing-parts这个存储库包含基于Fritzing应用程序的ESP8266的部分。 只要下载. fzpz 文件并将它的拖到 fritzing可用部件NodeMCU V1.0: 这是基于...
  •     在前面的篇章中,博主给大家讲解了ESP8266的软硬件配置以及基本功能使用,目的就是想让大家有个初步认识。并且,博主一直重点强调 ESP8266 WiFi模块有三种工作模式: Station模式,也叫站点模式; Soft-...
  • ESP8266开发之旅 基础篇⑥ Ticker——ESP8266定时库

    万次阅读 多人点赞 2019-06-19 13:50:29
        Ticker是Arduino Core For ESP8266 内置的一个定时器库,这个库用于规定时间后调用函数。 2. Ticker库     Ticker的功能非常简单,就是规定时间后调用函数。所以读者可以发现本章节非常简短,可以快速...
  •     博主的 ESP8266开发之旅 专栏主要分为三个部分: 基础篇 网络篇 应用篇     从这一篇开始,博主将会带领各位读者在基础篇的基础上进入网络的世界。在此,博主认为各位读者已经具备以下前提: ...
  • 51单片机DHT11温湿度ESP8266WiFi手机APP显示设计

    万次阅读 多人点赞 2019-03-17 12:30:53
    基于51单片机、ESP8266WiFi模块、温湿度DHT11传感器、Android APP完成。首先先展示一下设计好的实物,接下来将从系统方案、硬件设计、软件设计这三个方面来阐述。 1、系统方案 DHT11温湿度传感器采集数据传送...
  • 1. 前言     在前面章节的博客中,博主介绍了ESP8266WiFi库 Tcp client的用法,并模拟了Http请求。...答案肯定是有的,这就是博主本篇需要跟大家讲述的知识——ESP8266HTTPClient库。     请注意...
  • 51单片机通过ESP8266模块与手机进行通讯(单片机)

    万次阅读 多人点赞 2018-02-08 18:29:43
    Step1:配置ESP8266 通过USB转TTL模块把ESP8266模块和电脑连接起来,如图 把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转TTL模块的3.3v,地,3.3v,RXD,TXD 连接好后,就准备用电脑用串口调试助手向ESP8266...

空空如也

1 2 3 4 5 ... 20
收藏数 14,364
精华内容 5,745
热门标签
关键字:

esp8266