顯示具有 Arduino 標籤的文章。 顯示所有文章
顯示具有 Arduino 標籤的文章。 顯示所有文章

2026年3月6日 星期五

好站 : 米羅文創學院的 ESP32-CAM 教學

今天在整理 Chrome 書籤時發現之前找到的 ESP32-CAM 教學, 這是線上教學平台米羅文創釋出的公開文章 (第 3~5 篇為受保護文章, 須購買課程才能閱讀), 內容豐富鉅細靡遺值得參考 : 


雖然我主要使用 MicroPython 開發, 但韌體不支援的部分就必須改用 Arduino IDE 的 C 語言來寫了. 所幸現在有 AI, 這部分的障礙低很多了. 

2024年8月30日 星期五

ESP32-CAM 學習筆記 (一) : 安裝 Arduino IDE

今天為了交 ESP32-CAM 的作業在 LG Gram 筆電安裝 Arduino IDE, 我第一次接觸物聯網就是使用此軟體玩 Arduino, 那已是 10 年前的事了, Arduino IDE 已經從當時的 1.6 版進化到 2.3 版, 支援更多的開發版例如 ESP8266 與 ESP32 等. 


1. 下載安裝 Arduino IDE : 

Arduino IDE 下載網址 :


選擇第一個 "Windows Win 10 and newer, 64 bits" 下載安裝版比較不會有奇奇怪怪的問題 : 




點進去會問要不要捐款, 按 "Just Download" 即可直接下載 (約 146 MB), 點擊 "arduino-ide_2.3.2_Windows_64bit.exe" 執行安裝, 只要用預設值三個步驟即可完成安裝 : 







按 "完成" 開啟 IDE 視窗 : 




這時會跳出一個 mdns-discovery.exe 要求存取網路的視窗, 請按 "允許" :




接著會要求安裝與 USB 相關的驅動程式, 全部按 "安裝" :







這樣就完成 IDE 的安裝了. 


2. 偏好設定 :  

接下來開啟 File/Preference 選單進行偏好設定 : 





主要的設定項目如下 :
  • 字型大小 : 可以設為 20 以上的字型.
  • 語言介面 : 設為熟悉的繁體中文介面. 
  • 快速提示 : 可在編輯器中顯示指令提示. 
  • 外加開發板管理器網址 (Additional board manager URL) : 
    ESP32 是中國樂鑫開發的晶片, 不是 Arduino 原廠的產品, 必須指定 ESP32 的外加開發板管理器網址來安裝相容性核心, 這樣才能讓 Arduino IDE 認識此開發板, 其網址如下 : 
    https://dl.espressif.com/dl/package_esp32_index.json
按右下角的 "OK" 後 IDE 會重開套用鑫的偏好設定 : 




注意, 按外加開發板管理員欄最後面的按鈕可以新增其他開發板的 URL, 例如若要讓 Arduino IDE 支援 ESP8266 開發板, 則要添加其管理器網址 :

http://arduino.esp8266.com/stable/package_esp8266com_index.json




3. 安裝 ESP32 外加開發板相容性核心 :    

在上面偏好設定中已經指定了 ESP32 的外加開發板管理員網址, 接下來要從這個網址下載安裝 ESP32 的相容性核心, 完成後 Arduino IDE 即可支援 ESP32 C 程式碼的編譯與上傳, 同時提供大量的範例程式碼. 

按 IDE 左方導覽列第二個按鈕 (開發板), 然後在上方 "開發板管理員" 欄位中輸入 "ESP32", 應該會找到兩個開發板, 我們要下載的是第二個, 由 Espressif System 發布的 esp32 這個, 點選 2.0.17 版 (不安裝最新的第 3 版原因是某些範例執行時可能會出現錯誤), 按右邊的 "安裝" 即開始下載並安裝 :  




輸出視窗訊息 : 

下載安裝包
arduino:dfu-util@0.11.0-arduino5
esp32:esptool_py@4.5.1
esp32:mklittlefs@3.0.0-gnu12-dc7f933
esp32:mkspiffs@0.2.3
esp32:openocd-esp32@v0.12.0-esp32-20230921
esp32:riscv32-esp-elf-gcc@esp-2021r2-patch5-8.4.0
esp32:riscv32-esp-elf-gdb@11.2_20220823
esp32:xtensa-esp-elf-gdb@11.2_20220823
esp32:xtensa-esp32-elf-gcc@esp-2021r2-patch5-8.4.0
esp32:xtensa-esp32s2-elf-gcc@esp-2021r2-patch5-8.4.0
esp32:xtensa-esp32s3-elf-gcc@esp-2021r2-patch5-8.4.0
esp32:esp32@2.0.17
安裝 arduino:dfu-util@0.11.0-arduino5...
設定工具
arduino:dfu-util@0.11.0-arduino5 已安裝
安裝 esp32:esptool_py@4.5.1...
設定工具
esp32:esptool_py@4.5.1 已安裝
安裝 esp32:mklittlefs@3.0.0-gnu12-dc7f933...
設定工具
esp32:mklittlefs@3.0.0-gnu12-dc7f933 已安裝
安裝 esp32:mkspiffs@0.2.3...
設定工具
esp32:mkspiffs@0.2.3 已安裝
安裝 esp32:openocd-esp32@v0.12.0-esp32-20230921...
設定工具
esp32:openocd-esp32@v0.12.0-esp32-20230921 已安裝
安裝 esp32:riscv32-esp-elf-gcc@esp-2021r2-patch5-8.4.0...
設定工具
esp32:riscv32-esp-elf-gcc@esp-2021r2-patch5-8.4.0 已安裝
安裝 esp32:riscv32-esp-elf-gdb@11.2_20220823...
設定工具
esp32:riscv32-esp-elf-gdb@11.2_20220823 已安裝
安裝 esp32:xtensa-esp-elf-gdb@11.2_20220823...
設定工具
esp32:xtensa-esp-elf-gdb@11.2_20220823 已安裝
安裝 esp32:xtensa-esp32-elf-gcc@esp-2021r2-patch5-8.4.0...
設定工具
esp32:xtensa-esp32-elf-gcc@esp-2021r2-patch5-8.4.0 已安裝
安裝 esp32:xtensa-esp32s2-elf-gcc@esp-2021r2-patch5-8.4.0...
設定工具
esp32:xtensa-esp32s2-elf-gcc@esp-2021r2-patch5-8.4.0 已安裝
安裝 esp32:xtensa-esp32s3-elf-gcc@esp-2021r2-patch5-8.4.0...
設定工具
esp32:xtensa-esp32s3-elf-gcc@esp-2021r2-patch5-8.4.0 已安裝
安裝平台 esp32:esp32@2.0.17 
設定平台
平台 esp32:esp32@2.0.17 已安裝

