發表文章

文章總列表

2026瘋系列環台賽,前言

圖片
今年端午節我又報了一場瘋系列的環台賽,逆時針環島一周,四天環島 上次單車環島在2003年,老爸要我找人一起騎,第一天宋學長陪我騎到彰化 第二天我獨自上路,住嘉義偉家的家,我們買了情侶T 第四天爬上南迴公路壽卡,這是環島公認的難關 溜下壽卡,台11線東海岸美景深深刻印在我的靈魂裡 第五天前往花蓮市的牛山爬坡,天氣熱,屁股疼,疲勞累積,信心幾乎崩盤。這是環島旅行印象最深刻的瞬間 ---- 23年過去了,追憶逝水年華是享受;再去體驗一次當年的崩潰... 就讓人瑟瑟發抖啦

2026東三塔

圖片
[騎得帥,才重要] 大會幫我拍了兩張帥帥的照片,開心! [2026/2/28,富貴角燈塔,楓林大橋, AM6] 東三塔 任務是在二十八小時內,從富貴角走東海岸到鵝鑾鼻,旅途550KM爬升5000M 汽笛響起,上路吧 用 自製工具 做的休息點地圖,大致上每50KM停一次 [SEG0,北海岸到宜蘭壯圍] 上天給了一個好的開局,陰天,順風。記取 去年的教訓 ,到基隆順順騎不飆車。然後北海岸還是忍不住拉拉間歇,操作在爆炸的邊緣,讓旅途後段付出代價。好吧,起碼今年沒抽筋了(笑) 第一槍117K,靠兩顆飯糰,兩壺甜死人的水,操作在膀胱的極限。照片上是中雙塔同寢室夥伴,相見歡,我們來看右邊這傢伙能笑幾個鐘頭 [SEG1,蘇花公路到台泥DAKA園區] 蘇花公路三座山頭,400/300/200,永遠不輕鬆;第二個長坡還試著抽車一路上去,學不會教訓;於是第三個山頭呈現軟爛貌 照計畫一槍抵達台泥DAKA園區,193K,8小時已經快笑不出來了 [SEG2,花蓮新城] 騎了220K翻過蘇花公路,抵達太魯閣大橋,為自己喝采吧 [SEG3,台11線起點,鹽寮門市] 上半場玩過頭了,開始軟爛了;鹽寮SEVEN補完準備爬牛山,我一般吃兩顆飯糰,搭配可樂,阿華田,豆漿,亂喝;水壺加運動飲料和60mL糖漿;每個鐘頭吃點電解質(膠囊);原則上都在15分鐘左右離站 經過11小時笑不出來了,才250K耶 [SEG4,牛山,CP3北回歸線] 我們小集團火車頭想拚24H完賽,果斷跳車吧。爬牛山地全濕,雨開始下了...  雨戰演練 ,穿風衣踩130W擋得住10度,氣溫18度沒問題;雨天沒法跟車,會被水狂噴,還可能吃下髒水;眼睛不知道噴到什麼,一直刺刺痛痛的 北回歸線熱食站,先來兩碗麵吧 左眼刺痛,笑不出來了;中雙塔小隊再次會合,振躍看起來非常冷,我趕緊塞雨衣給他擋著,避免深夜失溫 [SEG5,都歷門市] 看到 樂享國際 以為炮哥當班,蹭了紅牛(感謝);灌下冰得要死的飲料,騎出去抖抖抖 狀態不大好所以要上去擋風,控在130W有速度也能恢復;騎在汽車道右輪位置,碎玻璃最少,燈光照亮標線辨識方向,盡量遠離水溝;下雨天熱量燒得多一點,騎到都歷需要800卡,兩碗雞腿泡麵500卡,騎到中間明顯腳軟沒柴燒(下次得吃三碗了) 笑不出來,還是能吃下飯糰,喝可樂 [SEG6,CP4睿豐門市/ 知本] 深夜的海岸公路有個小隊真好...

ESP32做汽車封包紀錄器

