自建基于STM32与ESP8266的物联网服务器

本文详细介绍了如何使用STM32开发板和ESP8266模块创建一个物联网服务器,包括硬件连接、阿里云服务器配置、端口开放、软件安装、代码编写以及测试步骤。通过TCP/IP协议实现设备与服务器的数据交互,并将数据存储到云端数据库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这篇文章中我将从头教大家如何自己做一个物联网的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.youkuaiyun.com/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"</
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值