ESP32单片机学习研究指南:从传统到现代,端与云技术,Arduino IDE与Wokwi Web工具探索

ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwi

ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino和wokwi



什么是迷宫?

不合适的学习和研究方式,花费大量的精力和时间,收效甚微。

这种又称之为学习和研究的“黑洞”


出路

从传统到现代:降本增效!

ESP32能否一小时入门,一下午精通。


数码管0-9循环显示 10s实现

4s

9s 


传统方式效率低

安装Arduino

需要硬件ESP32然后调试



基础案例

LED闪烁

LED亮

这段代码是用于Arduino平台的简单程序,用来控制连接到Arduino板上指定引脚的一个LED灯,使其以0.5秒的间隔闪烁。下面是代码的逐行解释:

  1. #define LED 2
  2. 这行代码定义了一个常量LED,其值为2。这意味着在后面的代码中,所有出现LED的地方都将被替换为数字2。这里,2是Arduino板上LED连接的引脚编号。
  3. void setup() {
  4. setup()函数在Arduino板电源启动后只执行一次。它通常用于设置引脚模式、初始化库等。
  5. pinMode(LED, OUTPUT);
  6. 这行代码设置引脚2(即之前定义的LED)为输出模式。这是必需的,因为要控制LED(即发送信号使之开关),引脚必须被配置为输出。
  7. }
  8. 这标志着setup()函数的结束。
  9. void loop() {
  10. loop()函数在setup()函数执行完毕后无限循环执行。这是大多数Arduino程序的核心,用于连续执行代码。
  11. digitalWrite(LED, HIGH);
  12. 这行代码将引脚2(LED)的电压设置为高电平(通常是5V),即打开LED。
  13. delay(500);
  14. 程序在这里暂停500毫秒(0.5秒),保持LED点亮状态。
  15. digitalWrite(LED, LOW);
  16. 这行代码将引脚2的电压设置为低电平(0V),即关闭LED。
  17. delay(500);
  18. 再次暂停500毫秒,保持LED关闭状态。
  19. }
  20. 这标志着loop()函数的结束,但由于其后的无限循环特性,函数将从头开始再次执行。

总的来说,这段代码使得连接在Arduino引脚2上的LED每隔0.5秒闪烁一次。这是学习Arduino编程的一个基本示例,展示了如何控制简单的输出设备如LED,并实现基本的时间控制。


数码管

这段代码是用于Arduino平台的,它利用SevSeg库来控制一个4位7段数码管显示器。下面是对代码中各部分的详细解释:

  1. 包含库文件

    
    

    cpp复制代码

    #include "SevSeg.h"

    这行代码包含了SevSeg库,这个库专门用于控制7段数码管。

  2. 创建SevSeg对象

    
    

    cpp复制代码

    SevSeg sevseg;

    创建一个名为sevseg的SevSeg对象,用于后续对7段数码管的操作。

  3. 设置函数

    
    

    cpp复制代码

    void setup() {
    ...
    }

    setup函数中,初始化7段数码管的配置:

  4. numDigits:定义数码管的位数,这里是4位。
  5. digitPins[]:指定控制每个位的Arduino引脚,这里使用了引脚14, 15, 2, 5。
  6. segmentPins[]:指定控制每个段(a-g, dp)的Arduino引脚,使用了引脚12, 4, 19, 26, 27, 13, 18, 25。
  7. resistorsOnSegments:设置电阻是否在段引脚上,这里设置为false,意味着电阻在位引脚上。
  8. hardwareConfig:设置硬件配置,这里使用COMMON_ANODE(共阳极)。
  9. updateWithDelays:设置是否使用延时来更新显示,默认false
  10. leadingZeros:设置是否显示前导零,这里设置为false
  11. disableDecPoint:设置是否禁用小数点,这里设置为false,表示小数点已连接。
  12. 然后调用sevseg.begin(...)方法来初始化这些配置。

  13. 主循环函数

    
    

    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(信号强度)和加密类型。下面是代码的详细解释:

  1. 引入WiFi库

    
    

    cpp复制代码

    #include "WiFi.h"

    这行代码包含了ESP32的WiFi功能所需的库。

  2. 设置函数

    
    

    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,即客户端模式)。最后打印设置完成的消息。

  3. 主循环函数

    
    

    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。

迷宫的本质

迷宫在这里比喻为不合适的学习和研究方式,这种方式可能导致大量的时间和精力投入,但收获却很少。这通常是因为学习方法不够系统、资源选择不当或者缺乏实践经验。

出路:从传统到现代,降本增效

  1. 系统学习
  2. 从基础开始,逐步深入。先了解ESP32的基本概念、硬件结构和编程环境。
  3. 学习C/C++语言基础,这是ESP32编程的核心。
  4. 掌握常用的开发工具和框架,如Arduino IDE、ESP-IDF等。
  5. 实践与项目
  6. 通过实际项目来学习,这是最快也是最有效的方法。
  7. 从简单的LED闪烁、按键控制开始,逐步过渡到更复杂的项目,如传感器数据读取、网络通信等。
  8. 结合现代技术
  9. 了解并学习如何将ESP32与云技术结合,如使用MQTT、HTTP等协议与云端服务器通信。
  10. 学习如何使用Wi-Fi和蓝牙等无线通信技术,实现设备间的互联。
  11. 利用在线资源
  12. 利用Wokwi等在线仿真工具,可以在不购买实际硬件的情况下进行编程和调试。
  13. 观看教程视频、阅读博客文章和官方文档,以获取更全面的知识和信息。
  14. 降本增效
  15. 选择合适的开发板和模块,避免过度投资。
  16. 利用开源项目和代码,减少重复劳动。
  17. 参加线上或线下的研讨会、工作坊,与同行交流学习。

ESP32能否一小时入门,一下午精通?

虽然这听起来可能有些夸张,但通过高效的学习方法和实践,你确实可以在相对短的时间内掌握ESP32的基础知识和编程技能。然而,要达到精通的水平,还需要不断的实践、学习和积累经验。

总的来说,学习和研究ESP32等单片机需要耐心、恒心和正确的方法。通过系统学习、实践项目、结合现代技术以及利用在线资源,你可以更有效地走出这个“迷宫”,实现降本增效的学习目标。

作者:zhangrelay

物联沃分享整理
物联沃-IOTWORD物联网 » ESP32单片机学习研究指南:从传统到现代,端与云技术,Arduino IDE与Wokwi Web工具探索

发表回复