MCU單晶片韌體設計

2020年12月14日 星期一

Windows 10 系統還原 (Windows 10、8)

 

若不想一天到晚重灌系windows系統. 那麼這個功能是一定要啓用的~

在工作列的搜尋方塊中,輸入建立還原點,然後從結果清單中選取[建立還原點]。
在[系統內容] 方塊中的[系統保護] 索引標籤上,選取[建立]。


Windows 會自動根據定期排定的時間間隔建立還原點,以及在安裝許多軟體之前建立還原點。 如果要手動建立還原點,就直接點選 [建立], 輸入還原點描述,然後選取[建立] > [確定]。 如果D磁碟機不用保護, 則不要開啓D的磁碟機的系統保護. 如此還原時就一定也只會還原系統碟而已。










2020年11月27日 星期五

TelegramBot 傳送貼圖的方法

 

TelegramBot 傳送圖片的方法


def start(update: Update, context: CallbackContext) -> None:

    update.message.reply_text('Hi!')

    update.message.reply_sticker('http://e2412fdcd657.ngrok.io/sticker.png')

而參數是圖片的URL位址


可以在windows 上利用MobaXterm 啓動HTTP Server 並把圖片(stciker.png)放在資料匣下. . 用瀏覽器存取 http://127.0.0.1/sticker.png


 sticker.png要放在C:\Users\Joseph下

但telegram Server 無法存取此網址 127.0.0.1 ? 怎麼辧呢? 我們可以利用ngrok 在電腦上打一個洞. 讓外面Telegram Server 可以連進來我們在本機(Localhost)的HTTP Sever


下載ngrok Windows版本, 並點擊執行ngrok.exe, 接著鍵入 ngrok 80 , 將會出現底下畫面


在瀏覽器上打入 http://e2412fdcd657.ngrok.io/sticker.png   , 若可以存取到. 則Telgram Server 就可以存取到了,這個網址就是貼在程式碼中的圖片位址

 





註: 免費的MobaXterm只有180秒啓動時間就會自動關閉, 可以自己架設其他的web Server. 或註冊MobaXterm


2020年11月17日 星期二

iPAS 物聯網應用工程師認證(葵花寶典)



0.) 關於iPAS 物聯網應用工程師考試簡介



1.) IoT 技術架構簡介
2.) IoT 通訊技術
3.) IoT Cloud平台

4) 物聯網感測層
4) 物聯網應用層 





5.)  Quick Overview



 
  6.) IoT Project Demo:

ARM mbed 物聯網平台實戰(課程節錄)
https://youtu.be/sslJLgOPfCM



ARM mbed Cloud 平台架構簡介
https://youtu.be/GrMD8Me5qg0




IoT Gateway Demo
https://youtu.be/tZFMY5UIG6s



智慧POS機-人臉自動結帳
https://youtu.be/DHTQCF6t1Jw



AIoT智能居家燈控系統
https://youtu.be/Dcz28sASv0w



Control your Raspberry Pi using Line Bot
https://youtu.be/WL2RrYrGB1Q



Iot自動販賣機
https://youtu.be/9jxIuyiIXko




2020年10月5日 星期一

AI邊緣運算實作: TensorFlow Lite for MCU




AI邊緣運算


隨著物聯網與人工智慧發展,工作負載開始由雲端移轉至終端,AI也隨之進入到嵌入式系統及物聯網終端裝置中。在終端或所謂邊緣裝置這類的超低功耗微處理器上所實現的深度學習,被稱呼為微型深度學習。然而在MCU本身運算速度就不快,記憶體空間也有限的情況下,AI模型也不能太大,因此要能確保AI 效能,同時兼顧低功耗、成本與縮短開發時間,都是研發人員所必須面對的挑戰。

什麼是TensorFlow Lite

TensorFlow Lite for MCU正是專為邊緣裝置設計的TensorFlow模型預測框架,是TensorFlow的精簡版本,讓開發者可以在物聯網與嵌入式裝置中部署微型機器學習模型。

AI模型佈署於微控制器,需要那些知識 ?

