Arduino真好玩:嵌入式開發項目一氣呵成
相關主題
商品描述
"不同於傳統Arduino教程的碎片化知識堆砌,本書以完整的項目開發鏈路為核心,通過三篇遞進式內容體系: Arduino基礎知識篇(第1~3章)、實戰準備篇(第4~13章)以及項目實戰篇(第14~20章),從Arduino基礎知識開始講解,直至帶領讀者從零開始實現一個有趣又實用的多功能天氣時鐘。書中還整合了作者在眾多物聯網項目開發中積累的實戰經驗,為讀者提供經過驗證的問題解決方案。 本書第1篇講解Arduino的發展歷程、IDE的使用和Arduino編程的基礎知識,通過本篇的學習,讀者不僅可以熟練使用Arduino IED開發工具,還可為後續的實戰項目打下堅實的理論基礎。 第2篇詳細講解開發環境搭建、硬件選型以及實戰項目所需的關鍵庫使用方法。通過本篇的學習,讀者不僅能夠輕松完成後續的實戰開發,還能掌握獨立開發天氣接口相關項目和各種顯示屏項目的核心技能。 第3篇完整呈現天氣時鐘項目的實戰開發過程,通過循序漸進的教學設計,讀者將系統掌握項目框架搭建、多任務調度實現、UI設計及功能頁面動態切換等核心開發技能。 本書適合對嵌入式物聯網開發和智能硬件制作感興趣的創客、電子愛好者閱讀,也可作為高等院校相關專業學生的實踐參考書,以及中小學科創教師開展項目式教學的輔助教材。無論你是剛接觸Arduino的初學者,還是具備一定基礎、希望系統提升項目綜合開發能力的進階者,本書都能通過清晰的邏輯框架與完整的項目驅動,幫助你紮實掌握Arduino開發的核心思路與實戰能力,實現從理論到實踐、從模塊設計到系統設計的跨越。"
作者簡介
蔡傑,2010年畢業於南京工程學院獲經濟學學士學位。畢業後進入江陰市民政局從事會計工作,期間利用業余時間自學Java編程,並將單位大部分工作進行了信息化改造。2020年成立自己的軟件工作室,軟件工程正式成為他的第二舞臺。2023年10月開始自學嵌入式,11月註冊B站賬號“大聰明的二手腦袋”,並開始將自己的作品免費開源給B站觀眾,目前所有作品都使用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



