背景

楼主最近做了一个基于STM32和ESP8266的简易WIFI信号检测仪,可以检测到当前连接WIFI的信号强度,并且在OLED屏幕显示,并且每隔2秒刷新

硬件准备

STM32最小系统开发板
ESP8266模块
OLED屏幕

硬件连接

PB6(I2C1_SCL)
PB7(I2C1_SDA)
PA9 USART1_TX ESP8266_RX
PA10 USART1_RX ESP8266_TX
PA2 USART2_TX 串口2,用来看数据和发送的命令
PA3 USART2_RX

代码逻辑

1.ESP8266部分
ESP8266相信大家都玩过,这次的小项目就是把ESP8266设置为station模式,连接到手机热点,通过AT命令获取到RSSI值。从控制单片机连接ESP8266,并且发送命令连接到WIFI,不难,难是怎么获取到信号强度RSSI。
一开始我是用另一个串口连接到电脑看有没有成功连接到热点WIFI,并且获取信号强度RSSI。到了周末提取RSSI却是难到我(我比较笨,上个月才开始自己写代码),怎么把串口接收到的字符型数组保存为整数型尼,下面这篇文章帮到我了
https://blog.csdn.net/qq_44515486/article/details/124273457?ops_request_misc=&request_id=&biz_id=102&utm_term=stm32%E4%B8%B2%E5%8F%A3%E5%8F%98%E6%95%B4%E6%95%B0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-4-124273457.142v40pc_rank_v36,185v2tag_show&spm=1018.2226.3001.4450
按照他的方法,成功提取到RSSI

上代码!!!!