首先,必須先知道TensorFlow Lite for MCU 在實作上會涉及Deep Learning 觀念及MCU開發技術,然而這是兩個截然不同的技術領域的人, 故要能有效整合出好的AI系統,必須能同時理解這兩邊的技術。簡而言之,你會需要對於Deep Learning 有一定的概念、還要有模型優化(如Quantization)、TensorFlow Lite的框架以及MCU程式開發的相關知識。技術不能說很難,但對於初學者,沒有人引導,是有困難度的,因為開發環境包含AI環境與MCU的BSP環境都不太熟悉的情況下,產生的錯誤常常搞不清楚問題在那 。

在板子跑AI和我在電腦跑AI有何差別?

在電腦上跑AI,對於輸入資料多半是.csv或圖片,以檔案方式存在。 然而在邊緣運算上, 輸入的資料通常是來自硬體的感測器,因此要能正確且即時的對資料預處理並且轉換成模型所須要的x輸入型狀(x input shape)才能代入模型。但資料抓取上要如何切成一個剛好完整的x 來進行推論呢? 例如聲音訊號是連續波, 不可能每次都剛好切出一段完整的聲音丟入模型,而得到很好的正確率。還有,像是感測器訊號也可能有雜訊產生,也會造成模型誤判。所以在系統上,需要有一個處理的機制來讓我們的AI系統達到穏定。

在板子上讀取硬體訊號,作為模型輸入的資料 $x$

板子上的感測器,可能像是G-Sensor 、Microphone 這類的。接著我們要讀出感測訊號並觀察訊號。務必確認感測訊號是正確的,因為不對的$x$, 就會是GIGO (Garbage In Garbage Out)。
然後對原始訊號做訊號處理 (即數據的前處理) ,獲得訊號的特徵向量 $x'$ 後 ,再餵入模型 $\hat{y}=f(x')$

在Sparkfun edge board 讀取G-Sensor X, Y,Z 的變化


在Sparkfun edge board 讀取Microphone 左右聲道變化


Tiny DL Demo
底下Demo 幾個AI邊緣運算分別在圖像、聲音、感測訊號的應用

2020年10月2日 星期五

Quick guide for building Raspberry Pi kernel 4.4.x


For  Driver course (www.ittraining.com.tw)

1) 安裝toolchain (Cross compiler)

# For 32 位元Linux 

export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi/bin:$PATH

# For 64 位元Linux
export PATH=/home/student/pi/tools/arm-bcm2708/arm-bcm2708-linux-gnueabi-x64/bin:$PATH


root@ubuntu:/home/student/pi# arm-linux-gnueabihf-gcc -v

..
gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)





2) Linux kernel 編譯

#進入kernel source tree

cd linux  

# 產生 .config


For Raspberry Pi 2, Pi 3, Pi 3+, and Compute Module 3 default build configuration

KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

For Raspberry Pi 4
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

#編譯 Linux kernel、kernel module 及 device tree

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j 2
# 安裝  kernel module

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=../modules modules_install



#複製kernel image & dtb 到 Raspberry Pi


sudo cp arch/arm/boot/zImage /boot/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/


#複製 kernel modules 到 Raspberry Pi


tar zcvf modules.tar.gz  modules

scp modules.tar.gz root@192.168.1.141:/root

tar zxf modules.tar.gz
解開後將 <kernel version> 目錄放到 /lib/modules/


----------------------------------------------------
在 Raspberry Pi 編譯kernel module

1.) copy kernel source to  Raspberry Pi

scp linux-rpi-4.14.98-v7.tar.gz root@192.168.1.157:/root

tar zxf linux-rpi-4.14.98-v7.tar.gz

2.)建立連結到 kernel source

cd /lib/modules/4.14.98-v7
ln -sf  /root/linux-rpi-4.14.98-v7 build




------------------------------------------------------------------------------------
3.) build  driver module from source

cd kernel_driver/01_LED 
.
├── chr_led.c
├── Makefile
└── test.c

make 


├── chr_led.c
├── chr_led.ko
├── chr_led.mod.c
├── chr_led.mod.o
├── chr_led.o
├── Makefile
├── modules.order
├── Module.symvers
└── test.c

發生 fixdep error! Exec format error

進入kernel source 重新產生ARM版本的工具集

cd /root/linux-rpi-4.14.98-v7
make scripts 







