ESP32 入門試玩之前言

關於 ESP32 的更多好玩、有趣、實用的博客,請查看 ESP32 系列博客 - 目錄

一次偶然的機會,去參加了由樂鑫和 Pycom 公司組織的 Hackathon 活動,並獲贈了一塊官方最新的 ESP32 開發板 —— ESP32-DevKitC,到家幾次試玩之後,深深地被樂鑫折服,對它愛不釋手。


這裏寫圖片描述

圖: ESP32-DevKitC 開發板

如上圖所有,一塊開發板,小巧,迷你,接口簡單,功能卻不簡單,只需要一根普通的智能手機USB數據線,就能完成絕大多數操作。


ESP32 的優勢


上手快


第一次試玩,用的官方的 esp-idf-template,一邊看文檔一邊動手,從搭建開發環境,到把這個 demo 跑起來(板子作爲一個 STA,連接到 WiFi),總共也就半個小時左右。

第一次跑起來後,隔了一段時間,又想跑個 MQTT 試試,然後在網上搜相關資源,發現了一個 ESP32 的 MQTT 組件庫 espmqtt,然後通過這個庫的作者提供的模板,成功地將 ESP32 接入了中國移動的物聯網雲平臺 OneNET。整個過程耗時 3 天(其中,週末2天)。在接入的過程中也發生了兩個小插曲:

  • 發現移動 OneNET 提供的 SDK 存在 2 個 bug,導致我 publish 消息時始終失敗,最後分析源碼,已經幫他們把 bug 解決掉了。我提交的補丁在這裏: https://github.com/cm-heclouds/MQTT/pull/1
  • 發現 espmqtt 組件存在 bug,到時我 publish 質量等級爲 QoS2 的消息失敗(其實已經成功,但是組件判斷錯誤,以爲我 publish 沒有成功),也已經幫他們把 bug 解決掉了。我提交的補丁在這裏:https://github.com/tuanpmt/espmqtt/pull/6

後來又試了是官方提供的空中升級功能,雖然中間同樣遇到了一點問題,但是一個晚上就解決了。

然後就是這幾天,打算做個與 audio 相關的項目。然後在 ESP32 的論壇上以 audio 爲關鍵字搜索整個論壇的帖子,發現了一個開源項目 ESP8266_MP3_DECODER。這個項目是做一個網絡電臺,從服務器上面獲取音頻數據,然後實時解碼,實現播放網絡上的音樂的功能。經過幾天的學習研究,加上向項目作者的請教,也終於在昨晚基本實現了功能。整個過程耗時 5 天。期間也發現了該項目的 bug:


開源


這一點是我非常看中的一個地方。現在是一個流行開源的年代,在我看來,不開源的原因很有可能是——代碼太爛,不敢開源!當然,這是比較偏激的看法,但是至少說明樂鑫對它自己有信心,有勇氣!從結果來看,他們的信心和勇氣完全來自於他們的實力。

其實樂鑫的代碼也並非完全開源,WiFi 驅動就只是赤裸裸地提供了庫和頭文件,這真實一個悲傷的事實!不過還好 ,它頭文件的註釋太規範了,以至於我都沒想到去看驅動的源碼。


規範的代碼和註釋


正如上面所說,樂鑫的頭文件的註釋太規範了,讓我都不知道該怎麼評價了,只有一句話——太具國際範兒了

除了少部分組件是從其它地方移植過來的,只要是他們自己寫的組件,代碼的註釋讓我看得神清氣爽。

而且代碼風格也非常符合我的胃口,O(∩_∩)O哈哈哈~


巧妙/簡潔的組織結構


ESP-IDF 中“組件”的概念真實深入我心。整個 ESP-IDF 由一個一個組件構成,各個組件之間的耦合性非常低(部分組件之間存在耦合),使整個工程的結構顯得非常清晰。此外,用戶在編寫應用程序時,也可以完全按照組件來組織代碼結構,使應用程序的結構也非常清晰。我上面提到的 ESP8266_MP3_DECODER 就是這樣組織代碼的。

關於組件的更多概念,請參考 ESP-IDF 的文檔 構建系統


豐富的Demo


這一點也非常贊,直接看下面的組織結構:

work@ubuntu:~/esp/esp-idf/examples$ tree -L 2 -d
.
├── bluetooth
│   ├── a2dp_sink
│   ├── ble_adv
│   ├── blufi
│   ├── controller_hci_uart
│   ├── gatt_client
│   ├── gatt_security_server
│   ├── gatt_server
│   └── gatt_server_service_table
├── ethernet
│   └── ethernet
├── get-started
│   ├── blink
│   └── hello_world
├── performance
│   ├── tcp_perf
│   └── udp_perf
├── peripherals
│   ├── adc
│   ├── gpio
│   ├── i2c
│   ├── i2s
│   ├── ledc
│   ├── pcnt
│   ├── rmt_nec_tx_rx
│   ├── sigmadelta
│   ├── spi_master
│   ├── spi_slave
│   ├── timer_group
│   ├── touch_pad_interrupt
│   ├── touch_pad_read
│   ├── uart_echo
│   └── uart_events
├── protocols
│   ├── aws_iot
│   ├── coap_client
│   ├── coap_server
│   ├── http_request
│   ├── https_request
│   ├── mdns
│   ├── openssl_client
│   ├── openssl_server
│   ├── pppos_client
│   └── sntp
├── storage
│   ├── nvs_rw_blob
│   ├── nvs_rw_value
│   ├── sd_card
│   └── wear_levelling
├── system
│   ├── deep_sleep
│   ├── ota
│   └── ulp
└── wifi
    ├── power_save
    ├── wpa2_enterprise
    └── wps

57 directories

學習資料


目前的學習資料不算多,請儘量多閱讀閱讀官方提供的文檔:

另外,本人還打算將 ESP-IDF 翻譯成中文文檔,源碼已經託管到 GitHub 上面了,熱烈歡迎有興趣的小夥伴一起加入翻譯呀(盡算僅指出一個錯別字也非常歡迎~~)

最後,還不得不說一句,ESP-IDF 的源碼是最好的學習資料!儘量多看看它的源碼,以及源碼中的註釋,絕對讓你受益匪淺!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章