精华内容
参与话题
问答
  • ESP8266wifi模块与51单片机通信教程

    千次阅读 2019-11-10 17:45:59
    ESP8266wifi模块与51单片机通信教程 准备两个200欧左右的电阻 准备6根杜邦线 然后将ES8266通过如图这种方式连接起来 注意:在连接单片机的RX和TX引脚时必须和ESP8266模块的RX和TX反接才能保证正常通信 将程序下载...

    **

    ESP8266wifi模块与51单片机通信教程

    1. 准备两个200欧左右的电阻
    2. 准备6根杜邦线
    3. 然后将ES8266通过如图这种方式连接起来
    4. 注意:必须先配置ESP8266模块,配置需要用到ESP8266的固件烧录器也叫WiFi模块下载器,具体可到某宝上买到,拿到收录器后连接上电脑打开串口调试助手,用调试助手发送如下指令
      5.AT(返回 ok 表示通信成功)
      • AT+CIOBAUD=X(改模块的波特率, X 为要改成的波特率,因单片机达不到
      太高的波特率所以要更改一下波特率,因为我学习板上的晶振是 12MHZ 的,
      所以我这里改成 4800,再发 AT,有 ok 表明通信成功)
      • AT+CWMODE=X(设置工作模式指令, X 可以是 1、 2、 3,具体如下:
      1: Station 模式
      2: AP 模式
      3: Station+AP 模式
      Station 可理解为让 wifi 模块去连接路由器或热点,此时模块作为客户端
      AP 模式可理解为模块本身是一个热点,手机或电脑可以连接这个热点,此时模块作为服务器。
      这里用的是 AP 模式
      • AT+RST(重启指令,设置新的工作模式后需重启才能生效。 发送完这条指令后再发送其它指令可能会显示串口无效,需要退出串口调试助手再重新进入 )
      • AT+CWSAP?(可以查看当前 AP 模式下模块热点的具体信息)
      • AT+CIFSR( 查看 IP 地址,好像都是 192.168.4.1)
      • AT+CIPMUX=1
      • AT+CIPSERVER=1, X( 1 表示开启服务器, X 为自己设置的端口号,一般设 3或 4 位。也可以只开启服务器而不设置端口号,默认端口是 333 好像)注: 倒数的这两条指令在模块掉电后需要重新配置,其它那几条配置过一次不用再重新配置了。
      到这里拿出手机,打开 wifi 并连接上模块的热点。
      连接热点成功后打开网络调试助手这个软件,右滑进入设置,协议设置为TCP Client,即客户端模式, IP 地址为 192.168.4.1,端口为刚才设置的:6666,然后点连接,连接成功后就能通信了
      在这里插入图片描述
      在这里插入图片描述
    5. 注意:在连接单片机的RX和TX引脚时必须和ESP8266模块的RX和TX反接才能保证正常通信
    6. 将程序下载到单片机中
    7. 注意:为保证通信正常必须先将ESP8266上电5S左右后才开启51单片机或MCU,这一步是为了将单片机发送的指令成功发送给ESP8266模块
    8. 打开安卓端的或电脑的调试助手进行调试
    9. 欢迎有问题提问,共同解决
    展开全文
  • WLAN是英文WirelessLAN的缩写,就是无线局域网的意思。无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活、建网迅速、个人化等特点。将这一技术应用于电信网的接入网领域,能够方便、...
  • 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 wifi模块 ESP8266无线开发板 8266 SDK开发 wifi模块 视频和资料。以及源码demo案例 和几个简单视频的案例教程 完全适合喜欢esp8266 sdk开发的同学 支持esp8266 专门的eclipse 进行开发
  • 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.试试效果
    在这里插入图片描述
    在这里插入图片描述

    快去试试远程控制它把
    展开全文
  • 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,比较少,或者说不算硬件工程师/单片机工程师的范畴了。

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

    单片机爱好者

     

    展开全文
  • 2.WiFi模块ESP8266使用教程

    万次阅读 多人点赞 2018-03-27 00:04:49
    总器件:Esp8266模块,USB转TTL模块,同时电脑上要有”网络调试助手”和”串口助手” 一般而言,当我们用USB转TTL模块Esp8266连接之后,波特率默认为115200 当我们用这个模块Esp8266发送数据的时候,串口助手记得...
  • 本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** 提高篇-1 虚拟机安装 提高篇-2 Linux环境搭建 ...
  • ESP8266 wifi模块开发汇总

    千次阅读 2018-10-23 08:35:19
    ESP8266 wifi模块开发汇总   ESP8266 wifi模块开发汇总本文档主要介绍开发者在ESP8266开发中常见的一些问题。 这些问题主要包括以下几大类: 基本概念相关 ESP8266 相关 AiCloud 相关 固件编译调试相关 文档...
  • wifi模块使用教程,需要配套的stc系列单片机wifi程序的评论里告诉我我重新上传。
  • ESP8266WiFi模块入门使用手册

    千次阅读 2018-06-04 11:10:00
    ESP8266WiFi模块系列模块使用指南,模组全家福,技术资料请 点击打开链接
  • 前言 这篇文章是我学习esp8266的一些...我在B站找到一个比较好学习正点原子模块ATK-ESP8266的视频,推荐给大家观看,老师很有趣,看完你就会对这个模块有全新的理解 视频链接:https://www.bilibili.com/video/BV1wV411
  • 但是,并没有讲到关于这个模块的工作模式,所以本篇讲着重讲解ESP8266的三种工作模式: Station模式; AP模式; AP兼Station模式;     重点来了,8266编程开发,都是基于以上三种模式中的一种模式来...
  • Node MCU与ESP8266WIFI模块刷官方AT固件教程 所需硬件:Node MCU模块或者是ESP8266模快
  • ESP8266模块使用教程

    千次阅读 2017-05-31 16:22:09
    ESP8266模块:串口转WiFi模块   特别注意一下,供电是3.3V,千万别5V,5V 2分钟芯片温度就达到100度以上,楼主因此还被烫伤了,还好及时拔电,模块没坏 买来模块接了电串口不开机?这里给你讲解   CH_PD为...
  • 智能家居简单实现---使用ESP8266简单实现和APP通讯

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

    万次阅读 多人点赞 2015-05-31 10:24:57
    ESP8266这个模块真的很便宜,但比之前用过的各种wifi模块都难折腾。主要是很多细节说明书都没怎么提及,或者是我没看仔细。总之,本篇就根据我的使用经历来教大家如何折腾这东东。 引脚连接: GND:接地 GPIO16:...
  • 51单片机DHT11温湿度ESP8266WiFi手机APP显示设计

    万次阅读 多人点赞 2019-03-17 12:30:53
    基于51单片机、ESP8266WiFi模块、温湿度DHT11传感器、Android APP完成。首先先展示一下设计好的实物,接下来将从系统方案、硬件设计、软件设计这三个方面来阐述。 1、系统方案 DHT11温湿度传感器采集数据传送...
  • ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    万次阅读 多人点赞 2019-06-19 13:47:50
        笔者本书的主题是基于Arduino平台来开发ESP8266。那么从另外一个角度来看待这句话,可以理解为:把ESP8266当作一款类似于Arduino UNO型号(为什么不是Mega2560呢?可以从硬件资源方向考虑)的Arduino开发板...
  •     ESP8266模块,或者ESP8266开发板,笔者建议初学者直接使用开发板;     2. 软件     Arduino IDE开发环境; 1. 硬件     硬件环境主要分为两种:     1. ESP8266开发板 + USB线   ...
  • ESP8266 WiFi模块的DIY PCB

    2020-04-11 09:24:16
    在本项目/教程中,我将向您展示如何为ESP8266 WiFi模块设计和开发PCB。 如果您记得“ ESP8266和ARDUINO入门”项目,我曾提到ESP8266 WiFi模块的引脚不适合面包板使用。 更多信息:ESP8266 在那里,我为ESP8266 WiFi...
  • ESP8266通过USB转TTL连接电脑。注意,ESP8266使用3.3V供电,通过串口(USART)与电脑传输数据。 打开串口调试助手,波特率选择115200,停止位为1位,数据位为8位,奇偶校验无。 通过串口向模块发送AT指令AT,注意,...
  • ESP8266 SDK学习笔记(一):ESP8266 SDK结构

    万次阅读 多人点赞 2018-03-09 12:41:08
    本人自从2015年3月使用ESP8266以来,发现自己在使用ESP8266的过程中学习到了好多有关嵌入式开发的知识,特此写此系列进行整理。 ESP8266虽然同STM32属于微控制器级别,但其从编译到下载,和keil那种「傻瓜式」环境...
  • 最近学习APP与单片机通过ESP8266通信,ESP8266做服务器,APP能将数据发送到ESP8266,但ESP8266不能发送给单片机,请各位大佬帮忙解答一下。下面是代码。万分感谢 ``` void UartConfiguration() { TMOD |=0x20; ...
  • ESP8266 WIFI串口通信模块应该是使用最广泛的一种WIFI模块之一了。为什么呢? 因为ESP8266模块是一款高性能的WIFI串口模块,可以不用知道太多WIFI相关知识就可以很好的上手。说白了,只是个WIFI转串口的设备,你...
  • ESP8266WIFI模块了解一下(新手入门级别)

    万次阅读 多人点赞 2018-05-01 10:02:51
    安信可ESP8266WIFI模块了解一下 ESP8266是有乐鑫公司开发的一套高度集成的WIFI芯片,可以方便进行而二次开发。乐鑫是ESP8266的芯片厂商,安信可是依据ESP8266生产模组,并提供一系列开发方案的厂家。 接...
  • 2、按照一般教程接线,注意VCC为3V,UTX接USB转TTL串口的RXD引脚,PB8连接1K欧电阻到esp8266 的CHIP_EN脚,当PB8接3.3V时,芯片正常工作。芯片的GPIO0为工作模式选择引脚,开发板上对应的是P...
  • ESP8266开发之旅 基础篇① 走进ESP8266的世界

    万次阅读 多人点赞 2019-06-19 13:44:33
        欢迎大家来到ESP8266的世界,从现在开始,笔者将带领大家慢慢揭开ESP8266神秘的面纱。 1. 简介     从笔者的角度来说,ESP8266这个词可以理解为ESP8266EX芯片(当然,后面也有可能出现了其他芯片,...
  • 51单片机通过ESP8266模块与手机进行通讯 WIFI 工作方式: 1.AP模式 提供热点 2.Station模式 作为设备接入热点 3.同时支持 配置 通过USB转TTL模块ESP8266模块和电脑连接起来 把ESP8266模块的VCC,GND,TXD,RXD口分别...

空空如也

1 2 3 4 5 ... 20
收藏数 13,863
精华内容 5,545
关键字:

esp8266