4.)   測試 module

#載入模組sudo insmod chr_led.ko

#顯示所有模組
lsmod




#用user應用程式測試driver
gcc test.c -o test

sudo ./test   ==> 你會看見LED 在閃礫

#卸載模組
rmmod chr_led







2020年9月18日 星期五

好用的SSH Client : MobaXterm


 MobaXterm 為一個SSH Client, 可以用來連入我們Linux 的伺服器

    新增SSH Session: 

       Remote Host: 虛擬主機的外部IP


接下來會需要輸入登入Linux主機的帳密  (記得:有分大小寫)


使用MobaXterm的三大好處
  • 你可以用SFTP的視窗操作, 就可以直接上傳或下載遠端Linux主機的檔案,

  • 你可以遠端開啓,編輯Linux主機的檔案, 如果你不熟vi或nano這類UNIX文字編輯器,這可以讓你使用你所習慣的windows編輯器, 如Notepad++等.



  • 由於MobaTerm 內含X Server,所以你可以在遠端執行具有一個GUI 視窗的程式 (X Client), 而視窗畫面會出現在我們本機的windows上. (有興趣可以去google 一下 X Window, X11 protocol) 


  

     Note: 預設MobaXterm 使用SSH, 會啓動X11 Forwarding. 可以讓GUI 視窗仿佛要顯示在local端,然而實際上是走SSH 通道將畫面Forwarding 到windows系統這邊來.


在windows上用Virtual Box 建置Linux主機


STEP 0:  Prepare Your VirtualBox Environment

下載VirtualBox 軟體: https://www.virtualbox.org/wiki/Downloads

下載 Ubuntu Image (取得一個已經包含完整系統的虛擬應用裝置檔案ova檔)


*ova 為VirtualBox使用的開放虛擬機器格式OVF (Open Virtualization Format)


STEP 2. Importing an Existing Virtual Machine into VirtualBox
 

啓動 VirtualBox , 並在 [File->Import Appliance]


選擇xxxx.ova檔, 載入後, 之後此VM系統及運作中在檔案系統所產生的檔案, 預設是放在
C:\Users\<user>\VirtualBox VMs\LinuxVMImages\xxxx下, 此即為Machine Folder 的位置。 若要變更預設Machine Folder位置, 則在Import Appliance時要點選
Expert Mode, 則可以在Import Appliance時, 變更Machine Folder的預設位置.



匯入需要一些時間....wait ..wait ..




STEP 3. Start Virtual Machine

接著點選剛匯入的VM, [Start] 


啓動時也許會跳出錯誤訊息, 大多數是因為VM內的網卡硬體裝置可能和你的機器不同, 所以只要重新選擇成你機器的網卡, 就可以正常啓動!




以使用者帳號 ubuntu (password: ubuntu) 登入, 大功告成.




FAQ: 

  1.若看到錯誤訊息像是CPU虛擬化的問題, 就要進入BIOS 設定畫面,將 "Intel virtualization
 technology" 給打開


2.  確認.ova檔案是正確的, 至少檔案大小要是對的



其他

1.) 在windows使用SSH Client登入Ubuntu

在Ubuntu 下 , 開啓 terminal 執行 ifconfig 可以看到Ubuntu IP,  接著在windows 啓動SSH Client (如MobaXterm) 連入。接著用 SSH 的SFTP 功能, 如同FTP一樣, 可以很方便的讓Host 和 Guest 交換檔案。  ==> 更多關於Mobaxterm的使用







設定時區

sudo timedatectl set-timezone Asia/Taipei

date 





2.) Shared Folder

可以讓Host OS( Winodws)  分享資料匣給Guest OS (Ubuntu), 則Host可以和Guest共用此資料匣來交換檔案. Host 啓動Shared Folder 並勾選自動mount , 則Guest OS (Ubuntu) 會mount 此 資料匣在 /media路徑下, 或者開啓檔案管理員 (nautilus) 也看到此共用的資料匣。



相關文章:


2020年9月7日 星期一

win10安裝 Anaconda +Tensorflow2.0

一. 建議使用Google Colab 執行keras/tensoflow 的程式,因為這是最適合初學者的操作環境, 不僅可以省去很多套件安裝的麻煩, 還可以擁有免費的GPU/TPU 計算資源可以使用.