#include "esp8266.h"
#include "usart.h"
#include "stm32f10x.h"
#include "sys.h"
#include "delay.h"
#include "usart2.h"
#include "string.h"
#include <stdio.h>
#include <stdlib.h>//ESP8266初始化
u32 len=0;
u32 t=0;
u8  rssi[200];             //存放RSSI的数值char *str_xx=",-";        //用来获取RSSI
char *loc;
char *token;
int RSSI=0;void esp8266_start_trans(void)
{//设置ESP8266为station模式,连接到ESP8266的热点,这个不懂的伙伴可以学习下ESP8266的玩法esp8266_send_cmd("AT+CWMODE=1","OK",50);esp8266_send_cmd("AT+RST","OK",50);delay_ms(1000);         delay_ms(1000);delay_ms(1000);esp8266_send_cmd("AT+CWQAP","OK",50);esp8266_send_cmd("AT+CWJAP=\"ESP8266\",\"12345678\"","OK",1000);   RSSI=1;esp8266_send_cmd("AT+CWJAP?","OK",50);//这里用来获取RSSI的数值u3_printf("RSSI=%d\r\n",RSSI); //打印到串口2
}
//这里的函数就是一个发送AT命令的函数
*cmd是命令,ack是收到的应答,waittime是等待时间
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{u8 res=0; USART_RX_STA=0;printf("%s\r\n",cmd); //发送给ESP8266u3_printf("%s\r\n",cmd);  //电脑串口打印if(ack&&waittime)       {       while(--waittime)   {delay_ms(10);if(USART_RX_STA&0X8000)//接收到ESP8266返回的数据{     //下面这段函数用来打印ESP8266返回的数据len=USART_RX_STA&0x3fff;/for(t=0;t<len;t++){rssi[t]=USART_RX_BUF[t]; USART_SendData(USART2, USART_RX_BUF[t]);while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);}//重点是这一段代码,用来提取返回值的RSSIif(RSSI){loc=strstr((char*)USART_RX_BUF,str_xx);token = strtok(loc,str_xx); RSSI = atoi((char*)token);}u3_printf("\r\n\r\n");//²åÈë»»ÐÐ          USART_RX_STA=0 } }if(waittime==0)res=1; }return res;
}```c
在这里插入代码片

主函数

主函数就没什么好讲的,不断刷新RSSI的数值,并且显示

 int main(void){ extern  u8  RSSI;delay_init();     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);   EXTIX_Init();          uart_init(115200);   usart2_init(115200);                   esp8266_start_trans();                        OLED_Init();      //³õʼ»¯OLED  OLED_ColorTurn(0);//0Õý³£ÏÔʾ£¬1 ·´É«ÏÔʾOLED_DisplayTurn(0);//0Õý³£ÏÔʾ 1 ÆÁÄ»·­×ªÏÔʾwhile(1){LED0=!LED0; OLED_Clear();     OLED_ShowString(10,16,"WIFI:ESP8266",16);  OLED_ShowString(10,32,"Rssi: -  dbm",16);  OLED_ShowNum(68,32,RSSI,2,16);OLED_Refresh();  delay_ms(5000);esp8266_send_cmd("AT+CWJAP?","OK",50);u3_printf("RSSI=%d\r\n",RSSI);   }}
在这里插入代码片

演示

完整的演示效果可以去我的B站看,求一键3连
https://www.bilibili.com/video/BV1ug411k7MA/



代码下载连接
链接:https://pan.baidu.com/s/18QHUYnECFQdArJ8CEXhqWQ
提取码:3sjt

基于STM32和ESP8266的WIFI信号检测仪相关推荐

  1. 基于stm32和ESP8266实现wifi模块smartlink功能以及TCP连接

    一直想把wifi模块和stm32连接起来,但是网上找了很久,并没有C语言相关的库,只有基于arduino的ESP8266 C++库,这个库是没办法直接给stm32使用的,所以自己动手丰衣足食,自己手动 ...

  2. 基于STM32与ESP8266的太空人WiFi天气时钟(代码开源)

    前言:本文为手把手教学ESP8266著名开源项目--太空人WiFi天气时钟,不同的是本次项目采用的是STM32作为MCU.两者开发过程中有因为各自芯片的特点(时钟频率,内存大小等),导致开发程序大不相 ...

  3. 基于STM32的ESP8266天气时钟(2)--------MCU获取天气数据

    前言:上一章节我们通过串口调试助手,成功获取到天气数据,这一节我们将通过MCU的串口发送.接收功能,实现MCU获取天气数据. 传送门:基于STM32F103的网络天气时钟(1)---------通过串 ...

  4. 基于STM32的ESP8266模块控制多路继电器

    基于STM32的ESP8266模块控制多路继电器 1.视频讲解 基于STM32单片机ESP8266物联网阿里云MQTT多路继电器控制 物联网视频教程STM32+ESP8266 2.实物设计 ESP82 ...

  5. 基于STM32的ESP8266使用教程(一)

    关于为什么要写这篇文章,因为之前在做一个项目的时候需要使用WIFI模块.X宝搜WIFI模块的时候推荐ESP8266这个模块,说是价格便宜.使用方便.但是在使用的过程中发现的确使用方便(因为是基于AT指 ...

  6. 基于STM32的ESP8266使用教程(二)

    写在前面:博主懒癌晚期,考研结束之后想着HAPPY一下,结果把这事忘了,开学了又有很多事情要干,直到昨天一博友留言(有邮件提醒),才想起有这么个坑要填,特来填坑.相关软件程序请参考"基于ST ...

  7. 3、★☛基于STM32的手机通过wifi控LED灯√♠★

    3.★★☞基于STM32的手机通过wifi控LED灯

  8. stm32超声波扫频_基于STM32的超声波发生器扫频信号源的实现

    基于 STM32 的超声波发生器扫频信号源的实现 张加岭,李善波,侯颖钊,赵 杰 [摘 要] 摘要:扫频信号源采用以 STM32F103 单片机为核心,实现高精度锯 齿波扫频.由于超声波电源换能器串联 ...

  9. 基于STM32+FreeRtos+ESP8266+MQTT连接阿里云

    基于STM32+FreeRtos+DHT12+ESP8266+MQTT连接阿里云 1.概述 2.实现步骤 2.1.MQTT.fx模拟器与阿里云通信 2.2.STM32与阿里云通信 3. 搭建云平台 3 ...

  10. 阿里云MQTT + STM32 + MQTT + ESP8266 01S WIFI 实现远程继电器控制开关和采集温湿度 登录阿里云网站,进入物联网云平台

    单片机型号: STM32F103C8T6 WIFI型号: ESP8266 01S WIFI 运行协议: TCP STM32运行MQTT协议 登录阿里云网站,进入物联网云平台 进入阿里云官网并登录账号后 ...

最新文章

  1. XSD标准架构-----xsd:element 元素详解
  2. 浅析js中的arguments
  3. 网络服务-RSYNC
  4. flask使用SQLAlchemy操作mysql
  5. php中一个经典的!==的用法
  6. Spark Scala语言学习系列之完成HelloWorld程序(三种方式)
  7. C#和Java的代码转换工具(开源)CSharpJavaMerger Framework
  8. python中float输入文字_为什么Python的float对于一些很长的输入会引发ValueError?
  9. 【bzoj1050】[HAOI2006]旅行comf 并查集
  10. Hadoop1.0.4伪分布式安装
  11. tuxedo中间件tmadmin的命令使用
  12. LabVIEW编程LabVIEW开发Agilent 4294A 例程与相关资料
  13. 小型微利企业税收筹划策略探析
  14. Oracle TFA日志收集工具简介
  15. Sping AOP 源码解析(一、动态 AOP 自定义标签 aop:aspectj-autoproxy)
  16. 关于职场,你需要不断拼搏
  17. Python入门学习小记:100以内素数/质数之和
  18. 用户画像标签数据存储之Hive存储
  19. 钉钉显示服务器升级是什么意思,服务器升级自动通知钉钉群并报告环境功能
  20. MATLAB7程序在哪,这个程序在MATLAB 7.0中为什么运行不起来 那个工具箱怎么装

热门文章

  1. CentOS 编译运行 DPDK 19.11 流程
  2. m序列产生原理及其性质
  3. 【安全】什么是0day漏洞?
  4. 摩托罗拉linux软件下载,摩托罗拉手机软件驱动下载
  5. C/C++编码:无锁编程
  6. SQL Server 2000升级sp4补丁的时候出现“以前进行的程序安装创建了挂起的文件操作”的错误!...
  7. 开放式虚拟仿真实验服务器,润尼尔开放式虚拟仿真实验教学及资源共享平台
  8. IOT物联网技术架构_物联网系统架构正式上架
  9. Android studio xpose的使用
  10. HMM(隐马尔可夫模型)