ArduinoUno_NodeMCU

最近我的人生又被無情翻轉了好幾輪,只好在不惑之年再度嘗試學習一些 MCU / SoC 韌體開發領域的「新」事物。

其實這東西並不算新,國外甚至發展出超低門檻 MCU 開發板 Arduino ,比 iPhone 上市時間還要早。隨著十多年時間的演進,進入這領域的門檻已經低到只需具備小學生 + 會玩電腦的等級程度就能使用,撰寫第一支 MCU 的 Hello world 程式的學習成本只需 一台普通電腦 + 拍賣 200 元台幣有找的副廠相容 Arduino Uno 開發板 + 10 分鐘開發環境建置兼打字(但是離真正的 MCU 商業應用還很遙遠),觸及到學生族群、創意設計等非電子相關技術人員,已發展到相當成熟且平穩程度,最終也似乎只是「普通人也能輕鬆製作出電子玩具」的用途,似乎達到了極限。不過隨著這些年「物聯網」(Internet of Things,簡稱 IoT)、雲端、大數據等議題興起,以及微處理器、感測元件成本降低,MCU / SoC 韌體開發應用又再度火熱了起來,也讓原本的開發板業者,紛紛發表新的產品來因應。

關於 IoT 的技術與商機,全世界的雲端服務、軟硬體供應大廠,如 Amazon微軟Intel 等,最近幾年全都縱身跳入這個火坑,搶食 IoT 大餅,令人驚訝的是近年迅速崛起的中國早已不落人後,在物聯網技術領域早已卡好位置,某些核心技術文件還是中國人用中文寫的。近年一大堆歪果人流行學中文並非領略中華文化,而是破天荒要了解近來中國人急起直追的科技發展方向,正所謂學習(简体)中文是一種趨勢,中國真是推了好大一把~

不過反觀台灣,IoT 要成為發展顯學恐怕是不太可能的事,就連向下扎根到教學領域的觸及率都很低(但一直都有台灣人默默努力投入),或許大多數國人面對這件事的心態,如同臉書 / Google / 掏寶天貓一樣,到時候只會等著享受外國人、甚至中國人的創新發展成果,然後拆開來看幾個核心元件,發現其中也有台積、聯發科、日月光等爆肝台廠的影子,然後自我安慰台灣好棒棒、沒有被世界邊緣化,然後繼續熱衷炒股炒房坐收房租,再把賺到的熱錢拿去養車養房養小三。

談到學習資源, Arduino 是跨進這領域的入口,不過從 Arduino 到 MCU / SoC 商業應用的距離則是相當遙遠,如同 Hello World 程式和台鐵訂便當網站一樣的距離。Arduino 的教學資源比起七年前學習 Object-C 開發 iOS App 還多出了不知數十倍啊!用「數十倍」來形容可能還保守了點,就我的感受來說,大概是「海量不盡」vs「杯水解渴」的形容。也因為是「海量」,整理起來也相當的費事,有些常用的東西總是一而再、再而三的 Google,放到書籤不知不覺也好幾百個,所以乾脆把常用的東西整理起來好了。這篇先整理開發板 Marco 定義,因為這部分分散在開發環境中,大多數的原始碼提供者也不一定會定義清楚(畢竟能一次擁有數十種開發板的人也是極少數),所以執行起來也是各種怪現象。

廢話好像太多了~XD

ㄧ、 AVR MCU 系列

一般通用型:

#if defined (__AVR__) || (__avr__) #endif

不同開發板:可參考這個 Arduino Board Manager。以下列舉出其他種

#if defined (__AVR_ATmega328P__) #endif //Microprocessors using the ATmega328p (like the Uno) .

#if defined (__AVR_ATmega32U4__) #endif //Microprocessors using the ATmega32u4 (like Leonardo)

#if defined (__AVR_ATtiny85__) #endif //Microprocessors using the ATtiny85 chip (Trinket, Gemma, Digispark)_

#if defined (__AVR_ATmega2560__) #endif //Microprocessors using the ATmega2560 chip (Mega)

#if defined (__arm__) #endif //--底下三種的通用

#if defined (__SAM3X8E__) #endif //Due and DigiX

#if defined (__MK20DX128__) #endif //Teensy 3.0

#if defined (__MK20DX256__) #endif //Teensy 3.1

二、ESP8266 SoC 系列

一般通用型:

#if defined(ARDUINO_ARCH_ESP8266) || defined(ESP8266) #endif //使用 ESP8266 SoC 的各種模組通用

不同開發版:

#if defined (ARDUINO_ESP8266_ESP01) #endif //ESP-01 模組通用,與ESP8255、Core Development Module。V2.3 SDK

#if defined (ARDUINO_ESP8266_GENERIC) #endif //ESP-01 模組通用,與ESP8255、Core Development Module。V2.4 SDK

#if defined (ARDUINO_ESP8266_ESP07) #endif //WifInfo ESP07 (1M/192K SPIFFS)

#if defined (ARDUINO_ESP8266_ESP12) #endif //ESP-12 模組通用,如 Adafruit HUZZAH ESP8266,ESPino (ESP-12 Module),WifInfo ESP12 (4M/1M SPIFFS)

#if defined (ARDUINO_ESP8266_ESP13) #endif //ESP-13 模組通用,如 ESPDuino,ThaiEasyElec's ESPino

#if defined (ARDUINO_ESP8266_ESPRESSO_LITE_V1) #endif //ESPresso Lite 1.0

#if defined (ARDUINO_ESP8266_ESPRESSO_LITE_V2) #endif //ESPresso Lite 2.0

#if defined (ARDUINO_ESP8266_PHOENIX_V1) #endif //Phoenix 1.0

#if defined (ARDUINO_ESP8266_PHOENIX_V2) #endif //Phoenix 2.0

#if defined (ARDUINO_ESP8266_NODEMCU) #endif //使用 ESP-12(E) 的 NodeMCU 產品 0.9(即 V1)/1.0(即 V2/V3)

#if defined (ARDUINO_MOD_WIFI_ESP8266) #endif //Olimex MOD-WIFI-ESP8266(-DEV)

#if defined (ARDUINO_ESP8266_THING) #endif //SparkFun ESP8266 Thing

#if defined (ARDUINO_ESP8266_THING_DEV) #endif //SparkFun ESP8266 Thing Dev

#if defined (ARDUINO_ESP8266_ESP210) #endif //SweetPea ESP-210

#if defined (ARDUINO_ESP8266_WEMOS_D1MINI) #endif //WeMos D1 R2 & mini & WeMos D1(Retired)

檢查特定開發版的編譯語法:以 ESP8266 系列為例

#ifndef ARDUINO_ARCH_ESP8266
#error "This code is only compatible for ESP8266 board. Uncomment this line to test at your own risk."
#endif

三、ESP32 SoC 系列

一般通用型:

#if defined(ARDUINO_ARCH_ESP32) || defined(ESP32) #endif //使用 ESP32 SoC 的各種模組通用

不同開發版

#if defined (ARDUINO_ESP32_DEV) #endif //ESP32-Dev 模組通用。

四、Raspberry Pi PICO / PICO W

#if defined(ARDUINO_RASPBERRY_PI_PICO) || defined(ARDUINO_RASPBERRY_PI_PICO_W) #endif

其他開發板定義,後續慢慢補充...

arrow
arrow

    benjenq 發表在 痞客邦 留言(0) 人氣()