安裝大約需要 5~10 分鐘. 

完成後點選 "工具/開發板" 若有出現 esp32 子選單表示安裝完成 :




4. 安裝常用函式庫 :    

在物聯網應用中常會用到如下函式庫 : 
  • PubSubClient : 用來傳遞 MQTT 訊息 
  • ArduinoJson : 解析 JSON 格式資料
  • TridenTD_Linenotify : 傳遞 Line Notify 訊息
按 IDE 左邊導覽列第三個按鈕 (書架圖示), 然後於上方 "程式庫管理員" 欄位中輸入函式庫名稱即可搜尋. 除 TridenTD_Linenotify 安裝 3.0.5 版外, 前面兩個都安裝最新版 :






5. 安裝載板 USB 驅動程式 :    

ESP32-CAM 是透過載板上的 USB 介面與 PC 連接, 而一般的轉接板通常使用 CH340/CH341 與 CP2102 這兩種 USB 晶片. 其中以 CH340/CH341 最為廣用, Win10/11 通常都已內建其驅動程式, 所以將 ESP32 透過載板與 PC 連接時, 開啟裝置管理員的 "連接埠 (COM 與 LPT)" 若有出現 CH340 的串列埠即表示已有驅動程式, 可直接上傳程式 :




如果出現錯誤訊息 (裝置管理員連接埠出現黃色三角形), 則須下載驅動程式來安裝 : 


解開 zip 檔後執行 SETUP.EXE 按 Install 鈕安裝即可 :




如果 USB 轉接板 (載板) 使用 CP210X 晶片則要下載下列驅動程式來安裝 :



2024-09-11 補充 :

Randonerd 也有詳細教學 :


2024年4月1日 星期一

好站 : 老葉說事 YEHSTALK

今天在逛博客來時發現這本書 : 



Source : 博客來


內容涵蓋樹莓派 Pi4B 與 Arduino, ESP32 等物聯網常用開發板的應用, 尤其是用 Arduino 實作數位濾波器 (Butterworth) 我還是第一次看到這種應用. 作者是專精電機控制的專家, 我也訂閱了他在 YT 非常有深度的教學頻道 : 


2023年12月13日 星期三

可在嵌入式裝置上執行的 AI 框架 : AIfES

12/12 購物節本想在 momo 買旗標的實驗書套件 (定價 1599, 折扣優惠 $1060) :


但考量目前時間不夠用, 買來也是晾著就打消了. 但檢視目錄發現第三章介紹 AIfES, 頓時對這陌生的縮寫感到好奇, 搜尋才知道原來是一種可在嵌入式裝置上執行的 AI 框架, 甚至能在 8 位元的 Arduino UNO 上跑 (Arduino IDE 支援), 參考 :


此框架為開源專案, 原始碼寄存在 GitHub, 參考 :


先記下來, 有機會再研究. 

2022年5月13日 星期五

Arduino Nano RP2040 開發板 (MicroPython)

今天在露天找到一塊可用 MicroPython 開發的 Arduino Nano RP2040 控制板 :




此板內建 WiFi 與藍牙 (採用 Nina W102 ublox), 板載六軸加速度計與陀螺儀以及一個麥克風模組與一顆 RGB 全彩 LED, 採用樹莓派基金會開發的 ARM Cortex M0+ 32 位元雙核處理器 RP2040, 運作時脈高達 133MHz, 擁有 264KB SRAM 與 16MB Flash, 可說是樹莓派 Pico 的 IoT 增強版, 與 ESP32 以及 Pico 的規格比較如下表 :

 規格 Arduino Nano RP2040 ESP32 (NodeMCU) Raspberry Pi pico
 MPU RP2040 Tensilica LX6 Dual RP2040
 Bit 32-bit 32-bit 32-bit
 Clock 133 MHz 240 MHz 133 MHz
 SRAM 264 KB 512 KB 268 KB
 Flash 16 MB 32 MB 2 MB
 Analog 8 18 3
 Digital 22 39 26
 PWM 20 16 16
 UART 1 2 2
 SPI 1 4 2
 I2C 1 2 2

可見 Arduino Nano RP2040 的規格非常強悍, 光是內建 WiFi 與藍芽就遠勝 Pico, 但價格卻不便宜, 我在露天找到最便宜的是一片 980 元, 約是 Pico 的 6 倍多, 參考 :


另外一家 RS 則更便宜, 約 800 元 (但也可以買 5 片 Pico, 3 片 ESP32 了) :