二.  Win10 安裝 Anaconda + Python 3.7+ Tensorflow2.x


1. ) 先下載Anaconda 3.x    並安裝 (基本上只要一直按"下一步",即可完成安裝)



2.) 利用Anaconda 建置一個虛擬環境, 並在此虛擬環境下安裝所需的套件

先在Windows 開始選擇, 找到 “Anaconda Prompt”, 並開啓 [Anaconda Prompt]




 
接著執行以下指令

#新增虛擬環境(取名為tf2.0)

conda create -n tf2.0 python=3.7

#啓用虛擬環境並安裝TF2.0 (穏定版本)

conda activate tf2.0

pip install tensorflow==2.0.0-beta1

pip uninstall numpy

pip install numpy==1.16.2

pip install matplotlib


#在虛擬環境tf2.0安裝其他套件 (如果有需要的話)

conda install jupyter


#在虛擬環境tf2.0, 進入python 互動環境(REPL)並檢查TF版本

python

import tensorflow as tf

tf.__version__





#移除conda虛擬環境tf2.0

conda env remove --name tf2.0

=======其他=============

# 將tensorflow 2.0 更新到目前最新版本(非stable 版本, 如果有必要的話才更新)
pip install tf-nightly --upgrade


2020年9月3日 星期四

使用Google Compute Engine 建置Linux環境

 

申請Google Compute Engine 90天試用


利用 gmail 帳戶, 在Google Compute Engine (GCE) 快速獲得免費的LINUX主機
申請時雖然會需要輸入信用卡號.但90天內使用是不用錢的 ~

1.) 建置虛擬主機

 
新增一個 VM 執行個體



主要是選擇作業系統, 


這裡我們選擇了Linux Ubuntu 18.04 的版本






基本上其他的設定都預設就可以了, 在最下方, 按下 [建立] 就這樣清鬆地建立一台LINUX 主機了. 接下來就是遠端登入使用這台主機了.

2.) 使用SSH 登入GCE的Linux Ubuntu 

使用SSH登入, 只允許使用RSA認證的方式登入。我們可以使用puttygen.exe 來產生成對的RSA public key & private key


3.) 在GCE/[中繼資料] [安全殼層金鑰] 新增一組RSA Public key

  這裡的金鑰及值, 都是從puttygen.exe  貼上來的





2020年9月2日 星期三

Python Open GL及RL 套件安裝


進行下列軟體安裝  ( 底下安裝指令在Ubuntu 18.04的測試過,皆可順利安裝)

若沒有Linux 環境怎麼辦? ==> 請參考使用Google Compute Engine 建置Linux環境

得先確認 python版本須為3.6以後 (事實上, Ubuntu 18.04 所安裝的Python己經是3.6以後的版本), 

執行  python3 -V  會顯示python的版本 ==> Python 3.6.9
 



開始安裝套件

[Install pip3]
sudo apt-get install python3-pip


[Install PyOpenGL]
sudo apt-get install -y python-opengl

[Install RL SDK]
sudo pip3 install pybullet
sudo pip3 install gym

 執行 Hello PyBullet World 範例


可用SFTP 將測試檔案test.py 上傳Ubuntu 主機或直接在主機上新增程式

新增一個純文字檔案, 將下列代碼複製貼上, 並存為test.py 


執行python3 test.py , 終端機上會出現底下畫面



會開啓Open GL所顯示的3D畫面視窗, 恭喜你環境建置成功啦


[References]

https://github.com/bulletphysics/bullet3/releases
https://gym.openai.com/docs/#installation





2020年8月9日 星期日

DYNAMIXEL Motor: R+ Manager 2.0

 選擇 DYNAMIXEL X 系列(因為我們是XL430-W250 servo)

會自動選擇COM PORT (FTDI USB-Serial)
 Baudrate : 57600 bps (出廠預設)
開始掃描, 成功掃描到 XL430-250 motor
可以用工具針對 XL430-250 moto 內部的EEPROM 及RAM 內容做讀取及修改

先在 [Torque Enable] 設成off ,然後在Goal Position 這一格設定轉動的step或解度,
即可以看到馬達的轉動