物联网项目开发实战-第2章-开发环境

本小节通过点亮LED和串口输出两个程序,来初步掌握ArduinoIDE、了解GPIO和串口使用、同时把开发环境与开发板的连接,上传程序的各环节跑通,

2.1 Arduino IDE

Arduino 是一个基于易于使用的硬件和软件的开源电子平台。 硬件包含各种型号的Arduino电路板,这些电路板就像是Arduino的大脑和身体,能够连接各种电子元件,比如传感器、LED灯等。

Arduino 软件 (IDE) 是一个在计算机上运行的程序开发环境,你可以在这里编写代码,然后上传到Arduino电路板上,让电路板按照你的指令去工作。Arduino IDE可在 Windows、Macintosh OSX 和 Linux 操作系统上运行。

Arduino 软件作为开源工具发布,可供经验丰富的程序员进行扩展。Arduino-ESP32是由乐鑫开发和维护的针对ESP32开发板的开发包。

物联网项目开发实战-第2章-开发环境

本书使用的Arduino IDE版本为2.3.6

2.1.1 ESP32开发板安装

为了能够使用 Arduino IDE 开发 ESP32,需要向 Arduino IDE 板管理器添加一个额外的源,然后安装 ESP32。我们需要先添加 ESP32 开发板附加网址。打开【文件】菜单下的【首选项】。

物联网项目开发实战-第2章-开发环境

物联网项目开发实战-第2章-开发环境 

https://espressif.github.io/arduino-esp32/package_esp32_index.json 粘贴到文本框内

选择左侧导航“开发板管理器”

物联网项目开发实战-第2章-开发环境

找到”esp32”这个开发板进行安装,本书例子使用 2.0.17 的版本。

2.1.2第三方库的安装

ArduinoIDE还提供了众多的第三方库,即包含各类传感器、显示屏等硬件驱动相关的库,也包含PubSubClient、ArduinoJSON等各类软件库。

选择左侧导航”库管理”,然后查询需要的库安装后,程序中通过include引用库。

物联网项目开发实战-第2章-开发环境

本书中要使用的第三方库在对应小节内说明。

2.2 控制信号输出:点亮LED

想像一下,如果ESP32芯片是一个大脑,那么GPIO(通用输入输出接口)就是它的神经末梢,用于感知外界信息(输入)和输出控制信号,例如感知一个按键的按下、获取传感器数据、点亮一个LED和输出控制舵机转动的信号等等。

下面以点亮板载LED为例来说明GPIO的输出操作。

Arduino的digitalWrite函数用于GPIO输出,LED就是发光二极管,导通时发光。

实例1:LED灯的简单控制

const int LED_PIN = 4;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
}

上面的Arduino程序包含一个setup()函数和一个loop()函数,setup()在运行时只执行一次,一般放初始化相关的代码;而loop()会反复执行,一般放主代码。

本例中,在setup()中用pinMode()将接LED灯的引脚4设置为OUTPUT,然后在loop()中用digitalWrite()设置引脚4 为1(输出高电平)点亮LED。

上传程序并运行

将开发板用连接到电脑的USB端口,在ArduinoIDE中通过选择对应开发板和端口

物联网项目开发实战-第2章-开发环境

然后点击上传按钮

物联网项目开发实战-第2章-开发环境

程序将上传到开发板中并开始执行。

在上例中,digitalWrite()放在setup()内也是可以的,loop()函数要理解loop()函数的用法,我们来看一个LED呼吸灯的实现。

实例2:LED呼吸灯

const int LED_PIN = 4;

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}

本例中,在loop()函数内,首先用digitalWrite()输出1点亮LED,然后用delay()延时500ms(注意在延时期间,引脚的输出是保持为1的,所以LED一直亮着),接着用digitalWrite()输出0熄灭LED,再次用delay()延时500ms(LED一直熄灭),loop()执行完毕后被主程序再次调用,周而复始以达到呼吸灯的效果。

delay()函数

delay()是阻塞式的延时函数,但程序遇到这个函数时,要等待指定的毫秒(ms)数。时间到了才会继续执行后面的代码。

2.3 掌握程序在做什么:串口输出

串口用于不同设备间互相传输数据,比如在电脑上实时输入指令来控制Arduino 板做出相应的反应、Arduino 板将程序运行日志传输给电脑进行显示。

Arduino采用USART通信模式,支持硬串口和软串口两种实现方式。

ESP32有3组USART串口,引脚分别是(1,3)、(10,9)、(17,16)

在Arduino中,Serial是预定义好的串口类实例,下面通过一个实例来学习串口输出的操作。

实例3:使用串口输出程序运行信息

void setup() {
  Serial.begin(115200);
  Serial.println("初始化完成.");
}

void loop() {
  Serial.print("主程序");
  Serial.println("运行中.");
  Serial.printf("Hello %s\n", "World!");
  // code...
  delay(3000);
}

本例中,在loop()函数内,首先用Serial.begin()设置串口波特率为115200,波特率是串口的传输速率,指1秒中传输多少位码(1个字节是8个位码),然后用Serial.println()输入内容;在loop()函数中,分别用print()、printf()和printf()来输出内容。

