精华内容
下载资源
问答
  • ZigBee+ESP8266网关连接服务器上传数据

    千次阅读 2019-11-28 15:03:15
    ZigBee+ESP8266网关连接服务器上传终端设备采集的传感器数据,此处以...关于ESP8266如何发AT指令连WiFi,可以看一下我写的另外一篇博客。 ESP8266发AT指令连接WiFi 这一篇的代码是单纯数据上传至服务器,没有服务器...

    ZigBee+ESP8266网关连接服务器上传终端设备采集的传感器数据,此处以DHT11温湿度传感器为例。

    在这里插入图片描述

    详细不讲了,可以去看代码,需要注意的是:ESP8266模块需要先使用串口调试助手发AT指令连上附近WiFi,之后再串口连接协调器。关于ESP8266如何发AT指令连WiFi,可以看一下我写的另外一篇博客。
    ESP8266发AT指令连接WiFi
    这一篇的代码是单纯数据上传至服务器,没有服务器端指令数据下发的内容。这篇看懂之后,可以去看看我的另外一篇博客(注释也很详细):
    ZigBee+ESP8266网关数据上传下发

    此篇内容的代码下载地址:
    ZigBee+ESP8266网关上传DHT11温湿度数据

    展开全文
  • 自建基于STM32与ESP8266的物联网服务器

    千次阅读 多人点赞 2020-02-10 10:29:33
    stm32通过ESP8266连接到云服务器进行TCP通信,在这篇文章中我将从头教大家如何自己做一个物联网的demo出来,通过使用TCP协议自己搭建一个基于STM32与ESP8266的物联网服务器

    在这篇文章中我将从头教大家如何自己做一个物联网的demo出来。这个demo对于初学者来说如果是一步步去探索的话真的挺费时间的,期间也会遇到各种各样的问题,这里呢我就把我自己探索的路子分享给大家(demo基于TCP/IP协议,只要配置正确不存在连不上网的问题,因为所有的网络都是支持TCP/IP的)

    1.材料准备工作:
    购买一块STM32开发板,一个ESP8266模块,杜邦线若干,租用一台阿里云服务器。

    2.硬件连接:
    ESP8266的VCC接3.3v(5v也还凑合,不至于烧坏)
    ESP8266的GND接GND
    ESP8266的TXD接板子USART的RXD引脚
    ESP8266的RXD接板子USART的TXD引脚
    RST引脚与IO_0引脚不需要控制,悬空即可

    3.服务器准备
    第一步:登陆阿里云官网租用一台服务器,我选用的是学生轻量应用服务器(9.5元每月),操作系统windows server2012R2
    第二步:购买完成后会跳转轻量应用服务器的控制台页面,设置远程桌面:
    在这里插入图片描述
    我选用的是win10自带的远程连接工具:
    在这里插入图片描述
    通过账号密码连接桌面。
    第三步:端口设置
    在这里插入图片描述
    如图,点击防火墙,为了方便我把TCP和UDP的所有端口都开放了。点击添加规则即可开放端口。
    第四步:服务器端安装软件
    我把我电脑的D盘通过映射网络驱动器的方式映射到服务器(配置很简单,百度一下你就知道),在服务器内可以直接把D盘的软件复制过去。这里我们需要JDK,eclips,如果后期想运行java web项目的话建议再安装一个tomcat,然后再安装一个MySQL数据库,安装的时候要勾上允许远程访问,端口默认3306就OK了。关于java环境的配置以及软件安装我就不写了,网上到处都是这方面的文章。

    4.硬件端的代码编写
    基本的原理参见我的上一篇博客(https://blog.csdn.net/naruhina/article/details/104211705),今天的代码与上篇博客的代码略有不同,加入了防TCP自己断掉的心跳包机制,每隔十秒发送一次,由定时器驱动。代码与说明详见上传的资源,这里只放主要代码.

    #include "sys.h"
    #include "delay.h"
    #include "usart.h"  		 	 		
    #include "usart3.h"
    #include "common.h" 
    #include "StaConfig.h"
    #include "timer3.h"
    /************************************************
     第一次测试完成日期:2020/2/7
     
     第一次描述:通过USART3连接ESP8266的TX与RX。相关AT指令以及数据发送均通过USART3进行
     主函数调用setClient设置为STAClient透传模式与阿里云服务器取得通信,通过在电脑上使用
     串口助手发送字符串到串口1并在串口1中断服务函数内通过调用发送数据函数通过串口3发送给
     ESP8266,然后再经由路由器发送到云服务器。云服务器端通过网络调试助手创建一个TCP SERVER
     然后就可以向STM32发送数据了,接收到的数据由相应函数处理回显到串口调试助手内。
     
     备注:发送成功后atk_8266_send_data函数返回了失败,但实际上发送成功,应该是第二个参数不对应
     导致的,但无关紧要。并且程序内并没有调用退出透传的函数,重新烧录程序完成后掉一次电恢复一下。
     心跳包机制尚未加入
    ************************************************/
    
    /************************************************
     第二次测试完成日期:2020/2/9
     
     本次主要修改了发送数据受缓存影响的bug,以及与向服务器发送的时候没有0x0a,0x0d的bug。新增防止因长时间无操作的定时发送心跳包的功能,以及确定
     后atk_8266_send_data函数无误,在透传模式下的返回值1是第二个参数不对应的误报,实际没任何错误。新增TCP Client 非透传模式
    ************************************************/
    
    	
     int main(void)
     {	 
    	u8 ipbuf[50];
    	delay_init();	    	 //延时函数初始化	  
      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
    	uart_init(115200);	 	//串口初始化为115200
    	usart3_init(115200);		//初始化串口3 
    	TIM3_Int_Init(49999,14399);//5Khz的计数频率,计数到5000为1s 
    	setClient(ipbuf);//TCP Client 透传模式
    	//setClientNonPierce(ipbuf);
    	while(1)
    	{
    		atk_8266_at_response(1);
    		delay_ms(100);
    	}
    }
    
    
    #include "StaConfig.h"
    #include "common.h"
    /***********************************************************/
    //第一次测试完工日期:2020/2/7																	
    //作者:lht
    //2020/2/9 新增TCP Client 非透传模式
    /***********************************************************/
     void setClient(u8 *ipbuf)//设置ESP8266工作在STA模式的CLIENT设置并开启透传
     {
    	//printf("AT恢复出厂设置:%d\n",atk_8266_send_cmd("AT+RESTORE","OK",1000));
    	 printf("AT测试:%d\n",atk_8266_send_cmd("AT","OK",500));
    	 printf("设置为STA模式:%d\n",atk_8266_send_cmd("AT+CWMODE=1","OK",500));//设置为STA模式
    	 printf("重启:%d\n",atk_8266_send_cmd("AT+RST","OK",500));//重启生效
    		delay_ms(1000);         //延时3S等待重启成功
    		delay_ms(1000);
    		delay_ms(1000);
    	 printf("连接到路由器:%d\n",atk_8266_send_cmd("AT+CWJAP=\"FAST666\",\"你的密码\"","OK",1000));//连接路由器
    	 printf("设置单链接:%d\n",atk_8266_send_cmd("AT+CIPMUX=0","OK",3500));
    	 atk_8266_get_wanip(ipbuf);
    	 printf("IP:%s\n",ipbuf);																														//端口号不要带引号,否则会有意想不到的错误。
    	 printf("连接到服务器:%d\n",atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"服务器公网IP\",8086","OK",3000));//连接到SERVER
    	 printf("开启透传模式:%d\n",atk_8266_send_cmd("AT+CIPMODE=1","OK",3500));//开启透传模式
    	 printf("开始透传:%d\n",atk_8266_send_cmd("AT+CIPSEND","OK",550));//开始透
     
     }
    	 
      void setServer(u8 *ipbuf)//设置ESP8266工作在STA模式的SERVER设置
     {
    	 //printf("AT恢复出厂设置:%d\n",atk_8266_send_cmd("AT+RESTORE","OK",1000));
    	 printf("AT测试:%d\n",atk_8266_send_cmd("AT","OK",500));
    	 printf("设置为STA模式:%d\n",atk_8266_send_cmd("AT+CWMODE=1","OK",500));//设置为STA模式
    	 printf("重启:%d\n",atk_8266_send_cmd("AT+RST","OK",500));//重启生效
    		delay_ms(1000);         //延时3S等待重启成功
    		delay_ms(1000);
    		delay_ms(1000);
    	 printf("连接到路由器:%d\n",atk_8266_send_cmd("AT+CWJAP=\"FAST666\",\"你的密码\"","OK",1000));//连接路由器
    	 printf("设置多链接:%d\n",atk_8266_send_cmd("AT+CIPMUX=1","OK",3500));
    	 printf("开启服务器:%d\n",atk_8266_send_cmd("AT+CIPSERVER=1,8086","OK",2000));
    	 atk_8266_get_wanip(ipbuf);
    	 printf("IP:%s\n",ipbuf);
    	 printf("开始传输:%d\n",atk_8266_send_cmd("AT+CIPSEND=3,25","OK",550));//开始透传
     }
     
      void setClientNonPierce(u8 *ipbuf)//STA Client 非透传模式
    	{
    	 printf("AT测试:%d\n",atk_8266_send_cmd("AT","OK",500));
    	 printf("设置为STA模式:%d\n",atk_8266_send_cmd("AT+CWMODE=1","OK",500));//设置为STA模式
    	 printf("重启:%d\n",atk_8266_send_cmd("AT+RST","OK",500));//重启生效
    		delay_ms(1000);         //延时3S等待重启成功
    		delay_ms(1000);
    		delay_ms(1000);
    	 printf("连接到路由器:%d\n",atk_8266_send_cmd("AT+CWJAP=\"FAST666\",\"你的密码\"","OK",1000));//连接路由器
    	 printf("设置单链接:%d\n",atk_8266_send_cmd("AT+CIPMUX=0","OK",3500));
    	 atk_8266_get_wanip(ipbuf);
    	 printf("IP:%s\n",ipbuf);																														//端口号不要带引号,否则会有意想不到的错误。
    	 printf("连接到服务器:%d\n",atk_8266_send_cmd("AT+CIPSTART=\"TCP\",\"服务器公网IP\",8086","OK",3000));//连接到SERVER
    	 //printf("开启透传模式:%d\n",atk_8266_send_cmd("AT+CIPMODE=1","OK",3500));//开启透传模式
    	 printf("允许数据传输:%d\n",atk_8266_send_cmd("AT+CIPSEND=8","OK",550));//允许数据发送,每次最大8字节
    	
    	}
    
    	
    
    #include "common.h"
    
    
    //4个网络模式
    const u8 *ATK_ESP8266_CWMODE_TBL[3]={"STA模式 ","AP模式 ","AP&STA模式 "};	//ATK-ESP8266,3种网络模式,默认为路由器(ROUTER)模式 
    //4种工作模式
    const u8 *ATK_ESP8266_WORKMODE_TBL[3]={"TCP服务器","TCP客户端"," UDP 模式"};	//ATK-ESP8266,4种工作模式
    //5种加密方式
    const u8 *ATK_ESP8266_ECN_TBL[5]={"OPEN","WEP","WPA_PSK","WPA2_PSK","WPA_WAP2_PSK"};
    /// 
    
    //usmart支持部分
    //将收到的AT指令应答数据返回给电脑串口
    //mode:0,不清零USART3_RX_STA;
    //     1,清零USART3_RX_STA;
    void atk_8266_at_response(u8 mode)
    {
    	if(USART3_RX_STA&0X8000)		//接收到一次数据了
    	{ 
    		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
    		printf("%s",USART3_RX_BUF);	//发送到串口
    		if(mode)USART3_RX_STA=0;
    	} 
    }
    //ATK-ESP8266发送命令后,检测接收到的应答
    //str:期待的应答结果
    //返回值:0,没有得到期待的应答结果
    //    其他,期待应答结果的位置(str的位置)
    u8* atk_8266_check_cmd(u8 *str)
    {
    	
    	char *strx=0;
    	if(USART3_RX_STA&0X8000)		//接收到一次数据了
    	{ 
    		USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符
    		strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
    	} 
    	return (u8*)strx;
    }
    //向ATK-ESP8266发送命令
    //cmd:发送的命令字符串
    //ack:期待的应答结果,如果为空,则表示不需要等待应答
    //waittime:等待时间(单位:10ms)
    //返回值:0,发送成功(得到了期待的应答结果)
    //       1,发送失败
    u8 atk_8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
    {
    	u8 res=0; 
    	USART3_RX_STA=0;
    	u3_printf("%s\r\n",cmd);	//发送命令
    	if(ack&&waittime)		//需要等待应答
    	{
    		while(--waittime)	//等待倒计时
    		{
    			delay_ms(10);
    			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
    			{
    				if(atk_8266_check_cmd(ack))
    				{
    					printf("ack:%s\r\n",(u8*)ack);
    					break;//得到有效数据 
    				}
    					USART3_RX_STA=0;
    			} 
    		}
    		if(waittime==0)res=1; 
    	}
    	return res;
    } 
    //向ATK-ESP8266发送指定数据
    //data:发送的数据
    //ack:期待的应答结果,如果为空,则表示不需要等待应答
    //waittime:等待时间(单位:10ms)
    //返回值:0,发送成功(得到了期待的应答结果)
    u8 atk_8266_send_data(u8 *data,u8 *ack,u16 waittime)
    {
    	u8 res=0; 
    	USART3_RX_STA=0;
    	u3_printf("%s\r\n",data);	//发送数据,为了方便云服务器接收加入了回车换行符
    	if(ack&&waittime)		//需要等待应答
    	{
    		while(--waittime)	//等待倒计时
    		{
    			delay_ms(10);
    			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
    			{
    				if(atk_8266_check_cmd(ack))break;//得到有效数据 
    				USART3_RX_STA=0;
    			} 
    		}
    		if(waittime==0)res=1; 
    	}
    	return res;
    }
    //ATK-ESP8266退出透传模式
    //返回值:0,退出成功;
    //       1,退出失败
    u8 atk_8266_quit_trans(void)
    {
    	while((USART3->SR&0X40)==0);	//等待发送空
    	USART3->DR='+';      
    	delay_ms(15);					//大于串口组帧时间(10ms)
    	while((USART3->SR&0X40)==0);	//等待发送空
    	USART3->DR='+';      
    	delay_ms(15);					//大于串口组帧时间(10ms)
    	while((USART3->SR&0X40)==0);	//等待发送空
    	USART3->DR='+';      
    	delay_ms(500);					//等待500ms
    	return atk_8266_send_cmd("AT","OK",20);//退出透传判断.
    }
    //获取ATK-ESP8266模块的AP+STA连接状态
    //返回值:0,未连接;1,连接成功
    u8 atk_8266_apsta_check(void)
    {
    	if(atk_8266_quit_trans())return 0;			//退出透传 
    	atk_8266_send_cmd("AT+CIPSTATUS",":",50);	//发送AT+CIPSTATUS指令,查询连接状态
    	if(atk_8266_check_cmd("+CIPSTATUS:0")&&
    		 atk_8266_check_cmd("+CIPSTATUS:1")&&
    		 atk_8266_check_cmd("+CIPSTATUS:2")&&
    		 atk_8266_check_cmd("+CIPSTATUS:4"))
    		return 0;
    	else return 1;
    }
    //获取ATK-ESP8266模块的连接状态
    //返回值:0,未连接;1,连接成功.
    u8 atk_8266_consta_check(void)
    {
    	u8 *p;
    	u8 res;
    	if(atk_8266_quit_trans())return 0;			//退出透传 
    	atk_8266_send_cmd("AT+CIPSTATUS",":",50);	//发送AT+CIPSTATUS指令,查询连接状态
    	p=atk_8266_check_cmd("+CIPSTATUS:"); 
    	res=*p;									//得到连接状态	
    	return res;
    }
    
    
    //获取Client ip地址
    //ipbuf:ip地址输出缓存区
    void atk_8266_get_wanip(u8* ipbuf)
    {
    	u8 *p,*p1;
    		if(atk_8266_send_cmd("AT+CIFSR","OK",500))//获取WAN IP地址失败
    		{
    			ipbuf[0]=0;
    			return;
    		}		
    		p=atk_8266_check_cmd("\"");
    		p1=(u8*)strstr((const char*)(p+1),"\"");
    		*p1=0;
    		sprintf((char*)ipbuf,"%s",p+1);	
    }
    
    
    u8 atk_8266_chaxun(u8 *cmd,u16 waittime)
    {
    	u8 res=0; 
    	USART3_RX_STA=0;
    	u3_printf("%s\r\n",cmd);	//发送命令
    	if(waittime)		//需要等待应答
    	{
    		while(--waittime)	//等待倒计时
    		{
    			delay_ms(10);
    			if(USART3_RX_STA&0X8000)//接收到期待的应答结果
    			{
    				
    					USART3_RX_STA=0;
    					printf("查询指令ack:%s\r\n",USART3_RX_BUF);
    					break;//得到有效数据
    			} 
    		}
    		if(waittime==0)res=1; 
    	}
    	return res;
    
    }
    
    

    5.服务器端
    服务器端则是用Socket建立TCP连接并监听指定端口的信息,然后连接MySQL数据库把数据写进去。这里只放Socket部分,jdbc以及其他部分见上传的资源

    package main;
    
    import java.io.BufferedReader;
    
    import java.io.BufferedWriter;
    
    import java.io.IOException;
    
    import java.io.InputStreamReader;
    
    import java.io.OutputStreamWriter;
    
    import java.net.ServerSocket;
    
    import java.net.Socket;
    
    import DB.DBTool;
    import changeCode.ChangeToUtf8;
    
     /**
      * 
      *双向通信,首先硬件端向服务器发送数据,然后服务器端在控制台输入响应敲回车发送给硬件端完成一次应答。 
      * 
      */
    
    public class DuplexTrans {
    
        public static void main(String[] args){
        	String sql;
            Socket socket = null;
            BufferedReader in = null;
            BufferedWriter out = null;
            BufferedReader br = null;
            try {
                //创建服务器端套接字:指定监听端口
                ServerSocket server = new ServerSocket(8086);
                //监听客户端的连接
                socket = server.accept();
                //获取socket的输入输出流接收和发送信息
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
                br = new BufferedReader(new InputStreamReader(System.in));
                while (true) {
                    //接收客户端发送的信息
                    String str = in.readLine();
                    str = ChangeToUtf8.toUTF8(str);//转换编码防止乱码
                    
                    String str2 = "";
                    //如果客户端发送的是“end”则终止连接 
                    if (str.equals("end")){
                        break;
                    }else if(str.equals("heartBeat")) {
                    	
                    }else {//非心跳包,发送反馈信息并写入数据库
                    	System.out.println("客户端发来:" + str);
                    	sql = "insert into iottest(content) values(?)";
                        DBTool.update(sql, str);
                        
                        str2 = br.readLine(); // 读到\n为止,因此一定要输入换行符!
                        out.write(str2 + "\n");
                        out.flush();
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                //关闭资源
                if(in != null){
                    try {
                        in.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(out != null){
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(br != null){
                    try {
                        br.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(socket != null){
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    
    

    6.测试
    在这里插入图片描述
    在左边远程连接窗口内可以看到控制台中输出了fromStm32,它是从本地的串口调试助手输入到USART1然后在到USART3,而USART3连接我的ESP8266。右边串口调试助手收到的fromServer是在服务器的eclipse的控制台输入的,数据到达ESP8266后发送给串口3,再发送到串口1让串口调试助手显示信息。

    我们再来看看此时云端数据库内有没有被写入信息:
    在这里插入图片描述
    可以看到服务器收到的信息已经被写入了云端的数据库

    完整代码:https://download.csdn.net/download/naruhina/12146142

    顺带一提,可以建一个web项目,2.5版本即可,代码调试完成后导出一个war包放到服务器端的Tomcat里运行,这样就不用在服务器端启动eclipse来看控制台输出了。

    展开全文
  • Arduino IDE 和 ESP8266 的扩展,用于设置设备 Wi-Fi、注册设备所有者并连接到 MTQQ 服务器。 依赖 PubSubClient 安装 只需下载 ZIP 并解压到Documents/Arduino/libraries目录。 如何 您创建新的 Arduino 项目并将...
  • ESP8266服务器发送数据

    千次阅读 2020-03-07 22:16:23
    esp8266是可以和服务器的端口建立tcp连接的,我们这里就和服务器的1234端口建立tcp连接,然后给服务器发送数据,然后服务器运行一个python程序接收这个端口的数据并处理 具体如何实现的放到代码注释里吧,看着代码好...

    如标题,这里介绍如何通过esp8266给服务器发送消息,然后服务器处理这些消息

    这里硬件方面的编译环境采用的arduinoIDE,服务端选择使用python3接收处理这些消息

    esp8266是可以和服务器的端口建立tcp连接的,我们这里就和服务器的1234端口建立tcp连接,然后给服务器发送数据,然后服务器运行一个python程序接收这个端口的数据并处理

    具体如何实现的放到代码注释里吧,看着代码好理解一些

    ESP8266方面代码:

    #include <ESP8266WiFi.h>
    const char* ssid = "MERCURY_5038";//wifi名称
    const char* password = "00001111";//wifi密码
    const char* host="47.102.159.133";//服务器公网ip
    WiFiServer server(80);//开启80端口
    
    void setup() {
      Serial.begin(115200);//开启串口监视器
      delay(10);
      Serial.print("Connecting to");
      Serial.println(ssid);
      WiFi.begin(ssid, password);//使用名称和密码链接wifi
      while (WiFi.status() != WL_CONNECTED) {//如果连接成功跳出循环,没成功则一直尝试连接
        delay(500);
        Serial.print(".");
      }
      Serial.println("");
      Serial.println("WiFi connected");
      
      // Start the server
      server.begin();//开启服务器
      Serial.println("Server started");
    
      // Print the IP address
      Serial.println(WiFi.localIP());//输出板子的ip
    }
    
    int value=0;
    void loop() {
      Serial.print("Connecting to");
      Serial.println(host);
      WiFiClient client;//tcp连接
      const int httpPort=1234;//端口号
      if(!client.connect(host,httpPort)){//连接失败
        Serial.println("connection failed");
        Serial.println(WiFi.localIP());
        return;
      }
      //向服务器发送请求
      client.print("HelloServer!");
      //读取返回值
      while(client.available()){
        String line=client.readStringUntil('\r');
        Serial.print(line);
      }
      Serial.println();
      Serial.println("closing connection");
      delay(5000);
    }
    

    服务器端:

    import threading
    import socket
    encoding = 'utf-8'
    BUFSIZE = 1024
    
    
    ##读取端口消息
    class Reader(threading.Thread):
        def __init__(self, client):##获取客户端
            threading.Thread.__init__(self)
            self.client = client
    
        def run(self):##持续接收消息并处理
            while True:
                data = self.client.recv(BUFSIZE)##接收字节消息
                if (data):
                    string = bytes.decode(data, encoding)##转化为字符串
                    print(string)##打印接收到的消息
                    self.client.send("helloClient")##回复消息
                else:
                    break
            # print("close:", self.client.getpeername())
    
    ##建立端口监听
    class Listener(threading.Thread):
        def __init__(self, port):
            threading.Thread.__init__(self)
            self.port = port
            self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
            self.sock.bind(("0.0.0.0", port))
            self.sock.listen(0)
    
        def run(self):
            print("listener started")
            while True:
                client, cltadd = self.sock.accept()
                Reader(client).start()
                # client.send("hello you!".encode())
                cltadd = cltadd
                # print("accept a connect")
    
    
    lst = Listener(1234)  # create a listen thread
    lst.start()  # then start
    

    这里服务器上的1234端口一定不要忘记打开

    在服务器运行python程序:
    在这里插入图片描述
    然后打开板子,上传程序
    在这里插入图片描述
    打开串口监视器
    可以看到这里已经在给服务器发送数据了
    在这里插入图片描述
    这时候服务端已经接收到了板子发来的数据并且打印了
    在这里插入图片描述
    这里只讲数据的接收和返回,下个例子讲一下写一个根据传感器数值来处理消息的小程序

    展开全文
  • esp8266开发板 DHT11温度传感器 面包板一个 首先你需要在任意一个云服务器上搭建好一个mysql数据库,或者你在本地电脑上搭建也可以。 接着你需要把硬件的接线连接好。 [外链图片转存失败,源站可能有防盗在这里插入!...

    这里写自定义目录标题

    本文主要讲述如何通过在云服务器上搭建Mysql数据库,然后利用MQTT协议,将采集数据上报并保存至数据库。

    采用的硬件有:
    esp8266开发板
    DHT11温度传感器
    面包板一个

    首先你需要在任意一个云服务器上搭建好一个mysql数据库,或者你在本地电脑上搭建也可以。
    接着你需要把硬件的接线连接好。
    [外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.csdnimg.cn/2pfZI10420184210192.(https://imgblog.csdnimg.cn/20210420184210192.png)]
    在这里插入图片描述
    DHT11温度传感器

    在这里插入图片描述
    esp8266开发板

    接线引脚:
    ESP32 --------------------- DHT11
    P19 --------------------- DATA
    3.5V --------------------- VCC
    GND --------------------- GND

    硬件部分完成之后,就可以将开发板上电刷代码进去,这里就只展示部分代码。

    void loop() {
      client.loop();
      unsigned long currentMillis = millis();
      // temperature and humidity data are publish every  20 second
      if (currentMillis - previousMillis >= 20000) {
        previousMillis = currentMillis;
        DHT.read(DHT11_PIN);//DHT11
        float temp = DHT.temperature;
        float hum = DHT.humidity;
        // json serialize
        DynamicJsonDocument data(256);
        data["temp"] = temp;
        data["hum"] = hum;
        // publish temperature and humidity
        char json_string[256];
        serializeJson(data, json_string);
        // {"temp":23.5,"hum":55}
        Serial.println(json_string);
        client.publish(topic, json_string, false);
        client.subscribe(topic);
      }
    }
    
    

    之后就可以打开串口,看到运行结果
    在这里插入图片描述
    然后登陆数据库,也可以看到相关的数据。
    在这里插入图片描述
    至此就完成了esp8266通过mqtt协议,将数据上传至mysql数据库。
    对了本次实验,用到了 emqx的 emq x cloud平台。
    通过这个平台直接与mysql 数据库相连。

    展开全文
  • Arduino+ESP8266上传数据到服务器

    万次阅读 2018-08-03 14:29:08
    ESP8266联网测试》,《ESP8266类库的使用——总体概述》,《ESP8266类库的使用——以getVersion(void)方法为例》和《bool ESP8266::recvFindAndFilter() 修改》中,我们系统的介绍了如何通过ESP8266连接WiFi以及...
  • Arduino+ESP8266接收服务器信息

    千次阅读 2018-08-09 14:47:19
    上一篇文章《Arduino+ESP8266上传数据到服务器》我们介绍了Arduino如何将数据上传到服务器上,与之相对应的是如何终端读取服务器的数据,在这一篇文章中我们将进行详细的讲解。 为了便于说明,我们先演示一下如何...
  • ESP8266AutoIOT 免责声明:我不知道如何正确编写c ++,因此您可能不应该使用此库。 摘要为基于ESP8266的开发板连接WiFi和管理http服务器的一些要求。
  • nosleep-安装在esp8266上以发布传感器数据,并在esp8266上托管具有传感器值sleep的Web服务器-安装在esp8266上以利用深度睡眠功能节省电池电量的睡眠-ds18b20-安装在esp8266上以利用深度睡眠并连接到ds18b20 i2c温度...
  • 初学者的终极教程,介绍如何通过Arduino连接和使用ESP8266,并使用Blynk应用程序对其进行编程以使LED闪烁。 硬件组件: Arduino UNO和Genuino UNO× 1 Espressif ESP8266 ESP-01× 1 软件应用程序和在线服务: Blynk ...
  • 一、 下载乐鑫官方文档:二、将example中的mqtt文件拷到工作目录下。三、 打开乐鑫官方推荐的开发环境。...MQTT_PORT是部署服务器时,系统分配的地址,如下图中的61613五、 编译工程。在进行配置选择是2 0 2 0 6六、
  • ESP8266上的UPnP Server 特征 通过UPnP宣布自己为Fnordlicht 基于 来自UPnP Lua脚本 如何使用 将init.lua.dist复制到init.lua并输入您的wifi凭据 将以http,init.lua和upnp.lua开头的所有文件上载到ESP。重新启动...
  • 该项目由 ESP8266 库和一个示例应用程序组成,该示例应用程序演示了如何使用该库创建通用串行 <=> wifi 桥接器。 库处理模块和接入点之间的连接配置。 它首先检查并通过复位初始化模块。 如果重置成功,则模块...
  • ESP8266实现http请求访问远程服务器

    万次阅读 多人点赞 2019-09-21 20:17:57
    之前用esp8266进行了一般的tcp连接,现在需要做一个可以直接访问远程服务器的项目,因此,研究了一下如何esp8266实现http协议,由于网上的资料很杂,而且好像都没有说的很清楚。这里做出一个总结,关于之前的命令...
  • 如何利用ESP8266模块实现远程控制

    千次阅读 2019-03-12 11:02:55
    ESP8266如何和MCU相连网上有大批大批的资料,因此不再赘述。在此主要阐述一下利用ESP8266,实现远程控制的思路。 你需要对服务器和开发软件有一定的了解。具体步骤如下: 1)手机发数据到云服务器,使用json数据的...
  • 背景知识视频教程 高级ESP32 使用NodeMCU(由ESP8266支持),MicroPython和PyCharm进行物联网 ...我们将研究中继模块的工作原理,如何将中继连接到ESP32或ESP8266板,以及如何构建网络服务器来远程控制中继。 前提 要
  • 我们还将教您如何使用ESP8266来利用Arduino,并且您将了解其库,文件系统,OTA更新等。 本书还提供了有关Web服务器的食谱,测试,与云的连接以及故障排除技术。 编程方面包括MicroPython以及如何利用它来开始使用...
  • 在本教程中,我将向您展示如何使用Google Map 制作GPS Web服务器,以显示带有ESP8266 和串行GPS 的GPS模块的位置。您可以通过Web浏览器从多个设备连接到现有Wi-Fi网络,并始终查看模块的位置。 请注意,由于我们将...
  • 前言: 之前使用过cc3200,想起来手头有个esp8266模块,配置好服务器模式玩玩,一般用...cc3200这里就不介绍了,本文主要说明 一下如何建立esp8266服务器。 把模块用串口连接到ttl转串口模块上,打开串口调试助...
  • 关于esp8266如何连接服务器的一些拙劣的思考通过flask加socket加共享内存? 基于esp8266-01s,从网页发送数据到云服务器关掉卧室灯。将自己的思路,心得记录在这里吧(真小白)
  • 案例简述:以WIFI模块(ESP8266)为开发对象,处在局域内网中的WIFI模块,连接到另外一个局域内网的TCP服务器,形成WIFI模块和服务器之间通信。本文先以电脑控制WIFI模块的连接,熟悉AT指令的使用,再通过编程手段,...
  • 本指南展示了如何在两个ESP32板之间设置HTTP通信,以通过Wi-Fi在不连接互联网(路由器)的情况下交换数据。 简而言之,您将学习如何使用HTTP请求将数据从一个板发送到另一个板。 ESP32开发板将使用Arduino IDE进行...
  • let mqttClient = mqtt.connect('wss://www.domain.cn:443/mqtt',options);
  • 基于ESP8266的MQTT客户端-服务器搭建、通讯测试

    万次阅读 多人点赞 2018-05-28 18:39:10
    本文主要讲解如何使用ESP8266 WiFi模块作为MQTT客户端,并在本地电脑搭建MQTT服务器,实现客户端—服务器之间的相互通讯,发布—订阅主题的实验。 MQTT是IBM推出的一种针对移动终端设备的基于TCP/IP的发布/预订协议...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

esp8266如何连接服务器