Blog

ESP32 WeMos LOLIN32 Lite 開箱文

作者:順哥
email:palmbear@gmail.com

參考資料 1:ESP32 WeMos LOLIN32 Lite high resolution pinout and specs,https://mischianti.org/esp32-wemos-lolin32-lite-high-resolution-pinout-and-specs/
參考資料 2:Chat Everywhere,https://v2.chateverywhere.app/zh
參考資料 3:WeMos LOLIN32 Lite相片,https://www.hobbyelectronica.nl/en/product/lolin32-lite-esp-32/?srsltid=AfmBOorF4n7AuI2vquJZ4Mr0pyaCws4JqpqrfqukliniuSiYuIzDMXbt

Table of Contents

一、簡介

  • LOLIN32 Lite(LOLIN32_Lite)是 WeMos(LOLIN)系列基於 Espressif ESP32 模組的輕量化開發板,強調小巧、低功耗與行動電源支援,適合物聯網(IoT)節點、感測器與快速原型。
  • Lite 版保留 ESP32 的 Wi‑Fi 與藍牙功能與豐富周邊(ADC、DAC、I2C、SPI、UART、觸控等),但在板面與腳位配置上更緊湊。此版本也整合了電池接頭與充放電管理電路,便於行動電源/電池應用。

二、外觀

  • 板子尺寸:小型化設計,通常為單面元件佈局(具體長寬請參見下方硬體規格)。
  • 介面與元件分佈:
    • USB 連接埠(Micro USB 或 USB‑C)位於邊緣,作為供電與上傳韌體使用。
    • 常見的指示燈(Power LED、User LED)在板上顯眼位置。
    • 針腳列(雙排或單排),標示 GPIO 編號、3.3V、GND、EN、RST、ADC、SDA/SCL 等。
    • 板上包含RESET按鈕供重置使用。
    • 金屬屏蔽蓋覆蓋 ESP32 封裝(視版本而定),有些版本裸露模組可見天線印刷或 PCB 天線。
  • 做工與印刷:Silkscreen 字體清晰,焊點整齊,板面顏色常見為藍色或黑色(視廠家配色),LOGO 與型號標示明確。
    電池接頭:板上有 JST 2‑pin 電池插座(標示 BAT / BATT / VBAT),靠近 USB 與充電電路區域。

LOLIN32 Lite 外觀

  • 正面
  • 背面

三、主要特點

  1. SoC:Espressif ESP32(Xtensa LX6,雙核心,最高 240 MHz),支援 Wi‑Fi(802.11 b/g/n)與 Bluetooth v4.2(BR/EDR+BLE)。
  2. 記憶體/儲存:520 KB SRAM;常見 Flash 4 MB(視版本)。大多數 Lite 版無額外 PSRAM。
  3. I/O 支援:ADC、DAC、PWM、I2C、SPI、UART、觸控感測等多功能腳位(實際可用腳位請參考高解析度 pinout)。
  4. 行動電源支援:板上具 JST 電池插座與內建充電 IC(支援 CC/CV 充電),並有自動電源切換電路(USB 插入時由 USB 供電並為電池充電,拔除 USB 則自動切至電池供電),方便行動或遠端應用。
  5. USB‑TTL:板上含 USB‑TTL 橋接晶片(CH340 / CP210x 等,依批次而定),可直接與 Arduino IDE 溝通與上傳程式。
  6. 低功耗能力:支援 ESP32 的多種睡眠模式(light/deep sleep、ULP),搭配電池可長期部署(視應用與電池容量而定)。

四、硬體規格

  1. MCU:ESP32‑系列模組(如 ESP32‑WROOM)
  2. CPU:Xtensa dual‑core LX6,160/240 MHz
  3. SRAM:520 KB(內部)
  4. Flash:通常 4 MB(視版本)
  5. 無線:Wi‑Fi 802.11 b/g/n;Bluetooth v4.2(BR/EDR + BLE)
  6. ADC:12‑bit SAR(多通道)
  7. DAC:2 × 8 位 DAC
  8. I/O:多組 GPIO(具 PWM、I2C、SPI、UART、觸控等功能)
  9. USB:Micro‑USB / USB‑C(視版本),板上有 USB‑TTL 晶片(CH340/CP2102)
  10. 電源:USB 5V 輸入(板上 LDO 轉為 3.3V)、JST 2‑pin 電池接頭(單節鋰電池 3.7V 標稱,最高充至 ~4.2V)
  11. 充電 / 電池管理:板上含充電 IC(支援 CC/CV 充電)、充電狀態指示 LED,並實作自動電源切換(USB ↔ 電池),有基本保護與管理電路(詳情視廠商 BOM 與 schematic)。
  12. 工作電壓:3.3V(GPIO 為 3.3V 邏輯)

WeMos LOLIN32 Lite 接腳圖如下圖:

五、Arduino Blink 範例程式測試

目的:確認板子與開發環境(Arduino IDE)能正常上傳與執行程式,並驗證內建 LED 的運作。

  1. 開發環境與基本設定
    A. 安裝 Arduino IDE。
    B. 在「開發板管理員」中加入 Espressif ESP32 支援:在「偏好設定」→「附加開發板網址」加入https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
    ,然後在「開發板管理員」搜尋並安裝「esp32 by Espressif Systems」。
  2. 連接 LOLIN32 Lit 至電腦(USB cable),選擇正確的 COM 埠與開發板型號(例如「WEMOS LOLIN32 Lite」或「ESP32 Dev Module」,若有專屬選項請選擇對應型號)。若驅動需要,安裝對應 CH340 / CP2102 驅動程式。上傳鮑率請選擇 115200 bps。
    相關參數設定如下圖:

  3. 硬體連接(LED)
    內建 LED:多數 LOLIN32 Lite 的 User LED 對應 LED_BUILTIN (以實物為準)。
  4. Blink 範例程式
