[硬體工程師] Python 學習紀錄

吳奇峰
Jun 18, 2022

--

硬體工程師,通常會的兩個軟體 ,畫電路跟Layout佈線。雖然自己也會一點點 C 語言,但每次提起筆(電腦)想要寫一個 Windows 下的小工具,還沒開始就退縮了。因為,要準備的東西太多了。很多基本原理知道,但要編寫到可以用需要常是很多東西的。最後就是放棄一條路。請會寫軟體的朋友幫忙比較快

自從自己摸索Python 這兩年下來,發現這個軟體寫一點點小程式還是可以的。雖然不能商品化,但是幫助自己完成自己的工作,減少重複性的作業。還是可以有很大的幫助的。

很多人問我說 學習程式可以幫助到他那些事情,其實如果只是學學,不去想要實踐,大多是看過就忘記了。也藉與此,勉勵自己,當學過的東西,就找一些專題來完成他,那怕只是一個很簡單的工具。都會有幫助的,動手做才是真的學到。

言歸正傳,紀錄一下這次的Python 要完成的任務。硬體工程師接了一個Mp3撥放器的控制器專案,完成硬體設計,還要驗證硬體的完整度,再交給軟體去做整合。但客戶再交予材料時需要將多了Mp3 檔案合併成一個二進位檔案。如果是以前的我,應該只會用 copy A+B+C…去完成。但,因為學了Python 就想,用它來簡化工作流程吧,畢竟客戶給的檔案可能常常修改。

於是乎 開始動手作,以下是我一步一步的流程,也提供給不太會的初學者,當大家看到一個問題,再使用沒有經驗的工具可以怎麼去完成。

首先,先了解 目的,將所有 MP3 檔案,依據提供的編號 將 A段B段C段連接。再寫入到MCU 上面的 Flash。目的就是產出一個新的 mp3檔案包含所有檔案片段在裡面

檔案有A.MP3 、B.MP3、C.MP3 ,最後產生 M.MP3 (二進位檔案)

一般人可能不太了解文字檔案跟 二進位檔案有何不同。這邊解間說明一下,懂的人就可以跳過這一段。電腦的系統中 都是以二進位保存著檔案。但為了讓人可以看得懂,衍生出文字形檔案,文字形檔案裡面只包含了 人看得懂的 文字,ABCDE、中文字、日文字…等。當然也有些看不到的控制字元、例如換行,檔案結束等等。如果有筆記本打開文字形檔案室可以看得懂的。相反的,二進位檔案使用筆記本打開就會是一堆天書亂碼。如下圖,這些二進位檔案通常是給機器看得,很多影音檔案也都是這樣的格式,因為檔案佈是給人看的是給程式或者電腦機器看得。而撰寫程式的code 是給人看得,所以用編輯軟體打開來,是看得懂的文字檔案。例如我們常用的 .py 、.c、.h、.cpp、.ino。這些原始code 需要經過編譯 電腦才會看得懂才會動唷。以上簡單的說明,希望讓你有一點了解。我也順便理一下我的認知。

Python 要如何開啟一個檔案,並寫入內容呢?

使用 open 這指令來開啟檔案,並告知開啟的檔案路徑與名稱,包含格式(文字格式還是二進位)

先創建一個新的文字檔案

將剛剛創建的檔案開啟讀取出來再打印到終端機上

接下來使用二進位讀取,我們來看看有何不同,將上面Python 第六行改成 ‘rb’,表示使用binary 模式讀取

fObj = open(FileName, 'rb')

輸出的結果將是一堆看不懂的東西

我們將寫入也改用 二進位的方法寫入

fObj = open(FileName, 'wb')fObj.write('這是一個開啟檔案與輸入樣本')

卻得到錯誤訊息

filewrite.py", line 3, in <module>
fObj.write('這是一個開啟檔案與輸入樣本')

原來’wb’ 二進位的寫入不可以寫入 "字串",這邊我們將其改成 python 的轉換格式指令bytes,也為了讓大家看清楚,將寫入的字串改成英文。

大家會看到多一個 encode(‘utf-8’) 在字串後面,這是告知使用哪一種編碼系統。下次有機會再介紹編碼系統。

fObj = open(FileName, 'wb')fObj.write(bytes('this is a book'.encode('utf-8')))

這樣一來我們就可以看到不一樣的地方囉

FileName = "MyFirstFile.txt"fObj = open(FileName, 'wb')fObj.write(bytes('this is a book'.encode('utf-8')))fObj.close()################print('====二進位模式======')fObj = open(FileName, 'rb')FileData = fObj.read()print(FileData)fObj.close()##################print('====文字模式======')fObj = open(FileName, 'r')FileData = fObj.read()print(FileData)fObj.close()

對檔案操作有興趣的朋友可以再去看更多的介紹,例如在原有的檔案寫入增加的部 分“a”,跳轉到檔案中的地方去讀取 fObj.seek(n)

在python 中有個簡單的方法不需要去注意何時關閉檔案,通常忘記關閉檔案常常會造成檔案無法讀取或者資料流失。下面就是 簡單的使用

使用 with 的 block 中 fObj 都是開始的狀態,離開此 Block 自行會關閉。

下面分享這次整合Mp3 的專案內容,雕蟲小技

--

--

吳奇峰

來自新竹科學園區-喜歡拆解電子產品-學習與閱讀