圖片
緣起 我手邊的CAN Bus工具很難用,做實驗很痛苦;我想根本解決一些問題 遠端分析:去地下室分析得餵蚊子,我想在家裡幹活兒 容易操作:操作Linux連我都嫌麻煩,我想點web網頁 常駐車上:樹莓派的耗電太高,MCU能達成uA等級待機耗電 萬丈高樓平地起,先用ESP32可以上車紀錄數據,後面還有很多事能做 硬體設計 藍色電路板是ESP32C3開發版,跳線接綠色電路板CAN收發晶片;背面放Micro-SD卡插座,加上OBD2接頭,硬體原型就做好了。電源暫時用USB-C,之後再考慮從OBD2拉電 CAN BUS ESP32的CAN bus 我搞過,CAN封包導入 資料紀錄器 ,很快就能錄數據,以及轉檔。讓樹梅派用極速送出50000個封包,數值遞增,確定沒掉任何封包,紀錄器就搞定了 上車實驗 把ESP32板子上車紀錄,照影片按遙控器,按兩下鎖定,等一下,再按兩下鎖定。我們要在汽車網路上找到關鍵封包 VOLVO車的封包格式長下圖,VOLVO沒公開定義,我也看不懂 逆向工程來找吧,上圖can1 xxx 三個數值是ID,可以看成是資料分類。最早用EXCEL分析 把上圖導入EXCEL,照ID分類,找出unique封包,並且計算出現幾次 我們按遙控器四下,找出所有出現4次的封包 然後用Linux的candump錄下封包,搭配grep肉眼仔細觀察 上述流程後來變成自製工具,把Log塞入網頁,為每個ID繪圖 畫出一堆圖,下面這個圖四個點不就對上遙控器手勢?AI說這招是 資料指紋化 ,不關心意義,只關心 資料變了嗎 ,以及 變成哪種狀態 實際狀態 實際做實驗還是得吃苦的,掙扎一個小時沒錄出來; 先鎖車 再實驗呢?到車外餵蚊子,再掙扎一下才錄到這些信號 效能優化 轉檔有夠慢,10000個封包紀錄檔392KB要22.3秒 修改軟體架構反覆做實驗,這個例子最後優化到1.48秒,大概15倍加速,堪用了 效能基準線是22.3秒 加大檔案讀寫緩衝區,效能變超爛( 217.42s),9.74x 因為呼叫fseek()讓緩衝區作廢,更大緩衝區等於讀更多資料丟掉,傻了 避免呼叫fseek()( 2.33s),0.1x 整併兩次fread(),加速字串處理,調整SD卡參數(1.48s),0.066x 結語 連上網的開發工具,用起來真的爽!後面還能繼續搞事 加一顆電池,常駐在車上 把封包導向遠方,讓我在家裡,...

ESP32做通用資料紀錄器

