Arduino 令學習及使用電子零件變得簡單
但如果製作細小的專案,體積較大的 Arduino 開發板並不適合
之前在下提及的 ATtiny85 雖然細小,但需要 ISP 及連接其他額外電子零件才能寫入程式,長遠而並方便
如果有又細小又方便寫入程式,便可以方便製作及開發小型電子產品
但如果製作細小的專案,體積較大的 Arduino 開發板並不適合
之前在下提及的 ATtiny85 雖然細小,但需要 ISP 及連接其他額外電子零件才能寫入程式,長遠而並方便
如果有又細小又方便寫入程式,便可以方便製作及開發小型電子產品
DigiSpark 原裝開發板
DigiSpark 原裝開發板 正面
使用標準的 USB 2.0 Type-A 插頭,能直接連接到大部分電腦的 USB 插口
使用 7805 確保電壓輸入為 5V
使用 SOP 封裝的 ATtiny85
引腳
電源相關的引腳
由最近 USB 插頭向右分別為:
由最近 USB 插頭向右分別為:
- 5V
- GND
- VIN
DigiSpark Port | ATtiny85 Port | PWM | Analog | SPI | I2C | 其他 |
---|---|---|---|---|---|---|
0 | 5 | PWM0 | Aref | MOSI | SDA | |
1 | 6 | PWM1 | MISO | LED | ||
2 | 7 | A1 | SCK | SCL | ||
3 | 2 | A3 | USB+ | |||
4 | 3 | PWM4 | A2 | USB- | ||
5 | 1 | A0 | RST |
DigiSpark 原裝開發板 背面
背面有詳細說明每支引腳的功能
接駁電源時 綠色LED 會亮著
製作簡單 電路板LED閃動 測試
DigiSpark 兼容開發板
DigiSpark 兼容開發板 正面
使用 Micro USB Type-B 插孔
同樣使用 7805 確保電壓輸入為 5V
同樣使用 SOP 封裝的 ATtiny85
引腳
電源相關的引腳
由最近 USB 插孔向右分別為:
由最近 USB 插孔向右分別為:
- 5V
- GND
- VIN
控制相關的引腳
由最近電源相關引腳向右分別為:
由最近電源相關引腳向右分別為:
- P0
- P1
- P2
- P3
- P4
- P5
控制相關的引腳
由最近電源相關引腳向右分別為:
由最近電源相關引腳向右分別為:
DigiSpark 兼容開發板 背面
背面有詳細說明每支引腳的功能
背面有詳細說明每支引腳的功能
接駁電源時 紅色LED 會亮著
電路板LED閃動 效果
DigiSpark(DIP) 兼容開發板
DigiSpark(DIP) 兼容開發板 正面
同樣使用 Micro USB Type-B 插孔
同樣使用 7805 確保電壓輸入為 5V
引腳
電源相關的引腳
由最近 USB 插孔向右分別為:
由最近 USB 插孔向右分別為:
- 5V
- GND
- VIN
控制相關的引腳
由最近電源相關引腳向右分別為:
由最近電源相關引腳向右分別為:
第1欄 | 第2欄 | 第3欄 | 第4欄 | |
---|---|---|---|---|
第1列 | P4 | P5 | P2 | P1 |
第2列 | P3 | GND | P0 | 5V |
DigiSpark(DIP) 兼容開發板 背面
背面有詳細說明每支引腳的功能
背面有詳細說明每支引腳的功能
引腳座缺口要匹配 ATtiny85 的第1引腳
DigiSpark(DIP) 兼容開發板 的 特點是可以將 ATtiny85 DIP 安裝及卸除
測試時將 ATtiny85 安裝到開發板,測試完成後將 ATtiny85 卸除,並安裝到原型或正式產品使用
測試時將 ATtiny85 安裝到開發板,測試完成後將 ATtiny85 卸除,並安裝到原型或正式產品使用
接駁電源時 紅色LED 會亮著
電路板LED閃動 效果
各種 DigiSpark 比較
3款 DigiSpark 開發板都各有好處及壞處
DigiSpark 原裝開發板
- 可以直接像 USB 裝置般連接到電腦
- 沒有 USB Type-A 延長線使用上則比較麻煩
- 經常插拔較容易損壞電腦的 USB 插孔
DigiSpark 兼容開發板
- 3款開發板中最細小
DigiSpark(DIP) 兼容開發板
- 雖然是3款開發板中最大,但卸除 ATtiny85 後使用卻是最小
- 不附帶 ATtiny85 的 DigiSpark 開發板最便宜
- 控制引腳沒有為安裝到麵包板設計
- 需要燒錄起動器才能直接經 USB 上載 Sketch
安裝及設定 DigiSpark 上載器
開啟 Arduino IDE 並在 File > Preferences > Additional Boards Manager URLs 加入
https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json
到 Tools > Board > Boards Manager 尋找 Digistump AVR Boards 並安裝
到 Tools > Board > Digistump AVR Boards 選擇 Digispark (Default -16.5mhz)
閣下應該會發現 Arduino IDE 沒有偵測到 DigiSpark 開發板的連接埠
DigiSpark 使用 Micronucleus 直接使用 USB訊號 將 Sketch 上載到 ATtiny85 ,而不是將 USB訊號 轉換成 UART訊號 上載
因此 Arduino IDE 不會顯示 DigiSpark 開發板連接埠
當將 Sketch 上載到 ATtiny85 出現 無法找到 libusb-0.1.so.4 錯誤
DigiSpark 使用 Micronucleus 直接使用 USB訊號 將 Sketch 上載到 ATtiny85 ,而不是將 USB訊號 轉換成 UART訊號 上載
因此 Arduino IDE 不會顯示 DigiSpark 開發板連接埠
當將 Sketch 上載到 ATtiny85 出現 無法找到 libusb-0.1.so.4 錯誤
再次上載 Sketch 到 ATtiny85 出現 micronucleus_connect: Assertion `res >= 4' failed 錯誤
在 Terminal 輸入
lsusb | grep -i digi找到 DigiSpark 開發板的 ID
建立 /etc/udev/rules.d/49-micronucleus.rules 檔案
在檔案中加入
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666" KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"並儲存
完成後輸入
sudo udevadm control --reload-rules更新 USB 裝置的規則,並重新開機
終於可以將 Sketch 上載到 ATtiny85
燒錄起動器到 ATtiny85
以前在下曾使用 Arduino 作為 ISP裝置 將 Sketch 上載到 ATtiny85 ,這種方法還需要接駁繁瑣的線路
因此使用與 DigiSpark 相同的方法,將起動器燒錄到 ATtiny85 ,便可以直接將 Sketch 上載到 ATtiny85
但燒錄起動器到 ATtiny85 前,需要先將 Arduino 修改成 ISP裝置
然後將 Arduino ISP 及 ATtiny85 連接,連接方法與在下的 經 Arduino 上載 Sketch 到 ATtiny85 相同
因此在下不重覆內容,請自行前往該文章了解連接的線路的佈局
因此使用與 DigiSpark 相同的方法,將起動器燒錄到 ATtiny85 ,便可以直接將 Sketch 上載到 ATtiny85
但燒錄起動器到 ATtiny85 前,需要先將 Arduino 修改成 ISP裝置
然後將 Arduino ISP 及 ATtiny85 連接,連接方法與在下的 經 Arduino 上載 Sketch 到 ATtiny85 相同
因此在下不重覆內容,請自行前往該文章了解連接的線路的佈局
如果已經將 ATtiny85 安裝 DigiSpark 上,亦可以直接連接線路
DigiSpark 上的引腳排列,其實是 ICSP6 的排列,方便連接到 ISP裝置
注意: DigiSpark 的 RST 要連接到 Arduino 的 D10引腳 (SS引腳)
DigiSpark 上的引腳排列,其實是 ICSP6 的排列,方便連接到 ISP裝置
注意: DigiSpark 的 RST 要連接到 Arduino 的 D10引腳 (SS引腳)
到 https://github.com/Jasdoge/Attiny85-Bootloader-Tutorial
下載 burn_attiny85_bootloader.bat 及 t85_default.hex
下載 burn_attiny85_bootloader.bat 及 t85_default.hex
由於 burn_attiny85_bootloader.bat 是 Windows 的 批次檔案,無法在 Linux 上執行
因此修改成 Shell Script 及部分設定值,讓腳本可以在 Linux 上執行
因此修改成 Shell Script 及部分設定值,讓腳本可以在 Linux 上執行
當然閣下亦可以將在下已經修改的 Shell Script 複製再修改亦可
需要注意的是
#!/bin/bash arduino_user_dir="/arduino_user_dir" avrdude_dir="${arduino_user_dir}/hardware/tools/avr" "${avrdude_dir}/bin/avrdude" \ -C"${avrdude_dir}/etc/avrdude.conf" \ -v \ -p"attiny85" \ -c"stk500v1" \ -P"/dev/ttyACM0" \ -b"19200" \ -U"flash:w:t85_default.hex":i \ -U lfuse:w:0xe1:m \ -U hfuse:w:0xdd:m \ -U efuse:w:0xfe:m或 按此下載 burn_attiny85_bootloader.sh
需要注意的是
- arduino_user_dir 需要修改成閣下正在使用的 Arduino IDE 的使用者設定目錄
- 在下使用的 Arduino UNO 的位置為 /dev/ttyACM0 ,閣下需要將些位置改修成閣下的 ISP 裝置的位置
修改完成後執行 burn_attiny85_bootloader.bat 等待起動器燒錄到 ATtiny85
更新上載器
雖然已經將起動器燒錄到 ATtiny85
但上載 Sketch 時,顯示 Micronucleus 上載器版本不支援新版本的 DigiSpark
但上載 Sketch 時,顯示 Micronucleus 上載器版本不支援新版本的 DigiSpark
到 https://github.com/micronucleus/micronucleus 下載最新版本的 Micronucleus
將 最新版本的 Micronucleus 存放到 ${arduino_user_dir}/packages/digistump/tools/micronucleus/<Version>
在下將不同版本的 Micronucleus 都保存,方便選擇不同版本,並建立捷徑來調用合適的版本
在下將不同版本的 Micronucleus 都保存,方便選擇不同版本,並建立捷徑來調用合適的版本
使用最新版本的 Micronucleus 後,可以只經過 USB 便可以將 Sketch 上載到 ATtiny85
補充資料
ATtiny85 除了細小,將 Micronucleus 燒錄到起動器,還能夠像 ATmega32u8 一般模擬 USB HID 裝置的訊號
但 ATtiny85 並不支援 Arduino 原生的 Keyboard.h 及 Mouse.h 等函式庫
需要使用由 DigiSpark 提供的 DigiKeyboard.h 及 DigiMouse.h 等函式庫
但 ATtiny85 並不支援 Arduino 原生的 Keyboard.h 及 Mouse.h 等函式庫
需要使用由 DigiSpark 提供的 DigiKeyboard.h 及 DigiMouse.h 等函式庫
////////// ino file ////////// #include <DigiKeyboard.h> #include "Config.h" void setup() { pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); for (byte i = 0; i < 1000 / INIT_DELAY; i++) { digitalWrite(LED_PIN, !digitalRead(LED_PIN)); delay(INIT_DELAY); } digitalWrite(LED_PIN, HIGH); DigiKeyboard.delay(2000); DigiKeyboard.sendKeyStroke(KEY_A, MOD_GUI_LEFT); delay(10); DigiKeyboard.sendKeyStroke(KEY_A, MOD_CONTROL_LEFT); delay(10); DigiKeyboard.print(MY_PASSWORD); DigiKeyboard.print("\n"); digitalWrite(LED_PIN, LOW); } void loop() { }
////////// Config.h ////////// #define LED_PIN 1 #define INIT_DELAY 50 #define MY_PASSWORD "Your Login Password"
在下製作一個模仿登入認證的 Sketch 可以在登入畫面連接 DigiSpark USB 後,自動填寫密碼及登入
(警告:
純粹娛樂及測試效果,實際上是非常危險
若果 DigiSpark 遺失,便會洩漏密碼)
(警告:
純粹娛樂及測試效果,實際上是非常危險
若果 DigiSpark 遺失,便會洩漏密碼)
支援模擬成 USB 訊號的 ATtiny85
由於 Arduino IDE 沒有收錄所有 DigiSpark 函式庫,要使用其他 DigiSpark 函式庫
需要自行到 https://github.com/digistump/DigisparkArduinoIntegration/tree/master/libraries 下載並安裝
需要自行到 https://github.com/digistump/DigisparkArduinoIntegration/tree/master/libraries 下載並安裝
總結
使用ArduinoDroid
由於能夠透過 OTG USB 將 Android裝置 以宿主連接 USB裝置
因此 Android 可以經 OTG USB 將 Sketch 上載到 DigiSpark
DigiSpark 體績細小,配合 Android裝置 的便攜性,可以隨時編寫及製作電子控制裝置
因此 Android 可以經 OTG USB 將 Sketch 上載到 DigiSpark
DigiSpark 體績細小,配合 Android裝置 的便攜性,可以隨時編寫及製作電子控制裝置
到 https://play.google.com/store/apps/details?id=name.antonsmirnov.android.arduinodroid2 安裝 ArduinoDroid
可以編寫 Sketch
按右上角的 更多選項 > Settings > Board type > Digistump > Digispark (Default - 16.5mhz)
然後 儲存 及 編譯 Sketch
將 DigiSpark 透過 OTG USB 連接到 Android裝置
會顯示 USB device attached
會顯示 USB device attached
按 上載 按鈕
顯示 要允許「ArduinoDroid」存取「null」嗎? 後,按 確定
顯示 要允許「ArduinoDroid」存取「null」嗎? 後,按 確定
將 Sketch 上載到 DigiSpark
顯示 Sketch uploaded
顯示 Sketch uploaded
Android 連接 DigiSpark 後,大概只有 5秒 是編程模式
超過 5秒 便會自動回復 操作模式 ,無法上載 Sketch
因此必須在 5秒 內,按 上載 按鈕 及 按 確定 來上載 Sketch
超過 5秒 便會自動回復 操作模式 ,無法上載 Sketch
因此必須在 5秒 內,按 上載 按鈕 及 按 確定 來上載 Sketch
意外操作
DigiSpark 使用 P3 及 P4 作為 USB引腳
在下將 LED正極 接駁到 P3 ,LED負極 接駁到 GND ,令上載 Sketch 時的 USB訊號出錯
意外地將 ATtiny85 SOP DigiSpark 資料清除,令 ATtiny85 SOP 遺失起動器,導致無法直接上載 Sketch
但 ATtiny85 SOP 是焊接在 DigiSpark 上,若果要除焊是非常困難
即使能夠除焊,在沒有 SOP連接器 的情況下,將資料寫入到 SOP晶片 都是非常困難
還要重新焊接 ATtiny85 SOP 到 DigiSpark 都是非常困難的操作
在下將 LED正極 接駁到 P3 ,LED負極 接駁到 GND ,令上載 Sketch 時的 USB訊號出錯
意外地將 ATtiny85 SOP DigiSpark 資料清除,令 ATtiny85 SOP 遺失起動器,導致無法直接上載 Sketch
但 ATtiny85 SOP 是焊接在 DigiSpark 上,若果要除焊是非常困難
即使能夠除焊,在沒有 SOP連接器 的情況下,將資料寫入到 SOP晶片 都是非常困難
還要重新焊接 ATtiny85 SOP 到 DigiSpark 都是非常困難的操作
因此在下嘗試直接使用跳線,透過 DigiSpark 的引腳接駁到 Arduino ISP 重新燒錄起動器到 ATtiny85
ATtiny85 SOP DigiSpark | Arduino ISP | 電子零件 |
---|---|---|
VIN | 5V | |
GND | GND | 10uF電解電容負極 |
P0 | 11 | |
P1 | 12 | |
P2 | 13 | |
P5 | 10 | |
RST | 10uF電解電容正極 |
結果能夠將起動器燒錄到 ATtiny85 SOP ,能再次將 Sketch 直接上載到 ATtiny85
這情況亦令在下留意經 DigiSpark 的 USB 上載 Sketch 到 ATtiny85 前
不要接駁任何電子零件到所有 GPIO引腳,避免發生意外
這情況亦令在下留意經 DigiSpark 的 USB 上載 Sketch 到 ATtiny85 前
不要接駁任何電子零件到所有 GPIO引腳,避免發生意外
DigiSpark 開發板雖然細小,但官方售價為 8美元,比功能更多的 Raspberry Pi Pico W 還要昂貴
不過,某些網上平台發售的 DigiSpark 兼容開發板,則大約 1美元 即可
而且細小的體積,使用標準 USB Type-A 的插頭,使用上確實是非常方便
即使不焊接引腳,亦可以直接將金屬線路纏在引腳孔上使用,即時製作臨時裝置
不過,某些網上平台發售的 DigiSpark 兼容開發板,則大約 1美元 即可
而且細小的體積,使用標準 USB Type-A 的插頭,使用上確實是非常方便
即使不焊接引腳,亦可以直接將金屬線路纏在引腳孔上使用,即時製作臨時裝置
由於 DigiSpark 開發板並沒有連接到 ATtiny85 的 RST引腳
因此,已經連接到電腦的 DigiSpark 開發板不能控制 ATtiny85 重置而無法上載
所以需要先手動將 DigiSpark 開發板卸除,執行上載 Sketch 的等候狀態時
才將 DigiSpark 開發板連接到電腦,才能將 Sketch 上載到 ATtiny85
否則會繼續出現 micronucleus_connect: Assertion `res >= 4' failed 錯誤 或 上載逾時 錯誤
因此,已經連接到電腦的 DigiSpark 開發板不能控制 ATtiny85 重置而無法上載
所以需要先手動將 DigiSpark 開發板卸除,執行上載 Sketch 的等候狀態時
才將 DigiSpark 開發板連接到電腦,才能將 Sketch 上載到 ATtiny85
否則會繼續出現 micronucleus_connect: Assertion `res >= 4' failed 錯誤 或 上載逾時 錯誤
由於 DigiSpark(DIP) 的引腳座外露的引腳,導致安裝 ATtiny85 時非常刺手
擺放在物件上,亦有有機會損壞其表面,因此在下將外露的引腳剪去,再重新焊錫
焊錫因為液體表面張力現象,會形成圓球狀,便不會有尖刺的引腳外露,而且亦比較美觀
擺放在物件上,亦有有機會損壞其表面,因此在下將外露的引腳剪去,再重新焊錫
焊錫因為液體表面張力現象,會形成圓球狀,便不會有尖刺的引腳外露,而且亦比較美觀
起動速度比較
- DigiSpark 兼容開發板 大約 5.916秒
- DigiSpark(DIP) 兼容開發板 大約 6.316秒
- DigiSpark 原裝開發板 大約 6.683秒
沒有留言 :
張貼留言