/* Blink Turns an LED on for one second, then off for one second, repeatedly. Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to the correct LED pin independent of which board is used. If you want to know what pin the on-board LED is connected to on your Arduino model, check the Technical Specs of your board at: https://docs.arduino.cc/hardware/ modified 8 May 2014 by Scott Fitzgerald modified 2 Sep 2016 by Arturo Guadalupi modified 8 Sep 2016 by Colby Newman This example code is in the public domain. https://docs.arduino.cc/built-in-examples/basics/Blink/ */
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
  delay(1000); // wait for a second
  digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
  delay(1000); // wait for a second
}


  1. 上傳與測試
    先在 USB 連接並上傳 Blink;若上傳失敗,檢查 USB 線、驅動與開發板選項。遇到 “Wrong boot mode detected” 之類訊息,先換線或嘗試手動 Reset(Lolin32 Lite 會自動進入燒錄模式),上傳成功後確認 LED 閃爍。
    Blink影片如下:

六、注意事項

  1. 電池類型與電壓:連接電池時,請使用單節鋰離子或鋰聚合物電池(標稱 3.7V,充飽約 4.2V)。絕不可把 5V 或其他電壓直接接到電池插座。
  2. 充電安全:板上若具備充電 IC,請確認充電規格(最大充電電流與溫度保護)。避免在高溫、潮濕或通風不良環境充電。
  3. 電源切換:LOLIN32 Lite 的自動電源切換可讓系統在 USB 與電池間無縫切換,但外接電路不可妨礙板上 boot‑strap 腳位(避免外接電路在上電時把某些腳位拉低或拉高,導致無法正常開機)。
  4. 電池保護:即使板上有充放電管理,也建議使用帶保護板(over‑charge / over‑discharge / short‑circuit protection)的電池或電池模組,以提高安全性。
  5. 電池監測:長期或遠端運作時請在程式中加入電壓監測或低電壓保護(避免過放損害電池)。若板上未提供 VBAT 分壓,請外接分壓電路到 ADC。
  6. 更換及維護:更換電池時確保電池無膨脹、無外觀損壞並使用合格連接器,避免插反極性。
  7. ESD 與焊接:如要更換或自行改裝充電電路,注意靜電防護與焊接品質,避免破壞 SMD 元件。

Gemini CLI 專案協作筆記:從 Web App 到極簡自動化的開發歷程

總覽

本專案的初始目標是建立一個具備篩選功能的使用者介面,以自動化處理貓咪住宿文件。在開發過程中,我們遭遇了數個與 Google Apps Script 環境相關的挑戰,最終透過簡化架構和採用更穩健的技術決策,成功達成目標。

第一階段:不可行方案與經驗教訓

我們首先嘗試了建立一個功能豐富的前端介面,但最終證明此路不通。(如圖一、二)

方案:獨立 Web App / 側邊欄 (Client-side UI)

  • 嘗試過程:

    1. 建立 Web App:最初構想是建立一個獨立的網頁應用程式(doGet),提供篩選欄位和操作按鈕。(如圖三)
    2. 遭遇神秘錯誤:即使提供了語法正確的現代 JavaScript (ES6+)程式碼,在執行時依然反覆出現 SyntaxError (語法錯誤),例如Unexpected token。
    3. 偵錯與降級:為了排除問題,我們將後端 Code.gs 的程式碼全部降級為相容性更強的舊版 ES5 語法。
    4. 遭遇前端腳本失效:即便後端語法降級,前端網頁的按鈕依然完全沒有反應。進一步偵錯發現,無論是寫在 HTML 中的 onclick屬性,還是使用標準的 addEventListener 事件綁定,前端的 JavaScript 腳本都完全沒有被執行。 (如圖四)
  • 根本原因:

    Google Apps Script 的 HtmlService 沙箱環境非常特殊且存在諸多限制。標準的網頁開發實踐(如 DOMContentLoaded 事件)可能無法運作,且 Client-side JavaScript 的執行容易受到使用者的 Google 帳號安全設定、瀏覽器版本、擴充功能等我們無法直接控制的因素干擾。

  • 教訓:

    對於 Google Apps Script 專案,其核心優勢在於與 Google 服務的後端整合。任何複雜的前端 UI 都會引入巨大的不確定性。應優先考慮純後端 (Server-side)執行,只有在絕對必要時才引入前端 UI,並要為其不穩定性做好準備。 (如圖五)


第二階段:最終可行方案與設計決策

在放棄了複雜的前端 UI 後,我們回歸到最原始、最穩定的架構,並解 決了資料處理中的核心難題。

方案:純後端 + 自訂選單 (Server-side Only)

  • 設計理念:

    1. 放棄所有不穩定的前端介面(Web App、側邊欄、HTML)。
    2. 將所有邏輯都放在 Code.gs 中。
    3. 僅透過在試算表頂端建立的自訂選單 (onOpen 函式)來觸發後端函式。
    4. 這是最穩定、最可靠、最容易維護的架構。
  • 關鍵的技術決策:

    1. 語法選擇 (Syntax Choice): 由於使用現代 JavaScript (ES6+) 在該專案環境中反覆出現無法解釋的語法錯誤,最終決定全部採用舊版 ES5語法,以換取最高的相容性與穩定性。

    2. 資料去重邏輯的演進 (Evolution of Deduplication Logic):

      • 目標:integrateData 函式在多次執行時,只新增真正的「 新」資料,而不是重複附加。
      • 失敗的嘗試: 最初嘗試在執行時比對「來源日期」和「已存 入的日期」。但因 Google 試算表會自動將「日期文字」轉換為「日期物件」,兩者在 格式和精度上的微小差異導致比對永遠失敗。
      • 成功的方案:寫入「唯一識別碼」(EntryKey)
        • 在 IntegratedData 工作表中新增 EntryKey 欄位。
        • 第一次處理資料時,根據其內容產生一個標準化的字串Key(格式為 手機_貓名_YYYY-MM-DD)並存入此欄。
        • 後續執行時,直接進行「字串對比字串」,徹底避免了所有資料格式轉換的問題。這是解決此類重複資料問題最專業、最可靠的方法。 (如圖六、七)
    3. 程式碼結構優化 (Code Structure Optimization): 為了解決因平台顯示長字串時自動換行,而導致使用者複製貼上程式碼出錯的問題,最終版本將indexOf(‘一個很長的欄位名稱’) 的寫法,全部重構為在迴圈外預先定義好所有欄位的索引變數(如 var ownerNameCol=headers.indexOf(…))。這讓程式碼更乾淨、效率更高,也杜絕了格式問題。 (如圖八)