圖片
緣起 在 ESP32上架網站 , ESP32操作SD卡 ,再來要打造紀錄器,就是開檔把紀錄寫入SD卡 我想錄汽車CAN封包,樹梅派耗電略高,丟車上有疑慮,用MCU會比較省電;這個解完能錄腳踏曲柄的動態,到時候來學神經網路;一魚多吃,做個通用的工具,到處用 主畫面,可以點連結開始記錄 記錄檔管理頁面 錄下的LOG能當場看,下載,或是移除 文字LOG,可以直接顯示 通用資料紀錄器 WIFI晶片加上SD卡,能做各種應用;錄完直接透過WIFI取資料,不用讀卡機 放車上,記錄汽車封包 放單車曲柄上,紀錄加速度感應器,拿來學習神經網路 放機車上,錄製電瓶的電壓 放貓吉身上,看他每天睡多少 ... 不就只是fopen + fprintf()? 起初確實這麼想,然後越來越不單純 通用的格式 存各種資料 紀錄櫃台(task)配備大緩衝區(16KB),資料可以丟了就跑 紀錄櫃台(task)從緩衝區讀出數據寫SD卡;資料不做任何轉換(花時間)直接寫;批次寫入(4KB),避免頻繁寫入掉效能 轉檔(task)把 通用的格式 轉成文字給人看;CAN封包會轉成Linux的candump的格式,串接別的工具 通用的格式 日後可以轉成任何形式 必須簡單易用,網站醜也比破爛的按鈕好;比敲指令舒服 架構圖 AI畫了架構圖,軟體分了不少區塊,多種顏色。不是簡單的fopen() + fprintf() 也許正文現在才開始 AI輔助設計 刻意用Google GEMINI AI進行輔助設計,學習不熟的東西 不熟FreeRTOS 不熟ESP32,包括SDK,開發環境 不熟網站程式設計 有兩種策略做設計,以前我選(1),這次刻意選(2),深思而後行 只管先做出原型設計,欠下大量技術債,之後靠多次迭代整理軟體 假裝自己是架構師,我的決定會影響100人,框架得一次做對(較少的技術債) 開發環境挑選 ,AI的意見好壞參雜,親身測試他的意見,用過去踩坑的經驗判斷好壞 大量的和AI工具進行討論,評估各種開發工具,組合,研究能否維護 研究需要開發那些工具,讓RD能做,也能讓remote debug可行 挑選的工具,在Windows/ Mac/ Linux都要能運作 如果有100人,我會開發模擬器能在PC開發;現實我是1個人,就省著吧 架設網站 ,用AI學不熟的技術,因為基礎範例網路很多,品質不是問題(先評估可靠度)。AI當家教...

微雪電子,PL2303 USB UART Board V2評測

圖片
緣起 上次寫了一篇 USB-TO-UART雜談 ,裡面提到我採購 微雪電子PL2303轉換板 。我也來評測3C用品吧 獨立的序號 Silicon Labs每條線都能單獨設定序號, 工具在網頁上任人下載 ,大氣啊!我手上三條設定1/2/3,在裝置管理員看得到,看起來是16bits 旺玖的PL2303工具,用裝置管理員看上去,每條都有獨立序號;好,有序號確實在windows亂插都不會亂長COM port DYBNB135B02 DBDCB116L16 旺玖的工具找不到 PL2303 datasheet ,PL2303GT OTPROM Writer utility program是存在的,AI工具說得一副可以下載(Google GEMINI),卻沒有。大概只有旺玖的客人有,沒能公開下載。不過如果PL2303真的是OTP(One Time Program),只能寫一次,有工具我也不敢用 這可能也反映實作差異,CP2102是embedded flash,PL2303大概是antifuse(反熔絲),不能反覆寫入 微雪PL2303 UART Board V2評測,機械結構 PCB自帶兩根柱子,插在筆電上能自立自強,是深思熟慮的設計 效能 ESP32-CAM下載,搬545868bytes的效能 460800, 13.6s 921600, 8.8s 2000000, 8s 4000000, 7.2s 首先PL2303可以跑上4Mbps(CP2102只能跑921600),可以用杜邦線;速度拉升並沒有顯著縮短時間,大概ESP32得解壓縮並寫入Flash,所以傳輸速率加快,時間還是差不多 務實的甜蜜點是921600,這個速度也不用擔心信號品質 缺點 PL2303G在Mac/Windows都沒內建driver,還得另外下載。不能無腦用,感覺差了點…… 結語 微雪這條線,有很好的機械支撐,性能穩定。我已經改用他了,非常滿意 他有機械的支撐,站得很穩 PL2303都有獨立序號,不會亂長COM PL2303能跑上4M,可以做高速logging

ESP32的HTTP server