但跟 ESP32 比起來, 若不考量板載感測器與致動器的話, 規格就有點遜色了, 而且 CP 值也較低 (ESP32 價格約 230~280 左右), 所以我目前暫時不考慮, 參考 :


此開發板可用 Arduino IDE C 語言或 MicroPython 開發, MicroPython 的教學文件參考 : 


C 語言的教學文件參考 :



2022-05-20 補充 :

今天在 Learn ESP32 Cookbook 這本書上看到 ESP32 與 Nano RP2040 的比較, 認為 Nano RP2040 因為內建麥克風與加速器陀螺儀, 適合用在穿戴式裝置, 而 ESP32 則適合功耗考量較重要的應用. 

2022年5月6日 星期五

物聯網開發板 Emakefun LGT-RF-Nano=Arduino Nano + NRF24L01

今天在 Aliexpress 看到一款將 Arduino Nano 與射頻無線通訊板 NRF24L01 結合在一起的開發板 Emakefun LGT-RF-Nano : 


五片裝美金 24 元, 以 29.5 匯率算合台幣 708 元, 平均每片約 142 元. 該公司也有賣單片裝的, 但較貴些, 約台幣 163 元 :


Source : Aliexpress


因為多了板上 RF 天線, 所以尺寸上比 Arduino Nano 稍長 (5 cm). 此板硬體與電氣規格與 Arduino Nano 一樣, 所用的微處理器 LGT8F328P 與 Atmega328P 相容, 因此可以用 Arduino IDE 開發, 總之把它當成 Arduino Nano 用就可以了. 

兩板合一的好處就是省掉了一些 SPI 介面的接線, 最重要的是成本考量, 一片 NRF24L01 大約 70 元, Arduino Nano 以前一片最便宜約 100 元左右, 但疫情後全球缺晶片, Atmega328P 據說價格漲兩倍, 現在一片 Nano 板子要 180 元, 兩個加起來就要 250 元, 而 LGT-RF-Nano 單片才賣 163 元真的很有競爭力. 

要注意的是, 此板須使用 Arduino IDE 1.8.6 版以上, 且要在下列網址下載安裝驅動程式 : 


不過根據我以前測試 NRF24L01 經驗, 使用 PCB 天線輻射能量較小, 傳播距離有限, 在空曠地區大約是 100~150 公尺左右, 在室內轉個角繞過一面牆大概就 GG 了, 要用外接 IPX 天線才能擴大傳輸距離, 但此板並不支援外接天線. 

2022年2月6日 星期日

可用來製作時鐘的 4 位元 LED 顯示模組 (TM1637)

去年年底發現鄉下家的掛鐘只有秒針正常轉, 分針與時針原地不動, 換了兩次電池情況依舊, 取下觀察發現似乎是裡面的塑膠齒輪鬆掉了, 無法帶動時針與分針所致. 本想買個新的, 但想說何不自己用 ESP8266 做個網路時鐘呢? 今天上 Aliexpress 找到下面這款四位元的七段 LED 顯示模組, 中間有個冒號看來是專門用來顯示時間的 : 



Source : Aliexpress


10 片裝 6.96 美金折台幣約每片不到 20 元, 但要一個月才能到貨. 

露天也有賣, 價格約 20~30 元左右 : 


這種模組用四個 0.36 英吋共陽極 LED 組成, 操作電壓 3.3~5V, 最大電流 80mA, 故最大功耗低於 0.5W, 有 8 階亮度可調, 尺寸 42*24*12 mm, 有 GND, VCC, DIO, CLK 四個外部接腳, 使用背板上一顆 TM1637 晶片驅動, Arduino IDE 的 DigitalTube 下有如下範例程式可用 : 
  1. ClockDisplay : 使用 timer1 顯示時鐘
  2. NumberFlow : 由左向右流動顯示 0~9, A, b, C, d, E, F等 16 個字元
  3. StopWatch: 使用 timer1 計時, 可配合按鍵實作碼錶功能
8 階亮度可呼叫 set(0~7) 函數控制. 

GitHub 上有現成的 MicroPython 驅動程式, 參考 : 


如果使用 Arduino 控制的話須加 RTC 模組; 若用 ESP8266/ESP32 的話則不必, 直接透過 WiFi 查詢 NTP 伺服器更新內部時鐘即可, 這樣還可順便觀察光世代網路是否正常連線, 例如 NTP 查詢失敗就讓時間顯示改成閃爍等. 

2021年10月6日 星期三

Arduino MKR1000 開發板

今天在露天偶然發現 Arduino MKR1000 開發板 : 





這是 Arduino Zero 與 WiFi Shield 功能合而為一的新產品, 最大亮點就是內建 WiFi 與 DAC/ADC. 此外還自帶了 LiPo 連接器, 可直接使用鋰電池供電. 雖然外部電源是 5V, 但內部運行電壓是 3.3V 以節省耗電. CPU 是 ARM Cortex M0+ 家族的 SAMD21 SoC, 最高時脈 48 MHz. 參考 : 


與同樣內建 WiFi 的 ESP8266 與 ESP32 規格比較如下表 :

 
 功能  Arduino MKR1000  ESP8266  ESP32
 CPU  SAMD21 Cortex-M0+  Tensilica Xtensa LX106  Tensilica Xtensa LX6
 資料寬度  32 位元  32 位元  32 位元
 核心數  單核心  單核心  雙核心
 操作頻率  48MHz  80/160MHz  160/240MHz
 SRAM  32KB  160KB  512KB
 Flash  256KB  1-4MB  4-16MB
 WiFi  802.11 b/g/n  802.11 b/g/n  802.11 b/g/n/a/c
 Bluetooth  無  無  Bluetooth 5.0 LE
 DIO  有 (22 個)  有 (8 個)  有 (18 個)
 ADC  有 (7 個 8/10/12 bit)  有 (1 個)  有 (18 個)
 DAC  有 (1 個 10 bit)  無  有 (2 個)
 UART  有 (1 組)  有 (1 組)  有 (3 組)
 I2C  有 (1 組)  有 (1 組)  有 (2 組)
 I2S  有 (1 組)  有 (1 組)  有 (2 組)
 SPI  有 (1 組)  有 (1 組)  有 (3 組)
 PWM  有 (12 個)  有 (8 個)  有 (16 個)
 電容觸控輸入  無  無  有 (10 個)