總結

這個專案的成功,關鍵在於透過務實的偵錯,辨識出平台的限制,並做出正確的架構決策。最終,一個由繁化簡、回歸後端核心的設計,搭配一個穩健的資料去重策略,成功地實現了使用者的核心需求。

NUVOTON 新唐 NuMaker-UNO-M4 開箱文

作者:順哥
email:palmbear@gmail.com

參考資料 1:NUVOTON 新唐 NuMaker-UNO-M4 產品頁,https://direct.nuvoton.com/tw/numaker-uno-m4?srsltid=AfmBOopFhCXT5ftx5FTkoTcIVZLXr0MX_9o07sI9xKODXf4wINY5kuBc
參考資料 2:Chat Everywhere,https://v2.chateverywhere.app/zh

一、簡介(引用參考資料 1)
新唐 NuMaker-UNO-M4 開發板是使用新唐 MCU 作為微控制器的一款 Arduino 相容硬體。它的功能可以透過 Arduino 相容的擴充板來擴展。使用者可以使用 Arduino 相容的 IDE 來開發他們的應用程式,並充分利用大量的公開範例。

NuMaker-UNO-M4 是一個特別的開發工具,用於新唐 Cortex®-M4 系列的使用者透過其可以開發並容易驗證該應用程式。其目的是提供一套開發及學習的平台,具有 ADC、PWM、I²C、SPI 等周邊功能,使用者可以設定不同功能的 NuMaker-UNO-M4 開發套件,也可根據使用者需求增加外設功能的開發套件,易於上手,提供開發所需的靈活性。

