首页 > 其他分享 >ESP32等单片机学习和研究的迷宫-传统和现代-端和云-Arduino IDE和wokwi web

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

时间:2024-09-23 17:19:44浏览次数:10  
标签:web LED Arduino ESP32 WiFi 引脚 Serial

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秒的间隔闪烁。下面是代码的逐行解释:

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

    • 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(...)方法来初始化这些配置。

  4. 主循环函数

     

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

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

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

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

标签:web,LED,Arduino,ESP32,WiFi,引脚,Serial
From: https://blog.csdn.net/ZhangRelay/article/details/142456210

相关文章

  • CentOS 9 安装 google Chrome Web 浏览器的一种简单方法(2024.9)
    我自己选择了一个简单的方法。1.高级上网,到google的Chrome下载网页,下载Linux的安装包,google-chrome-stable_current_x86_64.rpm,109M如网址:https://www.google.com/intl/en_uk/chrome/next-steps.html?platform=linux&statcb=0&installdataindex=empty&defaultbrowser=0附百度......
  • JavaWeb -Servlet对表单数据的处理 例:登录系统
    一、创建html文件并添加框架内容<tr></tr>是表格标签<td></td>是单元格标签1.添加用户名和密码<inputtype="text"name="username">文本格式(text),函数名是username。<inputtype="password"name="password">密码格式(password),函数名......
  • QML与WebGL的交互编程
    QML与WebGL的交互编程使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频......
  • QML与WebGL的交互编程
    QML与WebGL的交互编程使用AI技术辅助生成QT界面美化视频课程QT性能优化视频课程QT原理与源码分析视频课程QTQMLC++扩展开发视频课程免费QT视频课程您可以看免费1000+个QT技术视频免费QT视频课程QT统计图和QT数据可视化视频免费看免费QT视频课程QT性能优化视频免费看......
  • weblogic应用打补丁—附带截图以及报错解决办法
    本文详细描述了如何在OracleWebLogic服务器上进行升级,包括下载无漏洞补丁、备份、卸载旧补丁、安装新补丁、检查新补丁状态并解决安装过程中可能遇到的内存设置问题。整个过程大约耗时2小时。说明:1、需要提前去oracle官网下载好无漏洞的补丁压缩包,本次升级下载的压缩包为p3490072......
  • WebViz可视化工具的应用
    WebViz可视化Webviz是一个基于Web的可视化工具,意味着您可以通过浏览器/APP访问它,而不需要安装额外的软件。这对于远程访问和团队协作非常方便。Foxglove是一个开源的工具包,包括线上和线下版。旨在简化机器人系统的开发和调试。它提供了一系列用于构建机器人应用程序的功能。本节将......
  • 20年架构师用一文带你彻底搞懂SpringBoot嵌入式Web容器原理
    ContainerLess理念微服务把应用和它所依赖的组件包、配置文件及附带的运行脚本打包成一个单一、独立、可执行的jar包文件。在实现Web服务器时,几乎不需要任何配置就可以启动Tomcat。你只需要使用java-jar命令就可以让Tomcat成为SpringBoot的一个自包含的可运行组件和单元。同时,这......
  • 基于gin的web开发脚手架模版
    一、web开发模式1.传统的MVC模式:这个模式不太适合大型的web应用。2.CLD模式链接:https://github.com/Ruan0423/gin-web-Framework二、目录结构--web_app -controller -logic -dao -mysql -redis -models -pkg -settings settings.go -routers router.go ma......
  • WebSocket相关知识点
    文章目录一、数据实时推送实现1.轮询(Polling)2.长连接(LongPolling)3.WebSocket二、代码实现后端实现1.引入依赖2.配置类3.WebSocket服务类4.定时任务前端实现测试工具推荐三、常见错误及解决方案错误1:参数缺失或注解错误错误2:遍历集合时修改集合导致的并......
  • 【CTF Web】BUUCTF SQLi-LABS Page-1(Basic Challenges) Less-6 Writeup(SQL注入+GET请
    sqli-labs1点击启动靶机。SQLi-LABSPage-1(BasicChallenges)原理双注入模板:selectcount(*),concat(([payload]),floor(rand(0)*2))asafrom[table_name]groupbya解法发送GET请求,id作为参数。http://b3f804a6-9ba6-418d-ac25-bf8d48589b62.node5.......