概述
目录
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文件
- 引入头文件和一些定义
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 OKrn");
}
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_Publishrn");
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[ ]改成自己的主题
对其进行总结:
要修改的地方有三个:
- esp8266.c文件中ESP8266_WIFI_INFO,参照格式修改成所需要连接的WIFI即可,使用巴法云,ESP8266_ONENET_INFO不用修改
- onenet.c文件中DEVID改成自己巴法云的私钥
- 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上控制单片机并读取数据,不足之处请指正!
本文章文件下载地址
最后
以上就是简单翅膀为你收集整理的ESP-01SWIFI模块从0到1WIFI模块的抉择ESP-01SWIFI模块上手使用应用篇的全部内容,希望文章能够帮你解决ESP-01SWIFI模块从0到1WIFI模块的抉择ESP-01SWIFI模块上手使用应用篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复