二、外觀
NUVOTON 新唐 NuMaker-UNO-M4 外觀
![IMG_3658](https://hackmd.io/_uploads/S11BnjYtel.jpg)
![IMG_3659](https://hackmd.io/_uploads/Hk1r3iFtxx.jpg)
![IMG_3660](https://hackmd.io/_uploads/HJyBniKKgl.jpg)

三、主要特點(引用參考資料 1)
特色:
* 學習/應用/調試:全系列開發工具
* 攜帶方便的開發調試工具包
* 豐富的微控制器周邊設備功能,如ADC、PWM、I²C、SPI、UART…
* 具有高可擴展性:連接電路板可以改變不同的應用模組
* 相容 Arduino UNO R4
* 支持對 USB 的虛擬串口
* 支援 Arduino 的 IDE
* 多元的供電方式
– USB VBUS
– 外部電源支援 5V,可以從其他電源提供給 DC 插座
* LEDs 狀態指示燈
– Power, I/O, UART (Tx, Rx) 和 SPI CLK 狀態…等燈號
* 提供 RESET 按鈕

NuMaker-UNO-M4開發板接頭名稱及定義如下:
![IMG_3661](https://hackmd.io/_uploads/r1JS2sFFxl.jpg)

![IMG_3662](https://hackmd.io/_uploads/S1kS3sKFge.png)

插上電後,有一個閃爍3顆LED的程式已預先燒入上去。

四、Arduino IDE 開發環境安裝

1. 至Arduino 官網下載 Arduino IDE 開發環境,執行所下載之安裝檔,並安裝 Arduino IDE。
2. 執行 Arduino IDE。選擇 File → Preferences
3. 並在 Additional Board Manager 的欄位中輸入下列網址: https://raw.githubusercontent.com/OpenNuvoton/NuMaker_UNO/master/package_nuvoton_index.json
![截圖 2025-08-24 15.59.33](https://hackmd.io/_uploads/SJA0jjKKel.png)

4. 利用左邊「開發板」按鈕,搜尋NuMaker UNO M4,並安裝「UnMaker M4」,目前最新版是「13.3.9」。

選擇 Tools → Board → Boards Manager ,
NuMaker M4 會出現在清單底部;點選 NuMaker M4 並按下 Install
![截圖 2025-08-24 16.00.05](https://hackmd.io/_uploads/HJRRoottex.png)
![截圖 2025-08-24 16.00.45](https://hackmd.io/_uploads/SJA0ioFKlg.png)
![截圖 2025-08-24 16.02.59](https://hackmd.io/_uploads/r1R0oitKxl.png)
5. 待軟體包下載安裝完畢,即可在 Tools → Board 選用 NuMaker-UNO-M4
![截圖 2025-08-24 16.03.35](https://hackmd.io/_uploads/HkRAiiKKex.png)
6. 選擇開發板NuMaker-UNO-M4,以及連接埠。
![截圖 2025-08-24 16.29.57](https://hackmd.io/_uploads/ByACsjtKgx.png)

或點選「工具」,再選擇開發板NuMaker-UNO-M4,以及連接埠
![截圖 2025-08-24 16.06.36](https://hackmd.io/_uploads/Bke0CojKYee.png)
![截圖 2025-08-24 16.07.27](https://hackmd.io/_uploads/HJCCsoKtel.png)
7. 開啟範例程式:Blink,並上傳
![截圖 2025-08-24 16.09.13](https://hackmd.io/_uploads/BJA0joKYxx.png)
8. 編譯完成上傳失敗,缺少「isptool」這個程式。
![截圖 2025-08-25 18.13.38](https://hackmd.io/_uploads/SyFDD2Ytll.png)
9. 「isptool」這個程式是一個Windows OS的bat檔,在macOS當然不能用。
![截圖 2025-08-24 16.22.36](https://hackmd.io/_uploads/BkARsiYKgl.png)
10. 經過一個下午,找ChatGPT幫忙,用Python做出了「Nuvoton ISP Tool」GUI程式,但是無法正常連接 NuMaker-UNO-M4。
![截圖 2025-08-24 18.42.41](https://hackmd.io/_uploads/S1CRjoKYeg.png)
11. 使用「UTM」Windows虛擬機,進行測試才順利上傳Blink程式。
![截圖 2025-08-25 17.00.10](https://hackmd.io/_uploads/SkH2jntKgg.png)
![截圖 2025-08-25 17.03.13](https://hackmd.io/_uploads/HJBho2KFxx.png)
12. Blink.py測試程式
點亮、熄滅內建LED,每0.2秒循環一次內建LED,Blink.py。
“`c++=
//Blink程式,閃爍內建「LED 3」每0.2秒閃爍一次
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(200); // wait for a second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(200); // wait for a second
}
“`
測試程式Blink.ino影片

五、結論
目前「NUVOTON 新唐 NuMaker-UNO-M4」在Arduino IDE開發環境,僅支援「Windows OS」,不支援「macOS」。

希望「新唐NUVOTON」早點支援 macOS。

在 macOS 上安裝 MariaDB 伺服器

作者:順哥
email:palmbear@gmail.com

參考資料 1:Installing MariaDB Server on macOS Using Homebrew
參考資料 2:Mac安裝MariaDB資料庫
參考資料 3:macOS 上安裝 Sequel Pro 資料庫管理介面

Table of Contents

[TOC]

前言

因為上宅老大的課程需要使用MariaDB資料庫,但是官網的下載頁面沒有提供下載,查詢google後,找到相關參考資料,將安裝流程記錄一下。
MariaDB官方Download網頁:Download MariaDB Server

安裝環境

  1. Macbook pro M1
  2. macOS 15.6

參考各「參考資料」及官網,實際的安裝程序如下:

步驟一:打開終端機

查詢MariaDB資料庫有哪些版本:brew search mariadb

步驟二:安裝MariaDB資料庫

安裝MariaDB資料庫:brew install mariadb

下完安裝命令後,brew 會先自行更新,然後才開始安裝 MariaDB。

截圖 2025-08-19 22.37.25

MariaDB安裝完成後,會自行執行brew cleanup mariadb
截圖 2025-08-19 22.49.27

接著自動執行brew cleanup,清除無用程式庫。
截圖 2025-08-19 22.54.47

步驟三:啟動 MariaDB

啟動MariaDB資料庫:brew services start mariadb

截圖 2025-08-19 22.57.00

步驟四:登入「MariaDB」

MariaDB 伺服器啟動後,您可以以您的使用者身分登入:mysql

或以 root 身分登入:sudo mysql -u root

出現下圖就是安裝完成。
截圖 2025-08-19 23.07.38

離開「MariaDB」:exit
截圖 2025-08-19 23.11.16

重新啟動MariaDB資料庫:brew services restart mariadb
截圖 2025-08-19 23.49.06

步驟五:變更 MariaDB root 密碼

  1. 打開 iTerm2 終端機
  2. 終端機執行指令 sudo mariadb-secure-installation,變更 root 密碼
截圖 2025-08-20 00.11.27
截圖 2025-08-20 00.12.50

步驟六:安裝資料庫管理介面(sequel pro)

因為sequel pro已經沒有繼續維護,無法使用brew install sequel-pro來安裝,搜尋到「參考資料 3」可以下載「sequel-pro-1.1.2.dmg」,直接打開後如下圖:
截圖 2025-08-19 23.36.33

將 Sequel Pro.app 拉到應用程式就可以了。
截圖 2025-08-19 23.37.10

打開 Sequel Pro.app 後如下圖:
截圖 2025-08-19 23.44.42

輸入資料如下:
截圖 2025-08-20 00.19.29

進入MariaDB資料庫後畫面如下:
截圖 2025-08-20 00.16.18

參考:macOS 上安裝 MySQL 與 Sequel Pro 資料庫管理介面

其他資源

  1. mariadb.rb on github
  2. MariaDB Server on macOS: Does it even make sense to try? (video)

如何在masOS安裝Google Gemini CLI

作者:順哥

email:palmbear@gmail.com

參考資料 1:Gemini CLI GitHub,https://github.com/google-gemini/gemini-cli

參考資料 2:【Gemini CLI 安裝/使用教學】Mac版|程式安裝+指令大補帖,https://www.youtube.com/watch?v=AO2tuyNFXkEGemini

參考資料 3:CLI 橫空出世 | 不只免費,軟體還開源 | 完整安裝 可呼叫Google Search,https://www.youtube.com/watch?v=ws1ee6aKB7Q

一、簡介

Gemini CLI 是一款基於 Gemini AI 技術的命令列工具,支持繁體中文輸入與輸出,方便用戶在終端環境中快速進行自然語言交互。它能處理繁體中文的文本生成、問題回答、文本摘要和翻譯等功能,操作簡潔直觀,適合開發者和專業用戶用於自動化腳本、資料處理及快速查詢。

二、安裝環境

1. Macbook pro M1
2. macOS 15.6.1
3. brew
4. node.js

三、參考Gemini CLI GitHub及各「參考資料」,實際的安裝程序如下:

  1. 步驟一:打開終端機,安裝 Gemini CLI1

使用 brew 直接安裝:`brew install gemini-cli`

2. 步驟二:執行 Gemini CLI

安裝完成後,輸入 `gemini` 直接執行 Gemini CLI ,會出現下圖:

3. 步驟三:登入 Gemini CLI

我使用第一種方法,就是使用Google 帳號登入,最簡單。

(使用上下鍵可以在選項中移動,按下 “Enter" 鍵,選擇)

登入後就可以直接使用了。

三、問題

執行Gemini CLI後,出現這段文字,指的是「你現在是在"home"目錄下執行Gemini CLI,推薦在『特定專案』目錄下執行Gemini CLI。」(如下圖)

登入Gemini CLI後,我直接問 Gemini:

「我收到『You are running Gemini CLI in your home directory. It is recommended to run in a project-specific directory.』這段訊息,執行Gemini CLI對我有什麼壞處?

他把問題的壞處說明後,直接提出最佳解決方法。(如下圖)

我接著請Gemini「請為我建立一個目錄「Gemini Test Project」,並且在這個目錄下重新啟動Gemini」。

但基於AI的本分,可以幫我建立目錄,但不能直接幫我執行這個操作。

執行 `/quit` 離開 Gemini,出現下圖。

因為macOS的目錄名稱中間不能有空白,所以重新建立「Gemini_test」目錄,在執行 Gemini CLI。

Raspberry Pi 5 開箱文

作者:順哥
email:palmbear@gmail.com

Table of Contents

[TOC]

緣起

Raspberry Pi 5 在2023年10月發表後,一直沒有出現在市面上發售,在digikey的行銷email中知道digikey有在預購,就趕緊上網下訂預購,經過一個多月的時間,Raspberry Pi 5 在 2023/11/20 終於到手了。

Raspberry Pi 5 網頁:
https://www.raspberrypi.com/products/raspberry-pi-5/

digikey官網:
https://www.digikey.tw/

外觀

  1. 我們的戰利品

硬體規格

  • Broadcom BCM2712 2.4GHz quad-core 64-bit Arm Cortex-A76 CPU, with cryptography extensions, 512KB per-core L2 caches and a 2MB shared L3 cache
    Broadcom BCM2712 2.4GHz 四核 64 位元 Arm Cortex-A76 CPU,具有加密擴展、每核 512KB 二級緩存和 2MB 共用三級緩存
  • VideoCore VII GPU, supporting OpenGL ES 3.1, Vulkan 1.2
    VideoCore VII GPU,支援 OpenGL ES 3.1、Vulkan 1.2
  • Dual 4Kp60 HDMI® display output with HDR support
    雙 4Kp60 HDMI® 顯示輸出,支援 HDR
  • 4Kp60 HEVC decoder
    4Kp60 HEVC 解碼器
  • LPDDR4X-4267 SDRAM (4GB and 8GB SKUs available at launch)
    LPDDR4X-4267 SDRAM(發佈時提供 4GB 和 8GB SKU)
  • Dual-band 802.11ac Wi-Fi®
    雙頻 802.11ac Wi-Fi®
  • Bluetooth 5.0 / Bluetooth Low Energy (BLE)
    藍牙 5.0 / 低功耗藍牙 (BLE)
  • microSD card slot, with support for high-speed SDR104 mode
    microSD 卡插槽,支援高速 SDR104 模式
  • 2 × USB 3.0 ports, supporting simultaneous 5Gbps operation
    2 個× USB 3.0 埠,支援同時 5Gbps 操作
  • 2 × USB 2.0 ports
    2 個× USB 2.0 埠
  • Gigabit Ethernet, with PoE+ support (requires separate PoE+ HAT)
    千兆乙太網,支援 PoE+(需要單獨的 PoE+ HAT)
  • 2 × 4-lane MIPI camera/display transceivers
    2 × 4 通道 MIPI 攝像頭/顯示收發器
  • PCIe 2.0 x1 interface for fast peripherals (requires separate M.2 HAT or other adapter)
    PCIe 2.0 x1 介面,用於快速外設(需要單獨的 M.2 HAT 或其他適配器)
  • 5V/5A DC power via USB-C, with Power Delivery support
    通過USB-C提供5V/5A直流電源,支援Power Delivery
  • Raspberry Pi standard 40-pin header
    Raspberry Pi 標準 40 針接頭
  • Real-time clock (RTC), powered from external battery
    即時時鐘 (RTC),由外部電池供電
  • Power button
    電源按鈕

注意事項

  1. 您的Raspberry Pi 5 需要最新版本的Raspberry Pi OS, Bookworm。
  2. Raspberry Pi 5 是比 Raspberry Pi 4 性能更高的電腦,使用電源供電不足時可能會遇到問題。建議是用原廠高品質的 5V 5A USB-C 電源。
  3. Raspberry Pi 5 不適合Raspberry Pi 4 外殼。可以使用原廠 Raspberry Pi 5 的 Raspberry Pi 保護殼。
  4. Raspberry Pi 5 比上一代 Raspberry Pi 更快、更強大,並且與大多數電腦一樣,它在主動冷卻下表現最佳。可以購買Raspberry Pi 5 的 Raspberry Pi Case 搭配原廠專用散熱風扇,可以達到較佳的散熱效果。
  5. Raspberry Pi 5 已針對 PCIe Gen 2.0 速度(5 GT/秒)進行了認證,但如果將以下行添加到 /boot/firmware/config.txt .可以強迫升級至 PCIe Gen 3.0
# Enable the PCIe external connector
dtparam=pciex1

# Force Gen 3.0 speeds
dtparam=pciex1_gen=3

原廠技術文件:
https://www.raspberrypi.com/documentation/computers/raspberry-pi-5.html

安裝作業系統

  1. 下載 Raspberry Pi Imager:
  1. 將MicroSD卡或隨身碟或USB隨身硬碟重新格式化為FAT32格式,可以使用 Raspberry Pi Imager 直接處理。
  2. 燒錄作業系統:

選取 RASPBERRY PI 5 、 RASPBERRY PI OS(64-BIT) 以及你的 「MicroSD卡」 或 「隨身碟」 或 「USB隨身硬碟」。

選取「編輯配置」

在GENERAL頁籤可以直接配置使用者名稱及Wi-Fi無線網路

可以勾選啟用SSH

其他選項

  1. 開機測試

改裝外殼

因為我不喜歡原廠外殼,所以自己拿 舊 Pi 4 的壓克力外殼改裝。
另外,Pi 4 與 Pi 5 網路端子是顛倒,所以剛好把這個積層式外殼顛倒過來就可以用了。
另外,一些開孔不同處,墊了8個M4尼龍螺母,稍微改裝一下,順利把Raspberry Pi 5 安裝上去了。

這樣先頂著用,另外,在物色散熱良好的外殼來安裝。


tags: Raspberry Pi 5 樹莓派

xTool M1 雷射雕刻玻璃瓶

xTool M1 雷射雕刻玻璃瓶

===

作者:順哥
email:palmbear@gmail.com

## Table of Contents

[TOC]

## 玻璃瓶雷射雕刻步驟

1.先在玻璃瓶上雷雕區域塗上水性顏料如圖片,不需要稀釋,我使用淘汰的軟毛牙刷來塗,均勻塗抹不需塗抹太厚。

2. 使用吹風機吹乾。

3. 拆除底板,將控制線連接滾筒模組與雷雕機背後圓形插座,滾筒模組調整到適合的間距,打開xTool M1,墊高滾筒到雷射雕刻可雕刻高度。

6. 將玻璃瓶放入滾筒模組,雷射雕刻區域(塗佈水性顏料區塊)左側對準正上方。

8. 打開xTool Creative Space軟體,雷射圓柱會出現一條黃線在中間,如下圖。這是雷射雕刻的起點定位線,將要雷射雕刻的圖樣放在定位線的右邊,圖案大小調整完成後,點選加工,走邊框測試雷雕範圍是否在預定位置?沒問題就可以開始雕刻了

[xTool M1 雷射雕刻玻璃瓶-走邊框影片]

(https://youtu.be/f0kSQDVcKqY)

[xTool M1 玻璃瓶雷射雕刻影片]

(https://youtu.be/AMwIB222Byw)

## 雷射雕刻相關參數如下:

選取:雷射圓柱

材料:自定義材料

距離:自動測量

模式:滾筒

填充雕刻輸出:

    功率:100

    速度:80

    加工次數:1

    雕刻密度:100

    雕刻模式:雙向掃描

線條雕刻輸出:

    功率:100

    速度:25

    加工次數:1

##雷雕成果

雷雕完成後的線條雕刻不太理想,"O" 偏移了,或許速度慢一點可以改善。

用水沖洗就可以沖掉原先塗上去的水性塗料

擦乾後的成果

###### tags: `xTool M1` `雷射雕刻` `雷雕` `Laser Engrave` `玻璃`

Pico 及 Micro:bit 的程式或韌體在 macOS 13.01 無法拖拉上傳?請升級到 macOS 13.1

作者:順哥
email:palmbear@gmail.com

先前使用 MacBook pro 將 Pico 及 Micro:bit 的程式或韌體拖拉上傳到裝置的功能,非常方便。

Micro:bit,請參考 Micro:bit官網 Transfer from a computer 直接拖拉hex檔到Micro:bit。

但是在 macOS 更新到 macOS 13.01 後,便無法用拖拉上傳了,後來問了Google 大神才知道這是 macOS 的問題!

請參考下面網址:

參考資料1:https://www.raspberrypi.com/news/the-ventura-problem/

參考資料2:https://blog.adafruit.com/2022/10/31/uploading-uf2-files-with-macos-13-0-ventura-apple-microbit_edu-raspberry_pi-circuitpython/

Raspberry Pi 及 Adafruit 這二個單位都鼓勵大家跟 Apple 公司回報問題,希望 Apple 能儘快修正!

未修改前,可以使用終端機命令列來上傳程式或韌體到裝置上,命令參考如下:

cp -X MICROBIT.hex /Volumes/MICROBIT/

Apple 公司這幾天已經發佈了macOS 13.1,經過測試已經解決這個無法拖拉上傳程式的問題了。

如果你使用的朋友,建議大家趕快升級到 macOS 13.1。

VIA Pixetto Vision Sensor視覺感測器 開箱及教學資料


作者:順哥
email:palmbear@gmail.com

資料來源:

  1. Cavedu 課程講義
  2. VIA Pixetto官方網站
  3. VIA Pixetto官方開發者網站

Table of Contents

[TOC]

前言

" VIA Pixetto Vision Sensor 視覺感測器 " 是一個存有預訓練機器學習模型,與機器學習加速器的超高畫質感測器,涵括物體、形狀、顏色、人臉及手寫辨識特點,並可上傳神經網路模型進行辨識。

硬體規格

型號Pixetto (VTS8787C)
處理器ARM Cortex-A7 900MHz
記憶體64MB DDR SDRAM
儲存空間128MB SPI 快閃記憶體
鏡頭感光元件GalaxyCore GC2053 CMOS 圖像感測器
鏡頭解析度1920×1080
鏡頭可視角130° field-of-view
板載輸入/輸出3 LEDs (電源-Green、無線網路-Blue、辨識狀態指示燈-Red)
重置按鍵
麥克風
Grove 連接器(UART)
Micro USB 2.0 端口
Micro SD 卡插槽
Wi-Fi 內置微型天線 (802.11b/g/n )
輸入電源
5V/300mA 4針 Grove 連接器
運作溫度0 ~ 45℃
尺寸38mm x 38mm (1.5” x 1.5”)

原廠最新版韌體

我使用最新版本軟體及韌體:

Pixetto 韌體修復工具Pixetto Firmware Recovery v1.6.2
Pixetto 設置工具Pixetto Utility v1.6.2
Pixetto 函式庫Pixetto Library for Arduino v1.6.4 v1.6.5
Pixetto Lite 函式庫Pixetto Lite Library for Arduino v1.6.4 v1.6.5
Pixetto Editor v1.6.0
Pixetto Link v1.2.5
Pixetto Lite圖形化積木設計指南 v0.1

原廠最新版軟體及韌體下載如下:
https://learn.pixetto.ai/pixetto.html#r15

軟體安裝教學

  1. 威盛 Pixetto 基礎安裝
    https://pixetto.ai/tw/2020/07/getting-started-with-pixetto-tw/
  2. 【AI人工智慧-神經運算】環境建置:安裝Anaconda、Tensorflow、Keras與openCV(Windows篇)
    https://blog.cavedu.com/2018/09/28/general_env_setup_anaconda_tensorflow_keras_opencv/
  3. VIA Python 環境設置
    https://pixetto.ai/tw/2020/08/python-environment-setup-tw/
  4. 教你如何連接威盛Pixetto 到Arduino開發板
    https://pixetto.ai/tw/2020/07/connecting-pixetto-to-arduino-uno-tw/
  5. 本日範例(AI_TEST.zip)
    https://drive.google.com/drive/folders/1lQDew5C2Ma4KzbXARk-uUEv-mj6yTCnx?usp=sharing

Python Jupyter Notebook應用

前置軟體:Pixetto Utility、Python Jupyter Notebook
通訊方式:Serial、Pixetto

  1. 用TensorFlow訓練CNN模型判別剪刀石頭布
    Jupyter Notebook(雲端)
    https://pixetto.ai/tw/2020/12/rock-paper-scissors-game-tw/
  2. 決鬥吧!TensorFlow剪刀石頭布進階Python應用:猜拳遊戲!
    https://pixetto.ai/tw/2020/12/rock-paper-scissors-game-tw/
  3. 辨識手寫英文單字
    https://pixetto.ai/tw/2020/08/handwritten-english-word-recognition-tw/
  4. 利用神經網路訓練威盛Pixetto辨識物件
    https://pixetto.ai/tw/2020/07/object-recognition-using-an-neural-network-tw/

Python Jupyter Notebook應用

前置軟體:Scratch(雲端) + Arduino
通訊方式:Serial、Pixetto

  1. 紅是紅、藍是藍!超好玩的「Scratch顏色分類機」
    https://pixetto.ai/tw/2020/11/color-sorter-device-tw/
  2. 一起玩 Scratch 遊戲吧!適合大朋友小朋友的「口罩配戴辨識遊戲」
    https://pixetto.ai/tw/2020/10/mask-wearing-recognition-game-tw/
  3. 活用Scratch和Arduino,實作威盛Pixetto「人臉偵測警示燈」
    https://pixetto.ai/tw/2020/10/face-detection-warning-light-tw/
  4. 教你如何運用威盛Pixetto來製作「人臉偵測警報器」
    https://pixetto.ai/tw/2020/09/face-detection-alarm-tw/
  5. 一元一次方程式流程說明
    https://pixetto.ai/tw/2020/08/linear-equation-game-tw/
  6. 教你創作水果著色遊戲
    https://pixetto.ai/tw/2020/08/learn-how-to-create-a-fruit-coloring-game-tw/
  7. 教你做出貓咪抓老鼠小遊戲
    https://pixetto.ai/tw/2020/07/cat-chasing-mouse-tw/
  8. 教你如何做出可愛的變色龍
    https://pixetto.ai/tw/2020/07/learn-how-to-create-a-color-changing-chameleon-tw/
  9. 教你學會如何運用顏色辨識功能來控制自動小車
    https://pixetto.ai/tw/2020/07/learn-how-to-program-a-color-controlled-driverless-car-tw/
  10. 教你輕鬆學會讓自動小車追蹤彩球
    https://pixetto.ai/tw/2020/07/color-following-driverless-car-step-by-step-guide-tw/
  11. 教你使用Blocks程式積木,設計有趣的鸚鵡追球遊戲
    https://pixetto.ai/tw/2020/06/parrot-chasing-ball-learn-how-to-code-with-blocks-tw/
  12. 前置軟體:Pixetto Utility + Arduino
    教你運用威盛Pixetto的AprilTag辨識功能來控制自動小車
    https://pixetto.ai/tw/2020/09/apriltag-controlled-car-tw/

實作:使用 Google Teachable Machine 訓練模型檔,威盛Pixetto辨識物件

  1. 使用 Google Teachable Machine 訓練模型檔
  2. 下載模型
  3. 儲存模型
  4. 模型內檔案
  5. 開啟Pixetto Utility,選取"神經網路辨識"
  6. 選取模型
  7. 上傳模型
  8. 立即辨識
  9. 辨識影片Youtube辨識影片

結語

VIA 這個 pixetto 視覺感測器真是好用,可以立即把 Google Teachable Machines 訓練完成 Tensorflow Lite floating point 的模型直接上傳到視覺感測器內,並且直接辨識,省去非常多的時間。

130度廣角、高解析度鏡頭,簡單、便利的 UI 介面,提供預訓練模型,也可以結合 Google Teachable Machines 訓練的模型, NO Code 的完成神經網路模型訓練、辨識,實在是教學上的利器,也是進階者後續應用的好工具。

Appendix and FAQ

  1. VIA Pixetto英文使用手冊
  2. VIA Pixetto簡易操作手冊
  3. VIA Pixetto簡易規格書
tags: AI NN Pixetto 神經網路 視覺辨識 視覺感測器

在 macOS Monterey 12.4 環境,使用 Micropython 在 ESP32 SSD1306 顯示 圖形


作者:順哥
email:palmbear@gmail.com

資料來源:
1.image2cpp
2.| ESP32 教學 | MicroPython | I2C OLED Image 顯示圖像 | 209 |
3.SSD1306.py


Table of Contents

[TOC]


前言

測試在 macOS Monterey 12.4 環境,使用 Micropython 在 ESP32 用 SSD1306 OLED 顯示 image 圖形。


Step 1:使用的圖形

在 google網站搜尋一張看起來順眼,個人使用無版權的黑色的熊熊圖(png檔),就用這張圖來做測試,這張圖的原始尺寸為 “981 x 562″。
網頁畫面:


Step 2:將圖形轉換成 byte arrays

因為在macOS上找不到適當軟體可以使用,在 google網站上找到這個
image2ccp

這個網站可以將 image 轉換為 byte arrays(或將您的 byte arrays 轉換回 image),然後給 OLED 顯示出來。
網頁畫面:

  1. 選擇圖形 Select image:
    點選「選擇檔案」,上傳圖形檔。
    網頁畫面:
  2. 圖形設定 image Settings:
    在「畫布尺寸」 Canvas size(s) 欄位中,填入 OLED 的像數規格,我使用 “128 x 64″ ,所以在這裡我們填入 “128″ 及 “64″ ,圖形的原始尺寸為 “981 x 562″,這個網站可以將圖形直接轉成我們需要的大小。
    接下來選擇 “stretch to fill canvas" 「拉伸填充畫布」。
    網頁畫面:
  3. 圖形預覽 Preview:
    隨即就會在「圖形預覽」Preview,看到圖形。
  4. 輸出 Output:
    在「代碼輸出格式」"Code output format" 欄位中,填入 “plain bytes" ,
    接下來在「繪製模式」"Draw mode" 欄位中,填入 “Vertical – 1 bit per pixel" ,
    最後按下 “Generate code" 擷取碼,並將16進位的碼 Copy 下來。
    網頁畫面:

Step 3:測試程式碼

我使用 資料來源2 的程式碼,SSD1306 module 使用 資料來源3 ,並依照自己的ESP32接腳,改用SoftI2C,我的程式碼如下:

from machine import Pin, SoftI2C #從machine 匯入 Pin, SoftI2C
import ssd1306 #匯入 ssd1306模組
import framebuf #匯入 fram3buf模組

i2c = SoftI2C(scl=Pin(22), sda=Pin(21), freq=400000) # 建立 i2c 物件

oled=ssd1306.SSD1306_I2C(128, 64, i2c) #建立 oled096 物件,第 1 個參數與第 2 個參數設定為 OLED 模組的像素,第 3 個參數為 I2C 的物件名稱

# img64 是一個 bytearrays 的列表(List) 
img64 = [
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 
0x3f, 0x1f, 0x1f, 0x0f, 0x07, 0x07, 0x07, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x03, 0x03, 0x03, 0x01, 0x01, 0x01, 0x01, 
0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x07, 0x07, 0x07, 0x07, 0x0f, 0x0f, 0x0f, 0x1f, 
0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x1f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x7f, 0x7f, 
0x7f, 0x3f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1f, 0x07, 0x03, 0x01, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x07, 0x2f, 0x7f, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, 0xf7, 
0xff, 0xff, 0xff, 0xff, 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x08, 0x38, 0xf8, 0xf8, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfe, 0xfe, 
0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfc, 0xfc, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 
0x80, 0x80, 0x80, 0xc0, 0xc0, 0x80, 0xc0, 0xc0, 0xc0, 0xe0, 0xe0, 0xe0, 0x20, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x80, 0xc0, 0xf0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x0f, 0x3f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x02, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf0, 0xfc, 
0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x07, 0x1f, 0x3f, 
0x7f, 0x3f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xc1, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 
0xc0, 0xe0, 0xf0, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xfc, 0xfe, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xfe, 0xf8, 0xf8, 0xf8, 0xf8, 0xf0, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 
0xf0, 0xf0, 0xf0, 0xf0, 0xf8, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xfc, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 
0x87, 0x9f, 0xff, 0xff, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 
0xf0, 0xf0, 0xf0, 0xf8, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xf0, 0xf0, 0xe0, 0xe0, 0xe0, 
0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc1, 0xc1, 0xc1, 0xc3, 0xc3, 
0xe7, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
]

img064b = bytearray(img64)  # 將 img64 轉成 bytearray 型態,並取名 img64b
imgbuf=framebuf.FrameBuffer(img064b,128,64,framebuf.MONO_VLSB) #framebuf 第 1 個參數為影像資料的 bytearray名稱,第 2、3 個參數是影像的寬度與高度,第 4 個參數是像素形式與排列,MONO_VLSB 是指 單色+垂直+LSB
oled.blit(imgbuf, 0, 0) #blit方法,是將imgbuf 物件,由指定的 X,Y 位置,依序開始填入 OLED 記憶體
oled.invert(1) #以反白螢幕方式顯示圖形畫面
oled.show() #顯示螢幕畫面

程式說明

  1. 因為 framebuf 使用的資料型態是 bytearray,所以將 img64 轉成 bytearray 型態,並取名 img64b。
  2. 我們在轉檔時時是採用單色與垂直方向排列(Vertical)的方式存檔,所以預設轉出陣列就是 1btye 會有 8 像素,資料排列也就照著直線方式一條一條轉換,img64 原始資料共有 1024 個 bytes,換算成像素也就是1024×8=8192個像素,與我們OLED 的像素128*64=8192 Pixel 是相符的。
  3. mgbuf 為新建立的 framebuf 物件,framebuf 第 1 個參數為影像資料的 byte 序列,第 2、3 個參數分別為影像的寬度與高度,第 4 個參數就是像素形式與排列,MONO_VLSB 是指 單色+垂直+LSB(如果是其他形式可以填入framebuf.MONO_HLSB、framebuf.RGB565、framebuf.GS4_HMSB等。
  4. blit 這個方法也是源自 framebuf,將建立好的 imgbuf 物件,由指定的 X,Y 位置,依序開始填入 OLED 記憶體內。
    Micropython framebuf 模組的官方說明

成果

完成畫面:

我使用的硬體:

測試影片


tags: Micropython ESP32 Macbook pro 2021 macOS 12.4 Monterey