主要内容

无线网络信号强度与ESP32 Arduino IDE

这个例子展示了如何使用ESP32的无线网络功能将数据发布到ThingSpeak™。ESP32记录并记录所连接无线网络的信号强度。按下板子上的一个按钮,测量三种无线网络信号强度,并将平均结果张贴到ThingSpeak频道。该设备还会发布一个计数器值,这样你就可以跟踪测量结果。

您可以生成一个热图覆盖图像来表示无线信号强度。这张图片显示了无线信号强度,凌驾于办公室平面图之上,以及用来生成热图的数据。要生成热图覆盖,请参见创建热图叠加图像

先决条件

ESP32 Arduino内核和IDE设置

首先,为ESP32设置Arduino Core。指教,请参阅用于ESP32的Arduino Core安装说明.您可以使用“Blink”示例草图在ESP32上测试您的Arduino®设置文件>例子>01.基础知识.定义LED_BUILTIN引脚作为引脚5使用板载LED。

ThingSpeak设置

使用ThingSpeak,则必须拥有用户帐户和已创建的通道。每个通道最多有8个数据字段、3个位置字段和1个状态字段。如果你有一个免费账户,你可以每15秒向ThingSpeak发送数据。

1)注册新账户,如注册ThingSpeak吧

2)通过选择创建通道渠道>我的频道>新渠道

3)启用字段1和字段2。

4)输入RSSI作为字段1的名称,并且计数器作为字段2的名称。

5)命名频道。例如,ESP32信号强度

保存你的频道。

7)注意写入API键API密钥选项卡。

示意图和联系

要完成这个示例,您只需要安装在Sparkfun提供的ESP32开发套件中的设备。然而,使用便携式微型usb兼容电池可以使您的设备便携,便于测量。

程序的ESP32

使用Arduino IDE为您的设备创建应用程序。

1)使用micro-USB线缆将ESP32连接到计算机,等待连接成功。

2)在Arduino IDE中选择ESP32 Dev Module板和正确的COM端口。

3)创建应用。在Arduino IDE中打开一个新窗口并保存文件。添加代码部分中提供的代码。编辑您的通道的无线网络SSID、密码和写入API密钥。

要将结果可视化,您可以使用ThingSpeak的无线网络优势生成办公室地图的叠加图像。由于简化的硬件只记录信号强度,您必须手动记录每个点的坐标。您可以使用大多数图形编辑程序来查找图像上的像素坐标。关于生成热图的详细信息请参见创建热图叠加图像

代码

1)首先定义库、定义和全局变量。输入您的无线网络SSID和密码,以及您的通道的写入API密钥。

#include  #define buttonPin 0 #define LEDPin 5 //网络信息char* ssid = "WIFINAME";const char* password = "PPPPPPPPP";// ThingSpeak设置char server[] = "api.thingspeak.com";String writeAPIKey = "XXXXXXXXXXXXXXXX";// const const unsigned long postingInterval = 15L * 1000L;//全局变量unsigned long lastConnectionTime = 0;int measurementNumber = 0;

2)在设置中,启动串行输出,初始化输入和输出引脚,连接到无线网络。

无效的设置(){Serial.begin (115200);pinMode (buttonPin、输入);pinMode (LEDPin、输出);connectWiFi ();}

3)在主回路中,首先确保有无线连接,然后检查是否有按钮按下。如果按下按钮,请检查是否经过了足够的时间来发布数据。检测后按下按钮测量无线网络强度,然后调用HTTP发布功能。

void loop(){const int numberPoints = 7;浮动wifiStrength;//在每个循环中,确保有一个Internet连接。if (WiFi.status() != WL_CONNECTED) {connectWiFi();} //如果检测到按下按钮,将数据写入ThingSpeak。if (digitalRead(buttonPin) == LOW){if (millis() - lastConnectionTime > postingInterval) {blinkX(2,250);//验证按下按钮。wifiStrength = getStrength (numberPoints);httpRequest (wifiStrength measurementNumber);blinkX (measurementNumber, 200); // Verify that the httpRequest is complete. measurementNumber++; } } }

4)将您的设备连接到无线网络connectWiFi函数。连接成功后,设备快速闪5次。

void connectWiFi(){while (WiFi.status() != WL_CONNECTED);开始(ssid、密码);延迟(3000);} //显示连接成功的通知。以“连接”);blinkX (50);}

连接到ThingSpeak服务器,并为HTTP POST命令建立数据字符串httpRequest函数。

void httpRequest(float field1Data, int field2Data) {WiFiClient客户端;如果客户机(!。(服务器,80)){串行连接。println(“连接失败”);lastConnectionTime =米尔斯();client.stop ();返回;} else{//创建要发送到ThingSpeak的数据字符串。String data =" fieldd1 =" + String(field1Data) + "&field2=" + String(field2Data); / /输入字段//显示如何包括额外的字段数据在http post // post数据到ThingSpeak。 if (client.connect(server, 80)) { client.println("POST /update HTTP/1.1"); client.println("Host: api.thingspeak.com"); client.println("Connection: close"); client.println("User-Agent: ESP32WiFi/1.1"); client.println("X-THINGSPEAKAPIKEY: "+writeAPIKey); client.println("Content-Type: application/x-www-form-urlencoded"); client.print("Content-Length: "); client.print(data.length()); client.print("\n\n"); client.print(data); Serial.println("RSSI = " + String(field1Data)); lastConnectionTime = millis(); delay(250); } } client.stop(); }

6)进行多次测量并将平均值返回给主循环getStrength

//测量Wi-Fi强度并返回平均结果。int getStrength(int points){长rssi = 0;long averageRSSI = 0;for (int i=0;i < points;i++){rssi += WiFi.RSSI();延迟(20);} averageRSSI = rssi/点数;返回averageRSSI;}

7)最后,使用theblinkX功能,使设备LED闪烁。闪烁允许板与您通信时,它没有通过USB连接到计算机。

//使LED闪烁可变次数和可变延迟。void blinkX(int numTimes, int delayTime){for (int g=0;g < numTimes;g++){//打开LED并等待。digitalWrite (LEDPin、高);延迟(时延);//关闭LED并等待。digitalWrite (LEDPin、低);延迟(时延);} }

另请参阅

|