[筆記] Raspberry Pi 樹莓派的 I/O 介面開發 in Python 取得連結 Facebook X Pinterest 電子郵件 其他應用程式 - 8月 25, 2018 前面文章使用C語言控制樹莓派的周邊介面,需要安裝WringPi的介面函式庫。同樣地,使用Python語言也需要一套介面函式庫,稱為smbus。樹莓派上的介面,如:I2C、SPI...必須借用smbus函式庫接口來控制這些通訊介面,參考底下的連結,有詳細的說明與使用。 RPi.GPIO Library Raspberry Pi 硬體控制 Using I2C LCD on Raspberry Pi 樹莓派3B+上面的操作系統已經內建smbus函式庫了,當我把I2C LCM1602模組接上後,在命令列輸入sudo i2cdetect -y 1,工具便能搜尋到模組的位址在0x27,表示smbus已經成功在系統內了。接下來,繼續用Python來開發LCM模組的控制,如下圖所示。 圖一:LCM1602 in Python 取得連結 Facebook X Pinterest 電子郵件 其他應用程式 留言
[筆記] ESP32 在 VS Code 開發環境的編譯與除錯 - 2月 28, 2021 # ESP32 評比與教學推薦 NodeMCU-32s 的理由 準備工作 1) 安裝 Visual Studio Code (VS Code),並安裝其他 C/C++ 插件。 2) 安裝 Python 套件 3) 下載並執行 Setup ESP-IDF Tools:檢查電腦系統的環境,並幫我們把編譯的工具鏈 tool chain 安裝起來。 4) 在 VS Code 安裝 ESP-IDF 插件,點選插件後,看到下圖一並設定路徑後,點擊安裝 ESP-IDF。安裝 v4.2 版本後,會詢問是否下載安裝工具鏈,如果系統已經有安裝,那就設好路徑即可。最後,再安裝 python 虛擬環境給 ESP-IDF,便完成整個環境設定。 圖一:ESP-IDF 擴充插件 建立專案 1) 從 ESP-IDF 選範例專案:按 F1 後,上方的選單輸入 " ESP-IDF: Show Examples Projects ",出現下圖二的範例專案列表,我們可以從中選一個範例來創建,例如我從當中選了 blink 或 hello_word。按下右上方的創建,就會在左半邊出現專案。 圖二:ESP-IDF 範例專案的列表 2) 編譯專案:按 F1 後,上方的選單輸入 " ESP-IDF: Build your project ",VS Code 環境就會開發進行編譯的工作,在下方的欄位會顯示編譯的過程。 3) 設定模組型號:按 F1 後,上方的選單輸入 " ESP-IDF: Device configuration ",彈出選項後,我們選擇 EPS32 為裝置的型號。 4) 電腦接上 ESP32 模組:按 F1 後,上方的選單輸入 " ESP-IDF: Select port to use ",在 VS Code 會自動彈出 COM port 讓我們選擇,點選 EPS32 連接的 COM 即可。 5) 燒錄程式碼到 ESP32:按 F1 後,上方的選單輸入 " ESP-IDF: Select Flash Method and Flash ",彈出選項 JTAG 或 UART,我們選擇 UART 為下載燒錄的方式 (前面我們已經設定 COM 了)。下載燒錄的方式設好了,下次只要... Read more »
[應用] 在 ESP32 Audio 開發板的 VoIP 範例 - 9月 20, 2021 開發板介紹 安信可 公司(Ai-Thinker)基於 ESP32 晶片推出一塊具有語音功能的 ESP32 Audio Kit 開發板,簡稱 ESP32-A1S,它與原廠的 ESP32 Lyrat 開發板都使用同一套 ESP-ADF SDK 軟體,但是開發板的電路有些差異,底層的驅動程式需要替換才能順利開發。 首先,最大的差異在 ESP32-A1S 語音編碼晶片採用 AC101 ,不過晶片被封裝在 ESP32 模組上,所以我們在開發板上面看不到這顆晶片,然而 ESP32 Lyrat 板採用 ES8388 晶片,因此在 ESP-ADF 中語音編碼的驅動程式需要更替。另外,其他不一樣的地方都在 GPIO 接腳的連接上,整理後,如下表所示,我們需要調整 ADF 底層的 HAL 和 Board 的配置,SDK 才能正常使用。 表一:ESP32-Lyrat 與 Audio Kit 開發板的差異 第一步,下載 ESP-ADF。在 VS Code 開發環境下[1],按 F1 後,選取 "Install ESP-ADF",VS Code 會自動從 GitHub 下載,並安裝 ADF 開發套件。如果是使用 ESP32-Lyrat 板子,可以直接跳到第四步,創建範例開始開發了。使用 ESP32-A1S 板子前,需要調整一下底層代碼,接續前面動作,我們從 GitHub 下載 A1S 的驅動程式, ESP32-A1S-AudioKit 程式碼,其目錄結構與 ADF 一樣,方便我們相互比對兩者差異。 第二步,到 \esp-adf\components\ audio_hal \driver 目錄下,將下載 A1S 裡的 AC101 驅動程式放進來。接著,要將 ac101 目錄和 ac101.c 加到 CMakeLists.txt 文件,同樣也要加到 component.mk 文件裡 ,這樣編譯過程就會把 AC101 驅動程式加進來編譯了。 第三步,我們再到... Read more »
[筆記] Raspberry Pi 樹莓派的軟體開發 - 8月 05, 2018 前言 本文的實驗過程是以樹莓派 3B+ 為主,Python是樹莓派板子上的操作系統所提供的程式語言,並且板子上的I/O介面控制官方建議用Python語法開發。因此,在樹莓派上寫程式的第一首選當然是Python,我們可以使用系統上內建的 Python 3 IDLE 或 Thonny Python IDE 的整合開發套件。雖然它是推薦的語法,不過樹莓派系統也可以使用 C/C++ 語言來開發程式,而且也內建一套IDE套件。底下就用簡單的程式碼來試試看這些開發套件。 C/C++開發 樹莓派官方的系統提供一套IDE軟體開發套件,稱為 Geany 。它可以編輯C/C++/Java/Python...等語法,並且編譯組建成執行檔,在樹莓派這樣的操作環境下,這已經算不錯的官方IDE套件了。 首先,打開Geany之後,先在工具列上選擇"專案",並創建一個新專案。舉例來說,我想要測試C++輸出功能,於是創建一個名為TestCpp的專案。接下來,在工具列上選擇"檔案",並創建一個"開新檔案",它會讓我們選個範本,此時選Main.cxx。系統幫我們在專案目錄下建立一個C++檔案,有main function的範本,如下圖一所示。 第二步,在這個檔案裡開始寫些簡單的code,寫個Hello World吧!順便編譯與組建一下,看看有沒有成功。不過,我的專業裏頭總不能只有一個Main檔案走遍天下吧?還是需要有些其他檔案來組建。新增一個加法函數的檔案,名為myadd.cxx,存放在專案的目錄下,這時就可以從main函數調用這個外部加法函數,試試看!一開始編譯,發現會產生編譯失敗,這是因為組建的命令沒設定妥當,預設的命令是編譯單一檔案,這會兒需要編譯一堆檔案,所以要調整命令,如圖二所示。再次編譯後,成功了,可以執行看看結果。 圖一:Geany IDE C++ 軟體開發環境 圖二:修改組建的命令 Python開發 樹莓派官方的系統內建兩套IDE軟體開發套件,一套稱為 Pytho... Read more »
[筆記] Visual Studio 遠端偵錯的設定步驟 - 2月 02, 2019 通常我們用微軟Visual Studio IDE開發程式並且在本機上運行與除錯,但隨著開發系統越來越複雜,程式運行在某台服務器上而不是自己的機器,這時候需要進行遠端程式的除錯,架構如下圖一所示。自己的主機要安裝微軟的Visual Studio 2017 IDE,待測的機器上面要有Remote Debugger工具,雙方透過網路的連線進行除錯。 圖一:遠端除錯與待測機器 [步驟]: 1) 在自己主機上的Visual Studio目錄下面找Remote Debugger這個工具目錄,然後把Remote Debugger工具複製到待測機器上。 2) 程式的除錯屬性要設定正確,屬性頁的遠端Windows偵測工具,如下圖二所示。我們必須設定遠端命令 、 工作目錄 、 遠端機器IP 、連接是否驗證...等等,連線的權限要配合遠端機器的設定。 3) 在遠端機器上的Remote Debugger目錄,開啟 msvsmon.exe,這時只要到工具選單設定連線的權限,如下圖三所示。圖中是設為無權限的方式,不需要驗證使用者。 4) 在VS IDE環境運行遠端Windows偵錯工具,如果發現遠端機器上出現錯誤,錯誤的原因是缺少某些 dll 檔案,如:msvcp140D.dll 、ucrtbased.dll... 。我們在本地主機上找找看這些缺少的檔案,應該能找到,然後再複製到遠端機器的 \Windows\System32 目錄底下。 5) 最後,編譯我們的程式後,要再把exe 、 pdb檔案複製到遠端機器的工作目錄上。接著,運行我們的程式遠端 debug,這樣就可以一步步看著遠端機器上的程式怎麼執行了。 C++遠程偵錯 圖二:C++程式的遠端屬性設定 圖三:遠端機器的連線權限設定 C#遠程偵錯 圖四:C# 程式的遠端偵錯設定 Read more »
ESP-IDF 在 Visual Studio Code 教學 (不同於 ESP32 Arduino IDE) - 1月 17, 2022 # ESP32 在 VS Code 開發環境的編譯與除錯 距離上次寫關於 ESP-IDF 文章已經一年了,參考上面的連結,這期間 Espressif IDF 版本升了不少級數,在程式開發上又新增了一些便利的功能。首先在 Visual Studio Code 先安裝插件 Espressif IDF Configuration,如下圖影片所展示。現階段並沒有安裝最新的插件 v1.3.0,因為 VS Code 和 Espressif 之間似乎有不相容的問題,網上有人也提到遇到版本問題,所以我們現階段就安裝前一版本,等待一段時間後,問題解決了,再升級到最新版。 在 v1.2.0 Espressif 新增一個功能,創建新項目 (New Project),如下面影片所展示。我們從配置中能設定項目名稱,選定路徑,選擇使用的開發板型號,最後可以選擇由系統的 template 範例來創建新項目,或者自行手動添加項目所需的 Components 來創建。 創建項目後,我們可以在 VS Code 環境進行編譯,當然也可以在 Command Line 的終端機環境下編譯。在終端機環境下,我們必須先設定環境變數,執行 export.bat ,參考底下影片的操作。接著,我們就能以指令方式執行編譯," idf.py build ",然後燒錄上傳也是用指令執行。使用時,可先查看 idf.py 這個程式的說明。 終端機方式並不是我們首選的環境,回到 VS Code 環境上。有關編譯項目的參數,我們要打開 SDK Configuration,請參考下面影片所展示。SDK Configuration 畫面裡所有的配置是來自 sdkconfig 這個文件,可以用一般的文件方式打開來看看,裡面的參數主要定義 ESP32 系統層級的配置。除了這個文件之外,每個子項目或路徑底下還有個別的參數,檔名為 Kconfig.projbuild ,這文件檔採用結構式的編排,當 SDK 配置時會將這個檔案也一起載入,我們可以比對 Kconfig 檔案內容與 SDK 呈現的欄位之間的關係。... Read more »
[筆記] Android APP BLE範例程式 -- BluetoothLeGatt - 10月 31, 2015 前言 在 Android 裡面的藍芽和低功耗藍芽 (Bluetooth Low Energy) 控制方式不一樣,這裡有一篇文章[ 連結 ]說明傳統藍芽與 BLE 有哪些部份不同。此外在 API 方面,很多低功耗藍芽的函式必須在 API level 18 以上才能使用,也就是 Android 4.3平台以上。上一篇介紹的 BluetoothChat 程式是採用傳統的藍芽控制方式,為了讓開發者認識 BLE 如何控制,Android 官方網站提供一個 BLE Gatt 的範例程式,圖一所示是這個範例程式的專案檔,主要的程式檔為 DeviceScanActivity 、 DeviceControlActivity 和 BluetoothLeService。 圖一:BLE範例程式專案檔 圖二所示是這個範例的系統方塊圖,從 AndroidManifest.xml 設定檔可得知操作畫面先呼叫 DeviceScanActivity 類別,它衍生自 ListActivity 類別。這 Activity 畫面的 onCreate( ) 函式裡面依舊執行傳統藍芽的檢查: 檢查本身有無藍芽裝置 (參考前一篇 BluetoothChat 的做法) 檢查有無 BLE service 打開藍芽功能 搜尋 BLE 設備 當 DeviceScanActivity 創建出來後,畫面右上方會出現選單,這對應到類別的 option 操作。這裡有兩種選擇:start scan 或 stop scan,如下圖的左邊所示。當搜尋後的結果會列在畫面上,操作者可以從中選一 BLE 設備進行連線,如下圖的右邊所示。透過 Intent 方式開啟 DeviceControlActivity 類別,生成這類別過程會開啟 BluetoothLeService 這個藍芽服務。這裡使用了一個技巧,就是 bind service 的方法,我們把這個 service 類別想像成提供在背景持續工作的服務,而且能提供訊息給 UI 畫面。 圖二:BLE範例的系統方塊圖 搜尋 BLE 設備 ... Read more »
[模組] 4G 通訊模組的應用 - 12月 08, 2020 實際應用 在一個監控系統之中,網路通訊往往是最基礎的建置,如果已經布建了有線網路,自然省了網路通訊的工事。不過,有些監控環境幅員廣大,並不適合布建有線網路,因為採用 4G 通訊模組較為方便,如下圖一所示。 在圖中的左邊是監控的場域,圖中的右邊是監控中心,配置有資料庫系統。在偏闢的場域,安裝各種感測器,並將收集到的資料回傳監控中心的資料庫,這時整合一個 4G 通訊模組彼拉有線網路更為有效率。因此,我們研究目前市面的 4G 模組,並進行測試。購買模組時,要留意 4G 支援的頻道,有些模組支援的頻道數不夠多,未來使用時可能會遇上通訊不通,而我們實驗的模組是 4G - EC20 (Quectel)。 圖一:4G 通訊模組應用在監測環境 模組類型 目前我們使用的 4G 模組有兩種,可以依據本身的需求選用適合的模組,一種是用來整合嵌入式系統的模組,一種是獨立運行的模組。說明如下: 1) UART 介面為控制的模組:這種 4G 模組可以用來與其他模組整合在一起,MCU 藉由 UART 介面與 4G 模組連接,指令與資料傳輸都透過這介面通訊,MCU 組成一個系統並負責整合每個模組的運作。如下圖二所示,這種模組比較容易吸引 maker 的使用。 2) 路由器的模組:這種 4G 模組已經可以直接單獨使用,本身有乙太網路端口,如下圖三所示。運行這模組之前,我們需要先配置這 4G 路由器,類似配置 IP 分享器一樣。 圖二:以 UART 介面控制的 4G 模組 圖三:4G 模組路由器 UART 介面控制 4G 模組的控制指令都是靠 UART 介面做通訊媒介,而網路封包的資料也是透過 UART 介面傳送的,UART 通訊配置為 115200 bps, 8-N-1 的格式,看的出來這只適用於 低流量 的通訊應用。接著來了解一下如何使用模組,控制模組的指令是以 AT 方式處理,簡單區分下列的 AT 指令: 1) ... Read more »
留言