Arduino与Proteus仿真-WiFi网络仿真环境搭建 Arduino与Proteus网络(WiFi)仿真环境搭建 文章目录
本文将详细介绍如何在Proteus搭建Arduino的WiFi仿真环境。
1、软件准备 1)Arduino IDE或 VSCode + PlatformIO
2)Proteus电路仿真软件
3)Arduino的Proteus仿真模型库,ArduinoLibraryforProteusV2.0.zip
4)串口调试工具软件
2、硬件准备 1)WiFi模块:ESP01-S模块或其他带标准AT固件的WiFi模块,本文使用ESP01-S模块。
2)串口(TTL)转USB模块。该模块用于连接ESP01-S的串口引脚并通过USB接口连接到电脑。
3、仿真电路原理图
在仿真原理图中,我们通过一个COMPIM组件与PC主机的串口连接起来。请注意,该组件与Arduino的USART接线:
COMPIM组件的RXD与TXD分别与RX1和TX1连接,即连接到Arduino的Serial1端口。另外,我们使用一个虚拟串口仿真组件作为调试输出。COMPIM的配置如下(双击COMPIM组件):
配置中的Physical port为电脑中的物理串口,为ESP01-S连接到电脑中显示的串口。当ESP01-S连接到电脑后,在电脑的设备管理器中可以查看:
配置中的Physical Baud Rate为物理串口通信的波特率,ESP01-S默认为115200。(请查看使用的WiFi模块相关说明)
配置中的Physical Data Bits为物理串口通信的数据位
配置中的Physical Parity为物理串口的奇偶校验位
配置的中Virtual Baud Rate为虚拟串口通信的波特率,即为Arduino的串口波特率,一般与物理串口的配置一样。
其他虚拟串口的配置请配置与物理串口一致。
4、仿真代码实现 示例代码使用到如下开源库:
该库与Arduino的WiFi 库和Ethernet 类似,因此使用起来非常方便。下面将实现如何连接WiFi:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 #include <Arduino.h> #define DEBUG_ESP8266_AT_WEBSERVER_PORT Serial // 日志输出 #define _ESP_AT_LOGLEVEL_ 1 #define ESP_AT_USE_AVR 1 #define BOARD_TYPE "AVR Mega2560" #define EspSerial Serial1 #define BOARD_NAME BOARD_TYPE #define MULTIPLY_FACTOR 1 #include "ESP8266_AT_WebServer.h" char ssid[] = "*************"; char pass[] = "*************"; int status = WL_IDLE_STATUS; // WiFi状态 int reqCount = 0; void printCurrentNet(); void printWifiData(); void setup() { // 初始化串口 Serial.begin(115200); // 初始化ESP01-S模块串口 Serial1.begin(115200); // 初始化ESP01-S模块 WiFi.init(&Serial1); // 检查ESP01模块是否已经连接 if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); } // 连接网络 while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); // 连接到WiFi热点 status = WiFi.begin(ssid, pass); } Serial.println("You're connected to the network"); } void loop() { Serial.println(); printCurrentNet(); printWifiData(); delay(10000); } void printWifiData() { // 打印IP地址 IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // 打印MAC地址 byte mac[6]; WiFi.macAddress(mac); char buf[20]; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]); Serial.print("MAC address: "); Serial.println(buf); } void printCurrentNet() { // 打印当前网络信息 Serial.print("SSID: "); Serial.println(WiFi.SSID()); byte bssid[6]; WiFi.BSSID(bssid); char buf[20]; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", bssid[5], bssid[4], bssid[3], bssid[2], bssid[1],bssid[0]); Serial.print("BSSID: "); Serial.println(buf); // WiFi信号强度 long rssi = WiFi.RSSI(); Serial.print("Signal strength (RSSI): "); Serial.println(rssi); }
代码如何工作?
1)导入依赖库头文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <Arduino.h> #include <Arduino.h> #define DEBUG\_ESP8266\_AT\_WEBSERVER\_PORT Serial // 日志输出 #define \_ESP\_AT\_LOGLEVEL\_ 1 #define ESP\_AT\_USE\_AVR 1 #define BOARD\_TYPE "AVR Mega2560" #define EspSerial Serial1 #define BOARD\_NAME BOARD\_TYPE #define MULTIPLY\_FACTOR 1 #include "ESP8266\_AT\_WebServer.h"
2)声明连接WiFi热点的相关变量
1 2 3 4 5 char ssid[] = "\*\*\*\*\*\*\*\*\*\*\*\*\*"; char pass[] = "\*\*\*\*\*\*\*\*\*\*\*\*\*"; int status = WL_IDLE_STATUS; // WiFi状态 int reqCount = 0;
3)在setup函数中
初始化调试串口和WiFi串口
1 2 3 4 5 // 初始化串口 Serial.begin(115200); // 初始化ESP01-S模块串口 Serial1.begin(115200);
初始化WiFi模块
检查WiFi模块是否连接
1 2 3 4 5 if (WiFi.status() == WL_NO_SHIELD) { Serial.println("WiFi shield not present"); while (true); }
连接WiFi热点
1 2 3 4 5 6 7 while ( status != WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID: "); Serial.println(ssid); // 连接到WiFi热点 status = WiFi.begin(ssid, pass); }
4)打印WiFi连接信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 void printWifiData() { // 打印IP地址 IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); // 打印MAC地址 byte mac[6]; WiFi.macAddress(mac); char buf[20]; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", mac[5], mac[4], mac[3], mac[2], mac[1], mac[0]); Serial.print("MAC address: "); Serial.println(buf); }
5)打印当前WiFi网络信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 void printCurrentNet() { // 打印当前网络信息 Serial.print("SSID: "); Serial.println(WiFi.SSID()); byte bssid[6]; WiFi.BSSID(bssid); char buf[20]; sprintf(buf, "%02X:%02X:%02X:%02X:%02X:%02X", bssid[5], bssid[4], bssid[3], bssid[2], bssid[1],bssid[0]); Serial.print("BSSID: "); Serial.println(buf); // WiFi信号强度 long rssi = WiFi.RSSI(); Serial.print("Signal strength (RSSI): "); Serial.println(rssi); }
6)在loop函数中,调用printWifiData和printCurrentNet实现输出
1 2 3 4 5 6 7 8 9 void loop() { Serial.println(); printCurrentNet(); printWifiData(); delay(10000); }
5、仿真结果
从仿真结果可以知道,Arduino仿真器已经和WiFi模块正常通信。
文章来源: https://iotsmart.blog.csdn.net/article/details/132962911
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!