不同于传统Arduino教程的碎片化知识堆砌,本书以完整的项目开发链路为核心,通过三篇递进式内容体系: Arduino基础知识篇(第1~3章)、实战准备篇(第4~13章)以及项目实战篇(第14~20章),从Arduino基础知识开始讲解,直至带领读者从零开始实现一个有趣又实用的多功能天气时钟。书中还整合了作者在众多物联网项目开发中积累的实战经验,为读者提供经过验证的问题解决方案。
本书第1篇讲解Arduino的发展历程、IDE的使用和Arduino编程的基础知识,通过本篇的学习,读者不仅可以熟练使用Arduino IED开发工具,还可为后续的实战项目打下坚实的理论基础。
第2篇详细讲解开发环境搭建、硬件选型以及实战项目所需的关键库使用方法。通过本篇的学习,读者不仅能够轻松完成后续的实战开发,还能掌握独立开发天气接口相关项目和各种显示屏项目的核心技能。
第3篇完整呈现天气时钟项目的实战开发过程,通过循序渐进的教学设计,读者将系统掌握项目框架搭建、多任务调度实现、UI设计及功能页面动态切换等核心开发技能。
本书适合对嵌入式物联网开发和智能硬件制作感兴趣的创客、电子爱好者阅读,也可作为高等院校相关专业学生的实践参考书,以及中小学科创教师开展项目式教学的辅助教材。无论你是刚接触Arduino的初学者,还是具备一定基础、希望系统提升项目综合开发能力的进阶者,本书都能通过清晰的逻辑框架与完整的项目驱动,帮助你扎实掌握Arduino开发的核心思路与实战能力,实现从理论到实践、从模块设计到系统设计的跨越。
目录
第1篇Arduino基础知识
第1章关于Arduino3
1.1概述3
1.2Arduino的优点4
1.2.1简洁的编程体验4
1.2.2丰富的库支持5
1.2.3简单的集成开发环境搭建5
1.3Arduino的缺点6
1.3.1性能损失6
1.3.2编译速度慢6
小结7
第2章Arduino IDE的使用8
2.1下载与安装8
2.2重要功能介绍9
2.2.1左边栏10
2.2.2菜单栏11
2.2.3构建区14
2.2.4串口工具区15
2.3配置文件16
第3章Arduino编程基础18
3.1Arduino程序的基本结构18
3.1.1setup函数18
3.1.2loop函数19
3.2基本数据类型20
3.2.1整数类型20
3.2.2浮点类型20
3.2.3字符与字节类型21
3.2.4布尔类型21
3.2.5其他特殊类型21
3.3变量与常量23
3.3.1理解变量23
3.3.2变量的作用域24
3.3.3变量的修饰符25
3.3.4变量的转换26
3.4运算符27
3.4.1算术运算符27
3.4.2赋值运算符27
3.4.3比较运算符28
3.4.4逻辑运算符28
3.4.5位运算符28
3.4.6其他运算符29
3.5控制结构31
3.5.1条件控制语句31
3.5.2多路选择控制语句31
3.5.3循环控制语句32
3.5.4跳转控制语句33
3.6预处理指令33
3.6.1#include34
3.6.2#define34
3.6.3#ifdef、#ifndef及#endif35
3.6.4#if、#elif及#else36
3.6.5#pragma36
3.6.6#error和#warning36
3.6.7Arduino特有的预处理指令37
3.7结构体与枚举37
3.7.1结构体37
3.7.2枚举38
3.8函数41
3.8.1函数的优点41
3.8.2Arduino内置核心函数41
3.8.3自定义函数46
3.8.4形参和实参48
小结50第2篇实 战 准 备
第4章实战项目介绍及准备53
4.1时钟功能53
4.1.1时钟页面53
4.1.2空气质量页面54
4.1.3天气预报页面54
4.1.4主题切换页面54
4.1.5计时器页面54
4.1.6恢复出厂设置页面54
4.1.7网络和城市配置页面55
4.2材料准备55
4.2.1杜邦线55
4.2.2面包板55
4.2.3屏幕56
4.2.4开发板58
4.2.5按键60
4.3软件准备61
4.3.1esp32开发板支持包61
4.3.2第三方库64
第5章TFT_eSPI库详解66
5.1连接开发板与屏幕66
5.1.1SPI通信66
5.1.2屏幕SPI转接板67
5.1.3开发板引脚69
5.1.4开发板与屏幕的连接效果图71
5.2TFT_eSPI库配置文件讲解72
5.2.1User_Setup.h文件讲解72
5.2.2配置示例目录75
5.2.3多配置文件切换76
5.3烧录示例程序77
5.3.1完整配置文件展示77
5.3.2AirM2M_CORE_ESP32C3开发板参数讲解78
5.3.3烧录示例79
5.4TFT_eSPI库源码解析81
5.4.1TFT_eSPI.h头文件概览81
5.4.2核心类TFT_eSPI84
5.4.3扩展类TFT_eSprite94
小结97
第6章OneButton库详解99
6.1连接开发板与按键99
6.1.1轻触按键工作原理99
6.1.2轻触按键连接方式100
6.1.3按键与开发板连接效果图100
6.2编写按键监听程序101
6.2.1原始监听程序101
6.2.2监听程序加入软件消抖102
6.3OneButton库的使用103
6.3.1OneButton和OneButtonTiny103
6.3.2OneButton.h头文件解析104
6.3.3OneButton库综合示例107
小结109
第7章TaskScheduler库详解110
7.1编写多任务调度程序110
7.1.1使用delay函数定时执行110
7.1.2使用millis函数定时执行111
7.2TaskScheduler库源码解析111
7.2.1TaskScheduler库源码目录112
7.2.2编译时选项112
7.2.3Scheduler类114
7.2.4Task类116
7.2.5StatusRequest类120
7.3TaskScheduler综合示例122
7.3.1控制板载LED闪烁122
7.3.2使用按键动态调整任务123
7.3.3任务间协作124
7.4TaskScheduler和FreeRTOS126
7.4.1TaskScheduler和FreeRTOS的区别126
7.4.2TaskScheduler和FreeRTOS的选择127
小结127
第8章ArduinoJson库详解128
8.1JSON介绍128
8.1.1JSON的定义和历史128
8.1.2JSON的特点128
8.1.3JSON的语法规则130
8.1.4JSON的应用131
8.2ArduinoJson库的使用132
8.2.1ArduinoJson库源码目录132
8.2.2JsonDocument类133
8.2.3JsonArray类137
8.2.4JsonObject类139
8.2.5JsonVariant类140
8.2.6数据处理函数141
8.2.7编译时选项144
8.3ArduinoJson综合示例146
8.3.1创建JSON字符串147
8.3.2解析JSON字符串148
小结149
第9章Preferences库详解151
9.1数据持久化151
9.2Flash分区表152
9.2.1分区表讲解152
9.2.2分区表验证153
9.3Preferences库源码解析154
9.4Preferences库示例157
9.4.1写入数据158
9.4.2读取数据158
小结159
第10章WiFi库详解160
10.1WiFi库的架构160
10.2WiFi库源码解析161
10.2.1WiFiType.h头文件161
10.2.2WiFiSTAClass类162
10.2.3WiFiAPClass类166
10.2.4WiFiScanClass类168
10.2.5WiFiGenericClass类172
小结173
第11章WebServer库详解174
11.1WebServer库源码解析174
11.1.1构造函数174
11.1.2服务器控制函数175
11.1.3认证相关函数176
11.1.4请求处理函数176
11.1.5请求信息获取函数178
11.1.6响应发送函数179
11.1.7配置函数180
11.2WebServer库综合示例181
小结183
第12章HTTPClient库详解185
12.1HTTPClient库源码解析185
12.1.1初始化和连接管理函数185
12.1.2请求配置函数187
12.1.3HTTP请求函数188
12.1.4头管理函数189
12.1.5响应处理函数190
12.1.6Cookie管理函数191
12.2HTTPClient库综合示例191
小结193
第13章天气接口与第三方库194
13.1天气接口介绍194
13.2和风天气接入准备195
13.2.1生成和风天气密钥195
13.2.2注册和风账号及创建项目196
13.3和风天气API的使用198
13.3.1API介绍198
13.3.2和风天气JWT介绍200
13.3.3使用DuduUtil库生成JWT201
13.3.4使用ArduinoZlib库解压返回的数据201
13.3.5和风天气状态码202
小结202
第3篇项 目 实 战
第14章搭建项目框架207
14.1创建项目207
14.1.1新建项目207
14.1.2构建项目目录208
14.1.3添加字库与图片文件208
14.2构建功能页面211
14.2.1在common.h中定义页面枚举211
14.2.2编写TFT_eSPI库的初始化函数211
14.2.3为每个页面绘制简单的文字212
14.2.4编写按键相关代码213
小结215
第15章获取天气信息216
15.1获取天气信息的准备工作216
15.1.1NTP对时216
15.1.2添加结构体以及和风天气认证相关内容218
15.1.3URL编码220
15.1.4单片机重启221
15.2获取和风天气信息223
15.2.1信息获取流程讲解223
15.2.2将locationID和经纬度存入NVS224
15.2.3定义获取天气信息的函数226
15.3编写测试代码236
小结238
第16章绘制时钟页面239
16.1双色主题239
16.1.1主题管理239
16.1.2改造屏幕初始化函数240
16.2绘制页面241
16.2.1组件分类241
16.2.2定义固定组件绘制函数241
16.2.3定义时间组件绘制函数242
16.2.4定义天气组件绘制函数246
16.2.5创建动画组件绘制任务252
16.2.6修改时钟页面绘制函数256
16.3编写测试代码257
小结258
第17章绘制其他页面259
17.1空气质量页面259
17.1.1初级版本绘制函数259
17.1.2进阶版本绘制函数261
17.1.3进阶版本的优势261
17.2天气预报页面262
17.2.1根据代码绘制天气图标262
17.2.2修改天气预报页面绘制函数263
17.3主题切换页面265
17.3.1修改主题切换页面绘制函数265
17.3.2创建长按开始事件回调函数265
17.4计时器页面267
17.4.1动态数字绘制函数267
17.4.2修改计时器页面绘制函数268
17.4.3处理按键事件回调函数269
17.5出厂设置页面270
17.5.1修改出厂设置页面绘制函数270
17.5.2处理长按开始事件回调函数271
17.6编写测试代码272
17.6.1修改主循环272
17.6.2修改双击事件回调函数273
小结274
第18章加入配置功能275
18.1配置页面设计思路275
18.1.1天气时钟运行流程概述275
18.1.2配置页面源代码276
18.2动态拼接WiFi名称下拉菜单277
18.2.1扫描WiFi277
18.2.2拆分Web配置页面278
18.3启动Web服务器282
18.3.1将WiFi信息保存到NVS282
18.3.2定义路由匹配时的处理函数282
18.3.3定义Web服务器启动函数284
18.4编写测试代码285
小结287
第19章项目优化288
19.1定时更新天气信息288
19.1.1定义回调函数288
19.1.2创建定时任务289
19.1.3定义任务启用函数290
19.2重构启动流程290
19.2.1重构网络连接函数291
19.2.2编写setup函数292
小结294
第20章自定义字库和动画295
20.1生成自定义字库295
20.1.1字体生成软件295
20.1.2准备字体源297
20.1.3生成字库298
20.1.4使用新字库298
20.2生成自定义动画300
20.2.1图片取模软件300
20.2.2生成图片数据300
20.2.3制作图片头文件303
20.2.4自定义示例动画资源304
小结306
结语307