|

Adafruit嘗試用ChatGPT撰寫Arduino Driver,結果如何?

   

作者:陸向陽

圖1 Adafruit嘗試用ChatGPT自動產生Arduino驅動程式(圖片來源:Adafruit)

眾所皆知,運用大型語言模型(LLM)實現的文字交談機器人ChatGPT可以做許多事,例如回答問題、幫人寫文案、幫忙生出一段文字的摘要等,甚至已經有人用它來生成Arduino的程式碼,且在簡單的程式上已經有高完成度的水準,另外寫程式的人有時討厭寫程式的註解,也可以透過相似手法來自動生成註解文字。

開放硬體公司Adafruit Industries,嘗試用ChatGPT生出程式碼

正因為ChatGPT有生程式碼的潛力,所以開放硬體公司Adafruit Industries的擁有者Limor Fried也嘗試用ChatGPT來生出該公司板卡的程式碼,更具體地說,Adafruit公司出品的板卡多會附帶提供該板卡的範例控制程式,以便購買者方便運用該板卡,而這些範例控制程式通常只是整體程式的一小部份,所以通常寫成函式(function)的方式供主程式呼叫使用。

而這些函式因為可以直接驅動硬體板卡的運作,所以也可以稱為驅動程式(driver),且由於Adafruit已經推出非常多的板卡產品,因此也累積眾多的函式,把許多函式集中在一起,就稱為函式庫(library)。

Adafruit的擁有者Limor Fried(綽號Ladyada,有Adafruit/Ada夫人的意思,其實也有尊敬Lady Ada Lovelace的意思,Ada Lovelace是19世紀的英國伯爵夫人,也是名數學家、作家,她發現機械式電腦的運用價值)本身就是一位女性電子電機工程師,所以Adafruit板卡的驅動程式多是由其撰寫的。

圖2 維基百科對Limor Fried的介紹(圖片來源:維基百科)

不過,撰寫板卡的驅動程式可說是苦差事,各種板卡使用不同的晶片,晶片的基本技術文件稱為datasheet(少有合適的中文翻譯),不同公司的不同晶片,其datasheet格式與內容差異很大。

然後,Adafruit為了方便創客們使用板卡,已經將許多板卡設計成使用Grove或Stemma QT連接器的型態,連接器實際的傳輸介面為I2C介面,所以驅動板卡的驅動程式,也必須寫出I2C協定的動作,才能正確驅動板卡。

所以Ladyada寫出的驅動程式已經非常多,而創客可能一次使用上多個板卡,並且都用I2C介面連接,I2C介面需要給每個連接的裝置正確定址才能使用,否則會因為裝置衝突而無法正常運作,所以Adafruit的驅動程式會遵循一致的風格規範來寫,這裡就稱為Ladyada風格。

這些Ladyada風格的驅動程式已經放在GitHub上供人取用了,稱為Adafruit_BusIO,而ChatGPT最新的訓練模型GPT-4也爬過GitHub上的驅動程式資料了。所以,理論上,ChatGPT只要稍加提示,就可以由它自動生成同樣是Ladyada風格的驅動程式,這樣Ladyada本人就可以輕鬆點了。

用ChatGPT訓練分身:Mini-Limor

Ladyada為了讓自己的撰寫工作輕鬆點,有意用ChatGPT訓練出自己的分身,暫且稱為Mini-Limor(她本名Limor Fried)。

對此第一個目標是要ChatGPT寫出一個用Vishay公司VCNL4020感測器(感測周遭亮度與紅外線)的I2C驅動程式,所以ChatGPT必須先K一下這個感測器的datasheet,作法上是用一個免費的PDF解析外掛程式AI PDF(datasheet通嘗試pdf檔案格式),讓ChatGPT消化吸收一下感測器內有哪些暫存器、該放置什麼值等。

圖3 Vishay VCNL4020晶片的datasheet畫面(圖片來源:Vishay)

然後Ladyada就開始下各種提示,希望ChatGPT產生對應的驅動程式碼,目標是產生C語言版與Python版。結果是,是可以產生程式碼沒錯,但是也是有錯誤的地方,就如同ChatGPT近期常被人說的幻覺(hallucinate),為了避免錯誤,所以需要人工查核生出的程式碼,結果是,其實跟完全用人工方式撰寫所耗的時間差不多,沒有省時的效果,倒是可以讓Ladyada比較不費撰寫的心神。

雖然初次的嘗試不是很成功,但Ladyada後續可能持續努力嘗試,甚至她已表示類似的方式也能用來生成CircuitPython的程式碼,並可望用於Raspberry Pi Pico上。

圖4 試圖產生Arduino驅動程式而與ChatGPT交談的歷程畫面(圖片來源:OpenAI、Adafruit)

結語

最後,用生成式人工智慧(Generative AI, GenAI)方式來產生程式碼,讓人感覺有點偷懶,但時代總是在進步,事實上,今日創客普遍使用的各種板卡,也已經是大幅隱藏電子工程技術細節的,而減少程式碼甚至是完全不用上程式碼,其實也是個大趨勢,稱為Low-Code, No-Code,合稱與簡稱LCNC,目前的LCNC多半是用選按、拖拉放等方式代替撰寫,但未來或許也會更倚賴人工智慧方式生成也說不定。

延伸閱讀:

陸向陽
陸向陽

Author: 陸向陽

從電子科系畢業後,即以媒體人的角色繼續這段與「電子科技」的不解之緣。歷任電子技術專書作者、電子媒體記者、分析師等角色,並持續寫作不殆。近來投入Arduino、Raspberry Pi等開放硬體的研究與教程介紹。

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *