ESP-01SWIFI模块从0到1

发布于:2023-01-20 ⋅ 阅读:(378) ⋅ 点赞:(0)

目录

WIFI模块的抉择

ESP-01SWIFI模块上手使用

连接

工程的创建

应用篇

控制部分

传输数据部分


WIFI模块的抉择

较常用的WIFI模块为:NodeMCU ESP8266,ESP-01S这两种,两者比较相对容易使用的是ESP-01S,前者需要用Arduino进行编译,而后者只需要用我们常用的keil5就可以编译。NodeMCU ESP8266可单独作为一个开发板来使用,而ESP-01S只是一个简单的WIFI模块。以下将围绕ESP-01S来展开教程。

ESP-01SWIFI模块上手使用

连接

ESP-01S引脚如图

红色方框框出引脚为必须连接的引脚。同时注意圆圈圈出部分,模块3.3V的电源一定不能由USB转TTL模块提供,它带不动。

ESP-01S属于新版,相较与ESP-01模块它底部有引脚名标记,且去掉了电源指示灯,所以ESP-01S上电后只有蓝灯会闪烁一下,不会有其他现象发生。并且ESP-01S在串口通信时不需要接使能脚,而ESP-01需要拉高使能脚。

下面以STM32正点原子精英开发板为例开启应用教程

所使用到的文件均会上传

工程的创建

在【正点原子】精英STM32F103开发板资料 资料盘(A盘) 程序源码(库函数版本)中复制粘贴个跑马灯实验工程进行修改

WIFI模块所需文件的导入

  • 打开工程,创建工程文件OneNET将点C文件导入

 

 所需导入的点C文件如图红圈所示

  • 引入文件包括路径

  • 将SYSTEM文件夹里的usart文件更换为WIFI专用usart文件 

注意:更替前后文件夹名称未变,若未更替会报错!!!

更替后的usart.h文件

  • 更改main.c文件
  1. 引入头文件和一些定义

      2.写个初始化文件(后续加入的功能初始化写进这里面,此为个人习惯,大家可自由发挥)

       

 3.编写主函数

 

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "hcsr04.h"
#include "SysTick.h"

//网络协议层
#include "onenet.h"
//网络设备
#include "esp8266.h"
//C库
#include <string.h>

const char *sub_topics[] = {"hjc225sub"};			//单片机接收数据主题
const char pub_topics[] = {"hjc225pub"};			//单片机发送数据主题


unsigned short timeCount = 0;	//发送间隔变量	
unsigned char *dataPtr = NULL;
float lenth;
u8 adcx; 
char PUB_BUF[256];   //上传数据buf
char* LED_BUF;   //led状态上传buf

void Hardware_Init(void)
{
	
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);	//中断控制器分组设置
	
	LED_Init();		  	//初始化与LED连接的硬件接口						 //LED0=0;亮灯	

	delay_init();	    //延时函数初始化	

	HCSR04_Init();
	
	Usart1_Init(115200);							//串口1,打印信息用
	
	Usart2_Init(115200);							//串口2,驱动ESP8266用

	
	UsartPrintf(USART_DEBUG, " Hardware init OK\r\n");
	
}
int main(void)
 {	
	Hardware_Init();				//初始化外围硬件
ESP8266_Init();					//初始化ESP8266
while(OneNet_DevLink())			//接入OneNET
	delay_ms(300);	 //延时300ms
	
	OneNet_Subscribe(sub_topics, 1);
	
	 while(1)
	{
				if(timeCount%100 == 0)									//处理数据
				{
					if(LED0==0){
						LED_BUF="1";
					}
					else if(LED0==1){
						LED_BUF="0";

					}
				}

		if(++timeCount >= 185)									//发送间隔10s(400)(还需计算)
		{
			UsartPrintf(USART_DEBUG, "OneNet_Publish\r\n");
			UsartPrintf(USART_DEBUG, "距离:%.1f",lenth);
			lenth=Hcsr04GetLength();
			sprintf(PUB_BUF,"#%.1f#%s",lenth,LED_BUF);
			
			OneNet_Publish(pub_topics, PUB_BUF);

			timeCount = 0;
			ESP8266_Clear();
		}
		
		dataPtr = ESP8266_GetIPD(3);  //执行此行需15ms
		if(dataPtr != NULL)
			OneNet_RevPro(dataPtr);
		delay_ms(10);

	}
			

 }

以上便是最初始的整个工程,下面讲解所需修改的部分

esp8266.c文件

 onenet.c文件

mian.c文件

这三处是必须修改的地方

在esp8266.c文件ESP8266_WIFI_INFO,参照格式修改成所需要连接的WIFI即可

下面对后面几处进行详解

使用WIFI模块那避免不了要使用到MQTT服务器,何为MQTT,大家可以参考我的一篇文章。MQTT服务器有很多,如阿里云、腾讯云、机智云、巴法云、EMQ服务器,通过我学习WIFI的经验,为了减少弯路,我推荐大家使用巴法云,使用其他的难免不了要搭建自己的服务器,耗时耗力,还需要花钱,过程十分繁琐,有能力者可以去尝试。

使用巴法云则esp8266.c文件中的ESP8266_ONENET_INFO不用修改

巴法云官网链接bemfa.com,进去之后用邮箱注册,便可使用巴法云MQTT服务器,注意我们这里使用的是MQTT设备云,从下图我们可以看到,注册登录后,我们有我们专属的私钥,可新建自己的主题。这里可以参考我一篇文章的应用部分MQTT协议介绍与应用

在onenet.c文件中DEVID改成自己的私钥,mian.c文件中sub_topics[ ] 、pub_topics[ ]改成自己的主题

对其进行总结:

要修改的地方有三个:

  1. esp8266.c文件ESP8266_WIFI_INFO,参照格式修改成所需要连接的WIFI即可,使用巴法云,ESP8266_ONENET_INFO不用修改
  2. onenet.c文件中DEVID改成自己巴法云的私钥
  3. mian.c文件中sub_topics[ ] 、pub_topics[ ]改成自己的主题

以上便是基础设置的内容

应用篇

应用篇将分为控制部分和传输数据部分来进行讲解

控制部分:将以点亮【正点原子】精英STM32F103开发板上的LED灯为例,带大家学会用客户端软件MQTT.fx控制【正点原子】精英STM32F103开发板

传输数据部分:以超声波模块为例,将所测得数据上传

注意:ESP-01S的RX接开发板上的PA2,TX接PA3

控制部分

只需要修改onenet.c文件即可,需要注意的是,记得引入对应的头文件,如:我们这里要控制LED灯,则需在onenet.c文件中引入led.h文件

 需要修改的部分如图中框选,sub_buf是接收发来指令的数组,我们从客户端软件MQTT.fx发送1,则会打开LED灯,若想增加更多指令,添加执行条件和执行内容即可

如下图框选部分,是执行读取指令的代码,注意不要轻易删改 

 下面进行演示

接好ESP-01S

 将代码烧录进单片机,然后上电,打开MQTT.fx,连接服务器,输入单片机接收数据主题(这里是hjc225sub,注意改成自己的)

输入指令,点击Publish发布

即可点亮LED灯

传输数据部分

导入超声波模块驱动文件

 修改main.c文件

 初始化超声波模块

 将超声波测量数据和LED状态拼接在一个数组内发送到客户端

将写好的代码烧录,并接好超声波模块(这里是超声波模块的Echo口接单片机的PB10,Tring接PB11,VCC接5V,GND接GND)

 上电运行程序

 以上便是ESP-01SWIFI模块的基础应用,后续还会更新在小程序和APP上控制单片机并读取数据,不足之处请指正!

本文章文件下载地址

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到