l print():输出字符串内容

l println(): 输出字符串内容并换行

l printf(): 格式化输出字符串,可使用%s, %d, %f等格式化符输出字符串、整数和浮点数等

上传代码到开发板运行,然后打开串口监视器并设置波特率为115200即可看到从开发板串口输出的内容。

物联网项目开发实战-第2章-开发环境 

在后面的项目代码内,我们将使用串口来输出日志用于调试程序和了解程序运行情况。

关于串口的其它操作在后面案例中讲解。

2.4 Arduino程序是如何执行的?

在C语言中,程序是从main函数开始执行的,下面是一个简单的示例代码。

#include <studio.h>
int main(const char* args) {
    printf(“Hello, World!\n”);
    return 0;
}

在Arduino中,程序实际上也从main函数开始执行的,对于ESP32系列,这个函数是由Arduino-ESP32开发板库提供的,伪代码如下:

int main() {
    // init code...

    setup();

    for (;;) {
       loop();
    }
}

可以看出,因为各类开发板的初始化要求差异,这个main函数只能是由对应的开发板库提供。

而Arduino的价值在于屏蔽底层细节,提供相对统一的编程接口,降低学习和迁移不同开发板间的成本。

2.5 如何开发一个项目

本书所有项目均采用迭代式开发方式进行开发。

迭代式开发是一种将软件开发过程分解为多个短周期的迭代,每个迭代包含需求分析、设计、实现与测试等环节的软件开发方法。

需求分析的主要目的是确定项目的范围和目标,明确项目的功能和特性,并将期转化为可理解和可执行的任务。

设计阶段的主要目的是将需求转化为可执行的设计方案,并提供清晰的开发目标和方向。

开发阶段的主要目的是将设计方案转化为具体的代码,实现系统的核心功能和业务逻辑。

测试阶段的主要目的是发现和修复系统上的问题和错误,确保系统的质量和稳定性。

- 本文由用户 老张 发布,文中观点仅代表作者本人,不代表本站立场。
- 如需转载,请联系作者;如有侵权,请联系本站处理。

2025-09   阅读(215)   评论(0)
 标签: 创客电子 ESP32 物联网

涨知识
数码管

也称作LED数码管,是一种可以显示数字和其他信息的电子设备。玻璃管中包括一个金属丝网制成的阳极和多个阴极。大部分数码管阴极的形状为数字。

评论:
相关文章
MimiClaw应用与开发教程1:部署和测试

MimiClaw‌ 是一款基于 ‌ESP32-S3‌ 芯片的超轻量级AI助手,适合嵌入式AI与物联网开发者快速部署本地化AI代理。本系列教程基于MimiClaw的Arduino移植版本进行讲解,小节主要讲解部署和测试。


ESP32扫描wifi 热点列表

就像我们用手机打开WiFi功能后可以浏览附近的可用WiFi。要将手机连接到热点,通常需要打开Wi-Fi设置应用程序,列出可用的网络,然后选择所需的热点。然后输入密码(或不输入密码),可以使用ESP32进行相同的操作。


MimiClaw 配置飞书机器人和添加硬件控制技能

本文本介绍配置飞书机器人为MimiClaw的一个输入/输出端,和添加一个控制WS2812与LED的控制技能。


ESP32-S3 部署 MimicLaw 完整教程:从零到成功调用 DeepSeek

一块 30 块钱的开发板 + 一个大模型 API,就能做出可以听懂人话的智能硬件。 本文记录完整安装过程和踩坑经验,确保你跟着做就能跑通。


MimiClaw 架构全解析,把 “智能龙虾” 跑在 ESP32 上

本文将从手绘架构图入手,逐层拆解 MimiClaw 的分层设计、核心模块、数据流转与底层实现,带你解剖这只“智能虾”的技术骨架,看懂在 C 语言加持下,AI 智能体如何以可穿戴设备的形态,在你身边稳稳运行、离线服务、主动响应。


如何用 platform.local.txt 深度定制 ESP32 编译流程?

本文介绍如何在不脱离 ArduinoIDE 可视化开发的前提下,通过一个名为 platform.local.txt 的小文件,实现对 ESP32 编译流程的精准控制。


优化Arduino-ESP32程序体积

本文将系统分析程序体积增长的五大根源,并提供经过验证的优化方案,帮助减小固件大小。


开发ESP32大模型AI语音助手-从软件到硬件

本文所DIY的语音助手设备端使用的是MicroPython、服务端是Python,对于很多开发者来说MicroPython入门没难度。


【ESP32 C++教程】Unit10-2:音频录制

本小节使用音频开发框架实现一个音频录制到文件的示例。


ESP32 I2S 接口深度解析:从时序、格式到 ESP-IDF 驱动实战

I2S协议通过BCLK、LRCLK和DATA三线精准传输音频数据,但时序边沿、帧格式、时钟源等细节常引发噪声或断连。本文详解ESP32的I2S实现,从协议原理到ESP-IDF v5.x代码配置,助你避开常见陷阱,确保音频稳定传输。