ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwi
<iframe allowfullscreen="true" data-mediaembed="bilibili" frameborder="0" id="JqOAznqX-1727073194394" src="https://player.bilibili.com/player.html?aid=113185407370185"></iframe>ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwi
什么是迷宫?
不合适的学习和研究方式,花费大量的精力和时间,收效甚微。
这种又称之为学习和研究的“黑洞”
出路
从传统到现代:降本增效!
ESP32能否一小时入门,一下午精通。
数码管0-9循环显示 10s实现
4s
9s
传统方式效率低
安装Arduino
需要硬件ESP32然后调试
基础案例
LED闪烁
LED亮
这段代码是用于Arduino平台的简单程序,用来控制连接到Arduino板上指定引脚的一个LED灯,使其以0.5秒的间隔闪烁。下面是代码的逐行解释:
#define LED 2
- 这行代码定义了一个常量
LED
,其值为2。这意味着在后面的代码中,所有出现LED
的地方都将被替换为数字2。这里,2是Arduino板上LED连接的引脚编号。
- 这行代码定义了一个常量
void setup() {
setup()
函数在Arduino板电源启动后只执行一次。它通常用于设置引脚模式、初始化库等。
pinMode(LED, OUTPUT);
- 这行代码设置引脚2(即之前定义的
LED
)为输出模式。这是必需的,因为要控制LED(即发送信号使之开关),引脚必须被配置为输出。
- 这行代码设置引脚2(即之前定义的
}
- 这标志着
setup()
函数的结束。
- 这标志着
void loop() {
loop()
函数在setup()
函数执行完毕后无限循环执行。这是大多数Arduino程序的核心,用于连续执行代码。
digitalWrite(LED, HIGH);
- 这行代码将引脚2(LED)的电压设置为高电平(通常是5V),即打开LED。
delay(500);
- 程序在这里暂停500毫秒(0.5秒),保持LED点亮状态。
digitalWrite(LED, LOW);
- 这行代码将引脚2的电压设置为低电平(0V),即关闭LED。
delay(500);
- 再次暂停500毫秒,保持LED关闭状态。
}
- 这标志着
loop()
函数的结束,但由于其后的无限循环特性,函数将从头开始再次执行。
- 这标志着
总的来说,这段代码使得连接在Arduino引脚2上的LED每隔0.5秒闪烁一次。这是学习Arduino编程的一个基本示例,展示了如何控制简单的输出设备如LED,并实现基本的时间控制。
数码管
这段代码是用于Arduino平台的,它利用SevSeg库来控制一个4位7段数码管显示器。下面是对代码中各部分的详细解释:
-
包含库文件:
cpp复制代码
#include "SevSeg.h"
这行代码包含了SevSeg库,这个库专门用于控制7段数码管。
-
创建SevSeg对象:
cpp复制代码
SevSeg sevseg;
创建一个名为
sevseg
的SevSeg对象,用于后续对7段数码管的操作。 -
设置函数:
cpp复制代码
void setup() {
...
}
在
setup
函数中,初始化7段数码管的配置:numDigits
:定义数码管的位数,这里是4位。digitPins[]
:指定控制每个位的Arduino引脚,这里使用了引脚14, 15, 2, 5。segmentPins[]
:指定控制每个段(a-g, dp)的Arduino引脚,使用了引脚12, 4, 19, 26, 27, 13, 18, 25。resistorsOnSegments
:设置电阻是否在段引脚上,这里设置为false
,意味着电阻在位引脚上。hardwareConfig
:设置硬件配置,这里使用COMMON_ANODE
(共阳极)。updateWithDelays
:设置是否使用延时来更新显示,默认false
。leadingZeros
:设置是否显示前导零,这里设置为false
。disableDecPoint
:设置是否禁用小数点,这里设置为false
,表示小数点已连接。
然后调用
sevseg.begin(...)
方法来初始化这些配置。 -
主循环函数:
cpp复制代码
void loop() {
sevseg.setNumber(millis() / 250);
sevseg.refreshDisplay();
delay(1); // This speeds up the simulation
}
在
loop
函数中,首先通过millis() / 250
计算当前的时间(单位:秒),并将其转换为适合显示的数字(因为millis()
返回的是毫秒数,除以250可以得到一个较慢变化的数字,便于观察)。然后通过sevseg.setNumber(...)
设置显示的数字,接着调用sevseg.refreshDisplay()
来刷新显示。最后,使用delay(1)
稍微延迟一下,以控制刷新速度。
这段代码主要用于演示如何使用SevSeg库来控制一个4位7段数码管来显示时间(以秒为单位,通过毫秒计时转换)。注意,实际的显示效果还取决于你的硬件连接和具体配置。
WiFi
这段代码是一个用于ESP32开发板的WiFi扫描示例。它使用了ESP32的WiFi库来搜索周围的WiFi网络,并打印出每个网络的SSID(网络名称)、RSSI(信号强度)和加密类型。下面是代码的详细解释:
-
引入WiFi库:
cpp复制代码
#include "WiFi.h"
这行代码包含了ESP32的WiFi功能所需的库。
-
设置函数:
cpp复制代码
void setup() {
Serial.begin(115200);
Serial.println("Initializing WiFi...");
WiFi.mode(WIFI_STA);
Serial.println("Setup done!");
}
在
setup
函数中,首先初始化串口通信,设置波特率为115200,以便向计算机发送数据。然后打印一条消息,表示正在初始化WiFi。接着设置WiFi模式为WIFI_STA
(Station,即客户端模式)。最后打印设置完成的消息。 -
主循环函数:
cpp复制代码
void loop() {
Serial.println("Scanning...");
// WiFi.scanNetworks will return the number of networks found
int n = WiFi.scanNetworks();
Serial.println("Scan done!");
if (n == 0) {
Serial.println("No networks found.");
} else {
Serial.println();
Serial.print(n);
Serial.println(" networks found");
for (int i = 0; i < n; ++i) {
// Print SSID and RSSI for each network found
Serial.print(i + 1);
Serial.print(": ");
Serial.print(WiFi.SSID(i));
Serial.print(" (");
Serial.print(WiFi.RSSI(i));
Serial.print(")");
Serial.println((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? " " : "*");
delay(10);
}
}
Serial.println("");
// Wait a bit before scanning again
delay(5000);
}
在
loop
函数中,首先打印开始扫描的消息。WiFi.scanNetworks()
函数用于扫描周围的WiFi网络,并返回找到的网络数量。扫描完成后,打印扫描结束的消息。如果没有找到任何网络,就打印“没有找到网络”。如果找到了网络,就打印找到的网络数量,并循环遍历每个网络。对于每个网络,打印其SSID、RSSI以及加密类型(如果是开放的,打印一个空格;如果不是,打印一个星号*
来表示加密)。每个网络信息打印后,延时10毫秒以避免串口输出过快。最后,在每次扫描结束后,延时5秒再次开始扫描。
这个示例代码非常适合用于测试ESP32的WiFi功能,以及了解周围有哪些WiFi网络可用
-Fin-
在学习和研究ESP32等单片机的过程中,确实可能会遇到像迷宫一样复杂和令人困惑的情况,特别是当涉及到传统与现代技术、端与云的结合,以及不同平台和工具(如Arduino和Wokwi)的选择时。以下是一些建议,帮助你更高效地学习和掌握ESP32。
迷宫的本质
迷宫在这里比喻为不合适的学习和研究方式,这种方式可能导致大量的时间和精力投入,但收获却很少。这通常是因为学习方法不够系统、资源选择不当或者缺乏实践经验。
出路:从传统到现代,降本增效
- 系统学习:
- 从基础开始,逐步深入。先了解ESP32的基本概念、硬件结构和编程环境。
- 学习C/C++语言基础,这是ESP32编程的核心。
- 掌握常用的开发工具和框架,如Arduino IDE、ESP-IDF等。
- 实践与项目:
- 通过实际项目来学习,这是最快也是最有效的方法。
- 从简单的LED闪烁、按键控制开始,逐步过渡到更复杂的项目,如传感器数据读取、网络通信等。
- 结合现代技术:
- 了解并学习如何将ESP32与云技术结合,如使用MQTT、HTTP等协议与云端服务器通信。
- 学习如何使用Wi-Fi和蓝牙等无线通信技术,实现设备间的互联。
- 利用在线资源:
- 利用Wokwi等在线仿真工具,可以在不购买实际硬件的情况下进行编程和调试。
- 观看教程视频、阅读博客文章和官方文档,以获取更全面的知识和信息。
- 降本增效:
- 选择合适的开发板和模块,避免过度投资。
- 利用开源项目和代码,减少重复劳动。
- 参加线上或线下的研讨会、工作坊,与同行交流学习。
ESP32能否一小时入门,一下午精通?
虽然这听起来可能有些夸张,但通过高效的学习方法和实践,你确实可以在相对短的时间内掌握ESP32的基础知识和编程技能。然而,要达到精通的水平,还需要不断的实践、学习和积累经验。
总的来说,学习和研究ESP32等单片机需要耐心、恒心和正确的方法。通过系统学习、实践项目、结合现代技术以及利用在线资源,你可以更有效地走出这个“迷宫”,实现降本增效的学习目标。
标签:web,LED,Arduino,ESP32,WiFi,引脚,Serial From: https://blog.csdn.net/ZhangRelay/article/details/142456210