物联网项目开发实战-第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 如何开发一个项目

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

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

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

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

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

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

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

09-04   阅读(16)   评论(0)
 标签: 创客 ESP32 物联网

涨知识
FreeRTOS

FreeRTOS是一个迷你的实时操作系统内核。作为一个轻量级的操作系统,功能包括:任务管理、时间管理、信号量、消息队列、内存管理、记录功能、软件定时器、协程等,可基本满足较小系统的需要。

评论:
相关文章
Arduino-ESP32与ESP-IDF的版本对应表

Arduino-ESP32与ESP-IDF的版本对应表。


Arduino-ESP32文件系统全解析:SPIFFS、LittleFS、SD卡操作

Arduino-ESP32提供了多种文件系统解决方案,本文将深入解析SPIFFS、LittleFS和SD卡三种主流存储方案,帮助你做出最佳选择。


ESP32-P4-WIFI6开发板

ESP32-P4-WIFI6-DEV-KIT是一款微雪(Waveshare)设计的基于 ESP32-P4 的多媒体开发板,并集成 ESP32-C6,支持 Wi-Fi 6 和 BLE 5 无线连接。它提供丰富的人机交互接口,包括 MIPI-CSI (集成图像信号处理器 ISP)、MIPI-DSI、SPI、I2S、I2C、LED PWM、MCPWM、RMT、ADC、UART 和 TWAI 等。


ESP-Hosted 入门介绍 &使用指南

ESP-Hosted 解决方案提供了将 ESP 板用作 Wi-Fi 和 Bluetooth/BLE 连接的通信处理器的方法。


设备上云太麻烦?ESP-Hosted一站触达!

ESP-Hosted 提供了一种将ESP芯片和模组用作通信协处理器的解决方案,该解决方案为主机微处理器或微控制器提供无线连接,使主机能够与其他设备通信。简单来说为网卡方案。


ESP32 + Arduino使用TFT_eSPI库

Arduino+ESP32上使用TFT_eSPI库快速点亮这个屏幕,驱动芯片ST7789


ESP32 利用 SPI 连通 TFT 彩屏

本文给出了一个ESP32与SPI 接口TFT显示屏接线的详细说明,供大家参考。


在Micropython下使用ESPNow功能进行数据传输

本文讲解如何在Micropython环境下使用ESP32的ESPNow功能进行数据传输。


用 ESP32-S3 打造多功能 USB Dongle

ESP-Dongle 是一款基于 ESP32-S3 芯片开发的多功能 USB Device 解决方案。它不仅外形小巧,功能齐全,更集成了无线 U 盘、SD 卡读取以及 USB 无线网卡等多项功能。


利用 ESP32-S3 和 CSI 技术打造智能家居

ESP32 系列芯片可以利用 CSI 数据实现动作检测和存在检测。无论是自动调节灯光、风扇,还是节能控制,CSI 技术为智能家居带来了新的可能性。随着 CSI 技术的发展,未来的智能家居将能够更精确地感知和响应我们的行为,实现更高效、更人性化的控制。