參考:


除了 DAC/ADC 贏 ESP8266 之外, 在 RAM/FLASH 等規格上都輸 ESP8266, 更別說跟 ESP32 相比了 (ESP32 除了擁有更多 ADC/DAC 外還內建藍芽). 如果加上價格因素, MKR1000 遠遠無法與 ESP 系列競爭, 一片要價約 1000~1200 元台幣 :


但一片 NodeMCU ESP32S 開發板只要 200~300 元左右, 顯然 MKR1000 的 CP 值太低. 而且 32KB 的 RAM 對較複雜的應用恐怕有點少, 系統的效能也會受到影響. 

2021年6月8日 星期二

好站 : 天花板隨記 (Raspberry Pico)

最近在用樹莓派架設 WordPress 網站的過程中找到下面這個 "天花板隨記" 部落格, 版主興趣與我重疊度高, 所寫文章具有極高技術性與參考價值, 所以特別記下來 :


其中特別吸睛的是, 版主已做完大部分的 Raspberry Pi Pico 實驗 :
  1. Raspberry Pi Pico筆記(1):初次安裝與撰寫MicroPython程式讓LED閃爍
  2. Raspberry Pi Pico筆記(2):按鍵開關控制LED亮滅
  3. Raspberry Pi Pico筆記(3):超音波感測器HC-SR04測量距離
  4. Raspberry Pi Pico筆記(4):使用Arduino IDE撰寫C語言程式控制Pico
  5. Raspberry Pi Pico筆記(5):1602LCD顯示時間及板載溫度
  6. Raspberry Pi Pico筆記(6):使用七段顯示器計數
  7. Raspberry Pi Pico筆記(7):TM1637四位數七段LED顯示日期時間及DS18B20的溫度
  8. Raspberry Pi Pico筆記(8):MAX7219 8x8 LED顯示開發板溫度
  9. Raspberry Pi Pico筆記(9):搖桿控制ULN2003APG步進馬達模組
  10. Raspberry Pi Pico筆記(10):L298N模組控制馬達
  11. Raspberry Pi Pico筆記(11):控制伺服馬達Servo
  12. Raspberry Pi Pico筆記(12):SSD1306 LCD顯示線條/圖片(上)
    Raspberry Pi Pico筆記(12):SSD1306 LCD顯示線條/圖片(下)
  13. Raspberry Pi Pico筆記(13):RFID讀取並控制LED燈號
  14. Raspberry Pi Pico筆記(14):外接 SD Card 資料寫入與讀取
  15. Raspberry Pi Pico筆記(15):HC05藍芽模組控制 LED 亮滅
這實在令我既汗顏又興奮, 汗顏的是我那三塊 Pico 板買來已數月, 卻僅只於偶而拿出來觀賞的份; 興奮的是有這麼棒的教學文章前導, 等我要做實驗時速度就飛快了, 似乎只要複製貼上就好了, 哈哈, 有 Internet 真好, Tim Berners-Lee 實在是偉人. 

除了 Pico 筆記外, 版主還有整套 Android, Arduino, 與 STM32 筆記, 尤其 Arduino 還寫了上百篇, 這種耐力與實力實在令我敬佩, 等我有空複習 Arduino 時再來施展吸星大法. STM32 我也很想學學, 聽說在飛控方面用得蠻多的. 

2021年2月13日 星期六

好文 : 關於 SPI (Serial Peripheral Interface) 介面

年前在訂購 74 系列 IC 零件時搜尋移位暫存器資料意外找到下面這兩篇鐵人賽文章, 圖文並茂把 SPI 通訊協定原理一次說明白, 非常值得參考 :


這篇其實是 Linux 系列文章的一部份 :


雖然之前玩 Arduino 與 ESP8266 時已摸過使用 SPI 的模組, 但看了這篇才真正了解其運作原理. 我其實比較喜歡 I2C 介面 (接腳較少操作簡便, 但半雙工), 但 SPI 有其獨特優點 (高速全雙工), 而且使用 SPI 的模組也不少 (例如 NRF24L01 無線模組), 所以還是要熟悉一下比較好. 關於 I2C 與 SPI 之差異比較參考 :

# I2C、SPI、UART三種通信總線有什麼區別?面試時回答不上來?

2021年2月6日 星期六

好站 : 天花板隨記

 今天找到一個很不錯值得挖寶的網站 : 


作者看來是位硬體控專家, 所寫文章除 STM 系列我從未接觸以外, 另外兩大主題 Arduino 與樹莓派都是我曾學過與正在學習精進的科目, 而且大部分都是我看過之後躍躍欲試的項目, 有空就來施展吸星大法吧. 以後中午吃飯時間就來瀏覽此站文章, 勝過看了就心煩的 Yahoo 新聞多太多. 

Yahoo 新聞底下的留言千萬不要看, 都是那邊漂過來的垃圾居多, 不值得你寶貴的時間. 

2020年11月30日 星期一

Arduino Nano 33 IoT 開發板