圖片
緣起 ESP32C3有WIFI可以用,他的SDK裡面也自帶HTTP服務器,在裡頭架個網頁,瀏覽器就是單晶片的虛擬儀表。虛擬儀表能任意調整,增減元件,非常好用 顯示資訊,本來要OLED螢幕,現在有大片的瀏覽器 操作按鈕,本來要實體按鍵,在網頁放超連結,或輸入表單就有 HTTP通訊協定 Mozilla Developer Network 介紹HTTP非常清楚。瀏覽器和ESP32主要靠GET/POST兩大命令 GET GET /  抓index page,也就是首頁 GET /?led_op=2 抓index page,同時傳遞led_op=2(代表閃爍) GET /led_toggle 用某個講好的名字GET,連線到這裡就閃爍LED POST POST /led_post 用某個講好的名字,然後再傳遞led_op=2 "telnet"命令能和遠端主機連線,輸入會原封不動送給ESP32,回應也看得到。所以上述所有命令都用telnet實驗一輪,確定會動,換成瀏覽器也會有信心 HTTP通訊協定,標準的GET telnet連接板子的port 80;直接下GET命令,確實看到回應。綠色框框顯示虛擬儀表 HTTP通訊協定,標準的GET帶參數 模擬GET命令後面的路徑,後面接問號加key1=val1&key2=val2額外加上參數 get /? led_op=2  問號後面的代表設定led_op變數為2 我定義led_op=2代表toggle,亮燈變暗燈,暗燈變亮燈,下面範例能讓LED閃爍 因為是GET /,所以照樣顯示原本的頁面 HTTP通訊協定,GET /led_toggle 在ESP32韌體設定/led_toggle這個路徑,連進去韌體讓LED閃爍,並且通知瀏覽器導向回/ GET方式(上面三種)像寄出明信片,基本上都展現在GET後面的字串,可能是指向不同resource,或是加上?led_op=2傳遞額外參數 HTTP通訊協定,POST POST傳輸實況如下圖,大紅框是信封,信封帶上各種meta資料,裡面最重要的紀錄是"content-Length: 8"。然後小紅框才是信件內容把led_op=2八個字元。手敲整個HTTP header不大容易, 黑暗執行緒 的建議,從Chrome的後台直接複製一份來做實驗最快 ESP32收到HT...

ESP32開發環境,雜談

圖片
緣起 因為想學神經網路,做中學最快;我想紀錄曲柄的加速度和角速度,用神經網路判斷坐著或站著踩。這個應用顯然沒商業價值,感受一下神經網路的威力 Arduino NANO BLE 33 是很多EDGE AI都支援的開發版,資料標好丟 Edge Impulse 訓練神經網路,感受一下 不過BLE33插著USB記錄數據,可能線會被扯斷,這樣不行 我需要無線紀錄,ESP32C3我有10片,上頭有WIFI和SD卡,資料採集完存在裡面,再透過WIFI下載不是挺好的?來做吧;怎麼從NANO BLE 33拿到資料,後面再說吧 先前玩過的 ESP32C3我當一般MCU玩了一輪,結果無線傳輸我沒碰(笑) ESP32(10) CAN Logger功能驗收 ESP32(9) Low Power-2 ESP32(8) Low Power ESP32(7) 打通SD Card ESP32(6) CAN Transceiver 挑選心得 ESP32(5) 打通CAN Bus ESP32(4) ESP32-C3搭配Arduino ESP32(3) Visual Studio Code + PlatformIO開發環境 ESP32(2) ESP32-C開發板硬體簡介 ESP32(1) 閒聊 這次要玩的 用酷酷的AI工具輔助,在ESP32 SDK點亮WIFI,跑起HTTP SERVER很簡單(SDK都有) 開發工具閒聊 好,這次我應該用哪套開發工具?選擇不少 Arduino VSCODE + PlatformIO VSCODE + 樂鑫插件 樂鑫 Eclipse ENV Docker build environment Arduino 我打定主意用SDK,先排除Arduino VSCODE + PlatformIO PlatformIO運作正常,用起來很爽;他的Debugger就是該有的樣子 PlatformIO多封裝一層介面,包住SDK,用起來怪怪的反而難除錯,因為得同時看兩層;另外樂鑫並沒有 官方支持 ,我在這個層次有點疑慮 Anyway,因為上次用過,這次就決定不用了(我想試試看別的口味) VSCODE + 樂鑫插件 PlatformIO用起來真的舒服,樂鑫插件還是差了點,不過邏輯也算容易理解 C:\Espressif\SDK (SDK source code) C:\USER\[name...