今天在 iThome 看到一篇介紹 Arduino 新板子 Nano 33 IoT 的文章, 才知道去年五月就已經推出, 真是後知後覺. 這兩年我都轉向到 ESP8266/ESP32, 對 Arduino 失去關注的動力, 沒想到 Arduino 繼續推陳出新, 特別是針對 Nano 這款我以前最喜歡的板子 : 

# 深入淺出看ARDUINO NANO 33 IOT

這四款板子係針對不同需求而設計 :
  • Arduino Nano Every :
    這是以前的 Nano 進化版 (MPU 改用 ATMega4809), 5V 工作電壓, 20 MHz 時脈, 48KB Flash, 6KB SRAM, 8 個 ADC 腳, 5 個 PWM 腳, USB 晶片改用 ATSAMD11D14A, 適合一般專案用.
  • Arduino Nano 33 IoT : 
    MPU 採用 SAMD21 Cortex®-M0+ 32bit ARM 架構, 3.3V 工作電壓, 48 MHz 時脈, 256KB Flash, 32KB SRAM, 14 個 DIO 腳, 8 個 ADC 腳, 1 個 DAC 腳, 11 個 PWM 腳, USB 晶片內建於 MPU 中, 內建 WiFi 與藍芽能力與安全 IoT 連線, 適合 WiFi/BLE 物聯網專案用.
  • Arduino Nano 33 BLE : 
    MPU 採用 ARM® Cortex™-M4 架構之 nRF52840, 3.3V 工作電壓, 64 MHz 時脈, 1MB Flash, 256KB SRAM, 14 個 DIO 腳 (全部具備 PWM), 8 個 ADC 腳, 無 DAC 腳, USB 晶片內建於 MPU 中, 內建 9 軸感測器與藍芽安全 IoT 連線, 適合穿戴式或短距離無線訊專案用.
  • Arduino Nano BLE Sense : 
    MPU 採用 ARM® Cortex™-M4 架構之 nRF52840, 3.3V 工作電壓, 64 MHz 時脈, 1MB Flash, 256KB SRAM, 14 個 DIO 腳 (全部具備 PWM), 8 個 ADC 腳, 無 DAC 腳, USB 晶片內建於 MPU 中, 內建麥克風, 溫溼度感測器, 氣壓計, 亮度與色彩感測器, 9 軸感測器, 以及藍芽安全 IoT 連線功能等等, 適合各種物聯網專案用.

這四款板子最便宜的是 Nano Every, 其次是 Nano 33 IoT, 然後是 Nano BLE, 最貴的是 Namo BLE Sense, 參考露天 : 


2020年11月5日 星期四

好站 : 用 Arduino 製作信號產生器

二哥這學期轉到電機系後做電子實習挺認真, 有時先在家連好電路再帶去學校, 這樣比較節省時間, 甚至想說前一晚先測試看看電路是否可動作, 但可惜家裡沒有信號產生器. 

我在 Youtube 看到下面這部影片, 介紹如何利用 Arduino 製作正弦波信號產生器 : 

# How to Generate Sine Wave using Arduino??

 


Arduino UNO 有 6 個類比輸出入腳 (A0~A5) 可用來輸出正弦波信號, 加上可變電阻與運算放大器可以將信號放大, 14 個 DIO 數位輸出入腳 (D0~D13) 則可用來輸出方波信號, 有空找好零件來製作一個唄. 

參考 :

# Arduino Waveform Generator

2020年8月7日 星期五

好站 : IOT 物聯網之 ESP8266 的世界

今天在臉書的 ESP8266 社群看到有人分享實作文章, 我覺得非常有參考價值, 轉貼連結如下 :

# IOT 物聯網之 ESP8266 的世界

作者使用 Arduino IDE 進行 ESP8266 開發, 因此使用 C 語言語法. 這個方式對熟悉 Arduino 開發者很容易入手, 但我淺嚐即止, 一是時間有限, 二是我轉向使用 MicroPython 開發, 因為我覺得 C 語言在處理字串上比較麻煩.

2020年8月4日 星期二

好站 : 佑來認真教的 Arduino 教學 (超簡單超詳細)

最近打算製作一個風速計, 需要用到紅外線感測, 今天在找尋紅外線資料時偶然逛到 "佑來認真教" 這個 Yotube 頻道, 作者製作了完整的一整套 Arduino 教學影片, 我看完後只能說, 這位老師太棒了! 我也曾經想要找時間來錄製這樣的影片, 但現在不用了, 我不會教得比這位老師好, 大推!!!

# 【Arduino教學】選購板子
# 【Arduino教學】程式安裝
# 【Arduino教學】CH340驅動
# 【Arduino教學】實作01-基礎Blink
# 【Arduino教學】實作02-進階Blink
# 【Arduino教學】實作03-按鈕教學
# 【Arduino教學】實作04-序列埠輸出
# 【Arduino教學】實作05-按鈕Debounce
# 【Arduino教學】實作06-類比訊號輸入
# 【Arduino教學】實作07-伺服馬達SG-90
# 【Arduino教學】實作08-74HC595(上)
# 【Arduino教學】實作09-74HC595(下)
# 【Arduino教學】實作10-步進馬達教學
# 【Arduino教學】實作11- 8×8 點矩陣LED
# 【Arduino教學】實作12- WiFi無線入門
# 【Arduino教學】實作13- WiFi控制LED
# 【Arduino教學】實作14- 紅外線遙控LED(使用arduino nano)
# 【Arduino教學】實作15- arduino最小化(燒錄至attiny85)
# 【Arduino教學】實作16-最簡單的無線控制

會的人不一定會教, 教的人一定要會, 這位老師實在是一位優秀講師.

我離開 Arduino 應用已經很久了, 雖然現在大部分使用 ESP32/ESP8266 on MicroPython, 但有時候 Arduino 還是很有用 (例如需要較多類比輸出入腳時).

2020年6月4日 星期四

好站 : Last Minute Engineers

今天在 "Last Minute Engineers" 這個網站看到豐富的 ESP32 教學內容, 而且 裡面收錄了很多有趣的專案, 閒暇時可以試著改用 MicroPython 來實作 :

# https://lastminuteengineers.com/esp32-arduino-ide-tutorial/

此網站使用 Arduino IDE 為開發工具, 亦即使用的是 Arduino 版的 C 語言, 對於非 IT 科班者門檻稍高些, 但也只是程式語言部份而已. Arduino IDE 的好處是內建了許多 C 語言範例程式可以馬上套用或修改.

不過 Arduino IDE 的缺點是, 每次改程式都要重新燒寫韌體有點麻煩, 如果用 MicroPython 的話只要燒錄一次映像檔即可, 它會建立一個簡單的檔案系統, 更改程式後只要上傳 main.py 即可, 不須燒錄韌體. 但是如果要用到 ESP32 內建的藍芽連線功能的話, 目前還是要用 Arduino IDE 才行, 因為 MicroPython on ESP32 直到 1.12 版才開始加入藍芽模組, 且還在持續完善中.

2020年5月23日 星期六

好書 : Arduino Cookbook 第三版

歐萊禮這本經典好書從 2011 年發行第一版以來就被視為 Arduino 學習的聖經, 我剛開始學 Arduino 就是從圖書館借這本書的中譯本開始的, 書中的程式碼都是可以發揮即戰力的實用參考範例, 我大部分都有實際跑過. 好消息是此書已在四月份推出了第三版 :

# Arduino Cookbook, 3rd Edition


Source : Oreilly


從目錄來看, 雖然整體還是維持 18 章不變, 但此版增修了非常多內容, 其中的亮點是在第 15 章新增了便宜的 WiFi 模組 ESP8266 的用法, 可見 ESP8266 已經奠定了低成本物聯網模組的關鍵地位. 此外此版也改寫或刪除了許多章節, 例如早已被併購的 Pachube 服務, 也增添了越來越火紅的 MQTT 協定等.

雖然說在物聯網終端模組的選擇上我早已改用 ESP32, 但 Arduino 在價格與教學上仍然具有其優勢, 尤其是 Arduino IDE 開發工具也可以用來開發 ESP8266/ESP32 應用就非常棒, 因為裡面內建了非常多範例可以直接套用修改, 只是 C 語言對於非科班的人來說還是形成一道障礙, 如果未來 Arduino IDE 可以做到 C/MicroPython 雙重支援的話那就無敵了.

2020年3月26日 星期四

MakeHub.tw 小型太陽能板改接 18650

我在 2015 年向露天賣家 MCUAPP 買了一個 1W 的小型太陽能充電模組套件, 包含一塊 1W 小型太陽能板, 一塊充電控制器, 以及一個 2200 mAH 的鋰聚合物電池, 參考 :

# MakeHub含稅原廠公司貨太陽能 1W 5100mAh 充電供電蓄電套件

但後來鋰聚合物電池壞掉充不進去, 整個套件就收起來沒在用了. 最近整理電子零件盒翻出這套件, 覺得不用太可惜, 就缺個鋰電池而已不是嗎? 根本就可以直接用 18650 代替啊! 不過之前的鋰電池插頭不見了, 所以今天中午飯後就帶了整個模組, 騎我的小白去長明街的禾樺找, 經過比對終於找到了, 是編號 2.0mm 的 F27-02P (公) 與 F29-02P (母) 端子, 我需要的是母接頭, 它需要搭配同樣 2.0mm 的端子線, 把端子插進去時會卡住 :





注意, 線頭的端子插入 F29-02P 母座孔時有方向性, 如果插不進去就把線頭轉 180 度即可. 我在零件箱找到之前買的一節 18650 電池盒剛好拿來用, 用烙鐵將紅黑線對映焊好後放入 18650 測試 OK, 驅動 ESP32 NodeMCU 板子沒問題 :




我打算把這個迷你 1W 太陽能板放在監控鳥屋上, 不管是做大門監控或菜園環境監測都不錯, 只是雨季時 18650 能撐幾天還要經過測試觀察才知, 當然 ESP32 沒在工作時進入休眠對省電也有幫助.

目前在露天還是能買到此組套件 (不含鋰聚合物電池, 另購), 參考 :

# MakeHub.tw公司貨1W 太陽能充電供電蓄電套件,適用 Arduino 等 MCU 開發板 $420
# MakeHub.tw含稅高品質2000mAH 103450P鋰離子鋰電池適合LiPo Rider $250
# MakeHub.tw含稅原裝單晶矽太陽能電池板、太陽能板 5.5V 1W 80x100 mm2 $140
# MakeHub.tw 5V 穩壓LiPo Rider v1.3可充電 3.7V 鋰離子電池 $280

可見買整組套件較便宜. 另外此賣家還有賣太陽能布, 這似乎可以用在固定翼的太陽能飛機上 :

# MakeHub.tw含稅公司貨 2.6V 2.5W CIGS Solar Cloth 可穿戴式太陽能布 $650
# MakeHub.tw含稅公司貨 1.3V 1.25W CIGS Solar Cloth 可穿戴式太陽能布 $350

2019年7月2日 星期二

關於 Arduino Web Editor 無法上傳問題 (not in sync)

上週買的 ESP32-CAM 開發板經我上網研究, 發現目前還沒有 MicroPython 的範例程式碼釋出, 因此得先用 Arduino IDE 去開發. 但我這台 Acer Swift5 今年初買來至今尚未做過 Arduino 實驗, 故需下載 Arduino IDE 才行. 但到官網卻赫然發現 Arduino 居然已經有雲端線上版本, 好處是不需下載永遠是最新版, 那就先註冊個帳號吧!

# Sign up an Arduino account




使用 email 註冊後收信, 按信中的確認連結完成註冊即可 :





接著在 Aduino 官網首頁右上角按 Sign in 登入帳號後, 點選 Software/Online Tools 再按左上角的 Arduino Web Editor  :






這時會出現下載 Arduino plugin 提示訊息, 點選超連結下載 plugin 後執行 Arduino create agent :




這樣就可以將 Arduino 板子連接 USB 埠開始使用了. 先選擇板子與 COM 埠, 我使用的是 Nano 與 COM7 :





然後從左邊 Example/Basics 選取 Blinks 範例, 再按向右鍵 (Upload) 上傳程式 :




但是, 過了很久還是一直顯示 Busy, 最後底下的訊息視窗顯示如下 "not in sync" 的錯誤訊息 :

/home/builder/opt/arduino-builder/arduino-builder -compile -core-api-version 10611 -hardware /home/builder/opt/arduino-builder/hardware -hardware /home/builder/.arduino15/packages -tools /home/builder/opt/arduino-builder/tools -tools /home/builder/.arduino15/packages -built-in-libraries /home/builder/opt/libraries/latest -logger humantags -fqbn arduino:avr:nano:cpu=atmega328 -build-cache /tmp -build-path /tmp/701031103/build -verbose -prefs runtime.tools.arduinoOTA.path=/home/builder/.arduino15/packages/arduino/tools/arduinoOTA/1.2.1 -prefs runtime.tools.arm-linux-gcc.path=/home/builder/.arduino15/packages/arduino/tools/arm-linux-gcc/4.9.3 -prefs runtime.tools.arm-none-eabi-gcc.path=/home/builder/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4 -prefs runtime.tools.arc-elf32.path=/home/builder/.arduino15/packages/Intel/tools/arc-elf32/1.6.9+1.0.1 -prefs runtime.tools.arduino101load.path=/home/builder/.arduino15/packages/Intel/tools/arduino101load/2.0.1 -prefs runtime.tools.i586-poky-linux-uclibc.path=/home/builder/.arduino15/packages/Intel/tools/i586-poky-linux-uclibc/1.6.2+1.0 -prefs runtime.tools.openocd.path=/home/builder/.arduino15/packages/arduino/tools/openocd/0.10.0-arduino7 -prefs runtime.tools.dfu-util.path=/home/builder/.arduino15/packages/arduino/tools/dfu-util/0.9.0-arduino1 -prefs runtime.tools.CMSIS-Atmel.path=/home/builder/.arduino15/packages/arduino/tools/CMSIS-Atmel/1.2.0 -prefs runtime.tools.bossac.path=/home/builder/.arduino15/packages/arduino/tools/bossac/1.7.0 -prefs runtime.tools.sketchUploader.path=/home/builder/.arduino15/packages/Intel/tools/sketchUploader/1.6.2+1.0 -prefs runtime.tools.CMSIS.path=/home/builder/.arduino15/packages/arduino/tools/CMSIS/4.5.0 -prefs runtime.tools.x86-linux-gcc.path=/home/builder/.arduino15/packages/arduino/tools/x86-linux-gcc/7.2.0 -prefs runtime.tools.linuxuploader.path=/home/builder/.arduino15/packages/arduino/tools/linuxuploader/1.5.1 -prefs runtime.tools.flashpack.path=/home/builder/.arduino15/packages/Intel/tools/flashpack/2.0.0 -prefs runtime.tools.avrdude.path=/home/builder/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino14 -prefs runtime.tools.nrf5x-cl-tools.path=/home/builder/.arduino15/packages/arduino/tools/nrf5x-cl-tools/9.3.1 -prefs runtime.tools.avr-gcc.path=/home/builder/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2 -prefs runtime.tools.core2-32-poky-linux.path=/home/builder/.arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0 -libraries /tmp/701031103/custom -libraries /tmp/701031103/pinned /tmp/701031103/Blink
Sketch uses 930 bytes (3%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
Programming with: Serial
Flashing with command:C:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/bin/avrdude.exe -CC:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/etc/avrdude.conf -v -patmega328p -carduino -PCOM9 -b115200 -D -Uflash:w:C:/Users/User/AppData/Local/Temp/arduino-create-agent194799784/Blink.hex:i
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/etc/avrdude.conf"
Using Port : COM9
Using Programmer : arduino
Overriding Baud Rate : 115200
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x46
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x46
avrdude done. Thank you.

查詢網路有人說電腦重開機即可, 但我試過那不管用. 我用下載下來的 Arduino IDE 上傳就可以順利上傳.

後來在 Stack overflow 下面這篇的第 13 個回應找到解答, 原來我這塊 Nano 的 MPU 比較舊, 要選 "Atmega328P (Old Bootloader)" :

# “avrdude: stk500_getsync(): not in sync: resp=0x00,” aka Some Dude Named Avr Won't Let Me Upload My Program

"Change Tools->Processor->Atmega 328P to Atmega 328P (Old Bootloader). Remind that the Processor option is only available when you select some specific Boards at Tools>Board.
This worked for my Arduino Nano with CH340, using Arduino IDE 1.8.5 under Linux Ubuntu 17.10. Besides, this will probably happen if you use IDE 1.8.9 or newer and you get an old or cloned Nano."

我更改板子為 Atmega328P (Old Bootloader) 後就解決上傳問題了 :




上傳成功的訊息如下 :

/home/builder/opt/arduino-builder/arduino-builder -compile -core-api-version 10611 -hardware /home/builder/opt/arduino-builder/hardware -hardware /home/builder/.arduino15/packages -tools /home/builder/opt/arduino-builder/tools -tools /home/builder/.arduino15/packages -built-in-libraries /home/builder/opt/libraries/latest -logger humantags -fqbn arduino:avr:nano:cpu=atmega328old -build-cache /tmp -build-path /tmp/690911048/build -verbose -prefs runtime.tools.arm-none-eabi-gcc.path=/home/builder/.arduino15/packages/arduino/tools/arm-none-eabi-gcc/7-2017q4 -prefs runtime.tools.avr-gcc.path=/home/builder/.arduino15/packages/arduino/tools/avr-gcc/5.4.0-atmel3.6.1-arduino2 -prefs runtime.tools.openocd.path=/home/builder/.arduino15/packages/Intel/tools/openocd/0.9.0+0.1 -prefs runtime.tools.x86-linux-gcc.path=/home/builder/.arduino15/packages/arduino/tools/x86-linux-gcc/7.2.0 -prefs runtime.tools.arm-linux-gcc.path=/home/builder/.arduino15/packages/arduino/tools/arm-linux-gcc/4.9.3 -prefs runtime.tools.arc-elf32.path=/home/builder/.arduino15/packages/Intel/tools/arc-elf32/1.6.9+1.0.1 -prefs runtime.tools.arduinoOTA.path=/home/builder/.arduino15/packages/arduino/tools/arduinoOTA/1.2.1 -prefs runtime.tools.nrf5x-cl-tools.path=/home/builder/.arduino15/packages/arduino/tools/nrf5x-cl-tools/9.3.1 -prefs runtime.tools.flashpack.path=/home/builder/.arduino15/packages/Intel/tools/flashpack/2.0.0 -prefs runtime.tools.i586-poky-linux-uclibc.path=/home/builder/.arduino15/packages/Intel/tools/i586-poky-linux-uclibc/1.6.2+1.0 -prefs runtime.tools.sketchUploader.path=/home/builder/.arduino15/packages/Intel/tools/sketchUploader/1.6.2+1.0 -prefs runtime.tools.CMSIS.path=/home/builder/.arduino15/packages/arduino/tools/CMSIS/4.5.0 -prefs runtime.tools.bossac.path=/home/builder/.arduino15/packages/industruino/tools/bossac/1.7.0-industruino -prefs runtime.tools.dfu-util.path=/home/builder/.arduino15/packages/arduino/tools/dfu-util/0.9.0-arduino1 -prefs runtime.tools.avrdude.path=/home/builder/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino14 -prefs runtime.tools.arduino101load.path=/home/builder/.arduino15/packages/Intel/tools/arduino101load/2.0.1 -prefs runtime.tools.core2-32-poky-linux.path=/home/builder/.arduino15/packages/Intel/tools/core2-32-poky-linux/1.6.2+1.0 -prefs runtime.tools.CMSIS-Atmel.path=/home/builder/.arduino15/packages/arduino/tools/CMSIS-Atmel/1.2.0 -prefs runtime.tools.linuxuploader.path=/home/builder/.arduino15/packages/arduino/tools/linuxuploader/1.5.1 -libraries /tmp/690911048/custom -libraries /tmp/690911048/pinned /tmp/690911048/Blink
Sketch uses 930 bytes (3%) of program storage space. Maximum is 30720 bytes.
Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes.
Programming with: Serial
Flashing with command:C:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/bin/avrdude.exe -CC:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/etc/avrdude.conf -v -patmega328p -carduino -PCOM9 -b57600 -D -Uflash:w:C:/Users/User/AppData/Local/Temp/arduino-create-agent680988764/Blink.hex:i
avrdude: Version 6.3-20171130
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch
System wide configuration file is "C:/Users/User/.arduino-create/arduino/avrdude/6.3.0-arduino14/etc/avrdude.conf"
Using Port : COM9
Using Programmer : arduino
Overriding Baud Rate : 57600  (較低的速率才可以)
AVR Part : ATmega328P
Chip Erase delay : 9000 us
PAGEL : PD7
BS2 : PC2
RESET disposition : dedicated
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :
Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 20 4 0 no 1024 4 0 3600 3600 0xff 0xff
flash 65 6 128 0 yes 32768 128 256 4500 4500 0xff 0xff
lfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
efuse 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
lock 0 0 0 0 no 1 0 0 4500 4500 0x00 0x00
calibration 0 0 0 0 no 1 0 0 0 0 0x00 0x00
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
Programmer Type : Arduino
Description : Arduino
Hardware Version: 2
Firmware Version: 1.16
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f (probably m328p)
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: reading input file "C:/Users/User/AppData/Local/Temp/arduino-create-agent680988764/Blink.hex"
avrdude: writing flash (930 bytes):
Writing | ################################################## | 100% 0.29s
avrdude: 930 bytes of flash written
avrdude: verifying flash memory against C:/Users/User/AppData/Local/Temp/arduino-create-agent680988764/Blink.hex:
avrdude: load data flash data from input file C:/Users/User/AppData/Local/Temp/arduino-create-agent680988764/Blink.hex:
avrdude: input file C:/Users/User/AppData/Local/Temp/arduino-create-agent680988764/Blink.hex contains 930 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.22s
avrdude: verifying ...
avrdude: 930 bytes of flash verified
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done. Thank you.

可見使用較低的 baud rate 傳送就能 sync 而上傳成功了.