Raspberry Pi Zero 2W 小道具
2022.02.22

YouTube でも紹介しています。画像をクリックすると再生できます。
今回はRaspberry Pi Zero 2 W に4ポートUSBハブを取付け、電源にはモバイルバッテリーを使ってみました。また、ATtiny開発ボードも試してみました。
まずは、Raspberry Pi Zero 2 W ですが、USB端子に頻繁に抜き差ししているとヘタりそうなので、4ポート USB 2.0 Type-A ハブを取り付けました。
■Zero4U

●電源モード: バスパワー/セルフパワー
●USB 2.0、1.0対応
●動作電圧: 5 V
●定格電流: 1 mA 以下
●最大出力電流: 2 A 全ポート合計@セルフパワーモード、500 mA 全ポート合計@バスパワーモード
Zero4U は、Raspberry Pi Zero V1.3 と Zero 2 W で動作します。V1.2以前のバージョンでは利用できません。

Zero背面のテストパッドにコンタクトプローブで接触するため、はんだ付けは不要です。

Zero4U のパッケージは販売元により若干の違いがあるようです。
実際に、Zero W で利用する場合、Wi-Fiの影響で不安定になることがあるため、フェライトコアリング付属の商品を選びましょう。
周辺機器をUSBケーブルでUSB端子に接続して、PlatformIOで、接続状況を表示させてみました。
$ pio device list
/dev/ttyUSB1
------------
Hardware ID: USB VID:PID=1A86:7523 LOCATION=1-1.2
Description: USB2.0-Serial
/dev/ttyUSB0
------------
Hardware ID: USB VID:PID=1A86:7523 LOCATION=1-1.3
Description: USB Serial
/dev/ttyAMA0
------------
Hardware ID: 3f201000.serial
Description: ttyAMA0
次に電源として、モバイルバッテリーを使用しました。
■cheero Canvas 3200mAh IoT 機器対応

ワンボードコンピューターは非常に微弱な電流で動作する状態があるため一般的なモバイルバッテリーでは保護機能が働き、電力供給を止めてしまいます。
この商品は電源オンすれば電力供給し続けることができます。
よく見かける商品はホワイトですが、cheero の直販サイトでは、ブラックも入手可能です。
次は、ATtiny13, ATtiny25, ATtiny45 ATtiny85 対応 Arduino 互換開発ボードです。
■ATtiny Arduino compatible development Board


tindieストアで販売されている、MCUdudeデザインのArduino互換開発ボードです。
ATtiny13, ATtiny25, ATtiny45 ATtiny85 に対応しています。
こちらの商品はノルウェーから発送されます。
Ref.ATtiny Arduino compatible development board
Features
●USB・シリアル変換チップ CH330N 搭載
ラズベリーパイでは普通に認識されますが、Windowsパソコンなどでは対応するドライバがないかもしれません。
●ピン配置、オス・メス両方を備えているので便利です。
| D0 | 5 | TX | MOSI | PB0 |
| D1 | 6 | RX | MISO | PB1 |
| D2 | 7 | A1 | SCK | PB2 |
| D3 | 2 | A3 | CLK | PB3 |
| D4 | 3 | A2 | | PB4 |
| RST | 1 | | | PB5 |
| VIN | 8 | | | VCC |
| 5V | | | | |
| 3.3V | | | | |
| 3.3V | | | | |
| GND | 4 | GND | | |
| GND | | | | |
| POT | | | | |
●ISP端子:ファームウェア書き込みとフューズ設定用
ArduinoをISPとして使用する場合

※Uno と Nano では、ICSPピンの向きが異なります

| Dev Board | | Arduino |
| MISO | ←→ | MISO |
| VCC | ←→ | VCC |
| SCK | ←→ | SCK |
| MOSI | ←→ | MOSI |
| RESET | ←→ | D10 |
| GND | ←→ | GND |
●2.1mm電源入力ジャック / 駆動電圧選択用ジャンパー
電源ジャックは、6.5~12Vに対応しています。ジャンパーピンは5V/3.3V駆動選択用です。
5V駆動のArduino ISPで、ATtinyにコードを書き込むときは、5Vを選択します。
●オンボード16MHz発振子の有効/無効化
ATtiny13にはクリスタルドライバーが内蔵されていないので、外部発振子を使用したくないときは、物理的に回路を遮断するために、ジャンパーピンを外します。
●オンボード可変抵抗器
アナログ入力端子用の参照用可変抵抗です
それでは、開発ボードに付属の ATtiny13A を使ってみます。
■AVRマイコン ATTINY13A-PU
・電源電圧:1.8~5.5V
・電源電圧:1.8~5.5V
・入出力ピン最大出力電流:40mA
・最大消費電流:200mA
・コアサイズ:8bit
・クロック:20MHz
・プログラムメモリ:1kB
・EEPROM:64B
・RAM:64B
・GPIO:6pin
・ADC:4Ch
・タイマ:1Ch
・オシレータ:内蔵/外付
・パッケージ:DIP8
◇フルカラーLチカ
Lチカでは芸がないので、フルカラーLEDを光らせてみます。
ただし、ATtiny13にはPWM端子が2個しかないので、R(赤)G(緑)のみを使用します。
自作のRGB DIP化基板です。
フルカラーRGB LEDの各RGB端子を330Ωの抵抗を介してDIP化しています。

左下がラズベリーパイの電源として使用するCheero Canvas、左上がRaspberry Pi Zero W 2、真ん中のブレッドボードがフルカラーRGB LED、
右側は、Arduino ISP として使用する、Arduino Uno互換びんぼうでいいの、真ん中の下がATtiny開発ボードです。
◇MicroCore + PlatformIO
$ mkdir ~/ATtiny13
$ cd ~/ATtiny13
$ pio init -b attiny13a
$ vi platformio.ini
[platformio]
default_envs = Upload_ISP ; Default build target
[env]
platform = atmelavr
framework = arduino
board = attiny13a
board_build.f_cpu = 9600000L
build_flags =
build_unflags =
monitor_port = /dev/cu.usberserial*
[env:Upload_ISP]
upload_protocol = custom
upload_port = /dev/ttyUSB0
upload_speed = 9600
upload_flags =
-C$PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf
-p$BOARD_MCU
-P$UPLOAD_PORT
-b$UPLOAD_SPEED
-cstk500v1
upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i
[env:set_fuses]
board_hardware.oscillator = internal
board_hardware.bod = 2.7v
board_hardware.eesave = yes
upload_protocol = stk500v1
upload_flags =
-P/dev/ttyUSB0
-B8
Ref.MicroCore + PlatformIO
開発環境に関して→ Arduino開発環境構築 PlatformIO
Arduino ISPに関して→ AVRマイコン ATTiny85
AVRツールをインストールしておきます
$ pio platform install atmelavr --with-package tool-avrdude
Tool Manager: toolchain-atmelavr @ 1.70300.191015 is already installed
Tool Manager: tool-avrdude @ 1.60300.200527 is already installed
サンプルプログラムを作成します。
$ vi src/rgb.ino
#define LED_PIN_R PB0
#define LED_PIN_G PB1
#define LED_PIN_B PB2
#define WAIT 3
void color(uint8_t velocity) {
uint8_t R, G, B;
velocity = velocity % 255;
if (velocity < 85) {
R = 255 - velocity * 3;
G = 0;
B = velocity * 3;
} else if (velocity < 170 ) {
velocity -= 85;
R = 0;
G = velocity * 3;
B = 255 - velocity * 3;
} else {
velocity -= 170;
R = velocity * 3;
G = 255 - velocity * 3;
B = 0;
}
analogWrite(LED_PIN_R, R);
analogWrite(LED_PIN_G, G);
// analogWrite(LED_PIN_B, B);
delay(WAIT);
}
void setup(){ }
void loop()
{
uint8_t i = 0;
while(1) {
color(i);
if ((++i) == 255) i = 0;
}
}
ビルド&アップロード
$ pio run -e Upload_ISP -t upload
PLATFORM: Atmel AVR (3.4.0) > ATtiny13A
HARDWARE: ATTINY13A 9MHz, 64B RAM, 1KB Flash
DEBUG: Current (simavr) On-board (simavr)
PACKAGES:
- framework-arduino-avr-microcore 2.1.0
- tool-avrdude 1.60300.200527 (6.3.0)
- toolchain-atmelavr 1.70300.191015 (7.3.0)
.....
RAM: [ ] 3.1% (used 2 bytes from 64 bytes)
Flash: [==== ] 36.7% (used 376 bytes from 1024 bytes)
.....
avrdude: 376 bytes of flash verified
avrdude: safemode: Fuses OK (E:FF, H:FF, L:6A)
avrdude done. Thank you.
ATtiny13 では、ビルドにmicrocoreパッケージが使用されるので、生成されるコードはコンパクトです。
Ref.MCUdude/MicroCore

LEDの色が変化していきます。
次に、シリアル通信を行ってみます。

開発ボードをUSBケーブルでラズベリーパイと接続しています。
ATtiny13は工場出荷時、クロックの8分周が有効になっているので、まずは、フューズビットを変更して無効にします。
$ ~/.platformio/packages/tool-avrdude/bin/avrdude -C ~/.platformio/packages/tool-avrdude/avrdude.conf -p attiny13 -P /dev/ttyUSB0 -b 9600 -c avrisp -U lfuse:w:0x7a:m
※動作クロック数とフューズビットの関係は下記の通りです。
| AVR |
Hz |
Ex |
Hi |
Lo |
| ATtiny13A |
1.2MHz |
- |
FF |
6A |
| ATtiny13A |
9.6MHz |
- |
FF |
7A |
| ATtiny85 |
1MHz |
FF |
DF |
62 |
| ATtiny85 |
8MHz |
FF |
DF |
e2 |
| ATtiny85 |
16MHz |
Fe |
DD |
e1 |
| ATmega328P |
1MHz |
FF |
D9 |
62 |
| ATmega328P |
8MHz |
FF |
D9 |
e2 |
| ATmega88V |
1MHz |
F9 |
DF |
62 |
| ATmega88V |
8MHz |
F9 |
DF |
e2 |
Ref.AVRマイコンをPlatformIOで使う
また、ATtiny13用のビルドパッケージ MicroCore では、下記のシリアル通信速度をサポートしています。
| Clock | Baud rate |
| (External) 20 MHz | 115200 |
| (External) 16 MHz | 115200 |
| (External) 12 MHz | 115200 |
| (External) 8 MHz | 115200 |
| (External) 1 MHz | 19200 |
| (Internal) 9.6 MHz | 115200 |
| (Internal) 4.8 MHz | 57600 |
| (Internal) 1.2 MHz | 19200 |
| (Internal) 600 kHz | 9600 |
| (Internal) 128 kHz | Not supported |
受信した文字列をそのまま送信元に返すプログラムを作ってみます。
$ vi src/uart.ino
void setup() {
Serial.begin(115200);
}
void loop() {
while (Serial.available()) {
Serial.write(Serial.read());
delay(50);
}
}
$ pio run -e Upload_ISP -t upload
RAM: [ ] 0.0% (used 0 bytes from 64 bytes)
Flash: [= ] 13.7% (used 140 bytes from 1024 bytes)
.....
avrdude: 140 bytes of flash verified
avrdude: safemode: Fuses OK (E:FF, H:FF, L:7A)
avrdude done. Thank you.
デバイスモニター側から12345を送信すると 文字化けされて戻ってきました。
$ pio device monitor -p /dev/ttyUSB1 -b 115200
L&&?M?....
一旦、2本のUSBケーブルを抜いて、開発ボード側のUSBケーブルのみを接続しました。
$ pio device monitor -p /dev/ttyUSB0 -b 115200
12345
正常に通信できました。
開発ボードにジャンパーピンを挿して、オンボード16MHz発振子を有効にして再度試してみます。
$ pio device monitor -p /dev/ttyUSB0 -b 115200
12345
同様に正常に通信できました。
次に、UART接続を試してみます。
Raspberry PiのGPIOは3.3Vですので、開発ボードの駆動電圧選択を3.3Vに設定します。
ISPケーブルを外して、Raspberry PiとUART接続します。

$ pio device monitor -p /dev/ttyAMA0 -b 115200
12345
こちらも正常に通信できました。
最後にちょっとした応用として室温を測定してみましょう。
■温度センサーIC MCP9700A-E/TO
Microchip社の温度センサーICです。スケールファクタは10mV/℃ですのでオフセットの変更(+500mV)のみでLM35と置き換えが可能です。消費電流が6μAと小さい為、電池駆動のアプリケーションに最適です。
・電源電圧:2.3~5.5V
・出力タイプ:アナログ出力
・測定温度範囲:-40~125℃
・出力電圧:500mV/0℃
・スケールファクタ:10mV/℃
・精度:~±2℃/0~70℃ ~±4℃/-40~125℃
・消費電流:~6μA
MCP9700のVDD、GND間に0.1uFのバイパスコンデンサを入れました。
ATtinyへコードを書き込むために、駆動電圧選択を5Vに戻します。

$ vi src/mcp9700.ino
void setup() {
Serial.begin(115200);
}
void loop() {
while (Serial.available()) {
int val = analogRead(A2)*3300/1024+150;
Serial.print(val/10);
Serial.print(".");
Serial.println(val%10);
delay(1000);
}
}
浮動小数点演算を行うと、いきなりコードが大きくなりすぎて、フラッシュメモリー1Kバイトに収まらなくなるので整数演算にしています。
また、茣蓙を補正して、マイナス500mVのところをプラス150mVに変更しています。
$ pio run -e Upload_ISP -t upload
RAM: [ ] 0.0% (used 0 bytes from 64 bytes)
Flash: [====== ] 56.8% (used 582 bytes from 1024 bytes)
avrdude: 582 bytes of flash verified
avrdude: safemode: Fuses OK (E:FF, H:FF, L:7A)
avrdude done. Thank you
駆動電圧選択を3.3Vに戻して、UART接続します。

$ pio device monitor -p /dev/ttyAMA0 -b 115200
15.7
15.7
17.7
12.0
16.7
■参考文献
|
Raspberry Pi(ラズベリー パイ)は、ARMプロセッサを搭載したシングルボードコンピュータ。イギリスのラズベリーパイ財団によって開発されている。
たいていのことは100日あれば、うまくいく。長田英知著
「時間がなくて、なかなか自分のやりたいことができない」
「一念発起して何かを始めても、いつも三日坊主で終わってしまう」
「色んなことを先延ばしにしたまま、時間だけが過ぎていく」
そこで本書では、そんな著者が独自に開発した、
まったく新しい目標達成メソッド「100日デザイン」について、
その知識と技術を、余すところなくご紹介します。
まんがで納得ナポレオン・ヒル 思考は現実化する
OLとして雑務をこなす日々に飽き足らず、科学者だった父が残した薬品を商品化すべく、起業を決意した内山麻由(27)。彼女はセミナーで知り合った謎の女性からサポートを得ながら、彼女と二人三脚でナポレオン・ヒルの成功哲学を実践し、さまざまな問題を乗り越えていく。
ヒル博士の<ゴールデンルール>に従い、仕事に、恋に全力疾走する彼女の、成功への物語。
今日は人生最悪で最高の日 1秒で世界を変えるたったひとつの方法 ひすいこたろう著
偉人の伝記を読むと、最悪な日は、不幸な日ではなく、新しい自分が始まる日であることがわかります。最悪な出来事は、自分の人生が、想像を超えて面白くなる兆しなのです。偉人伝を読むことで、このときの不幸があったおかげで、未来にこういう幸せがくるのかと、人生を俯瞰する視線が立ち上がるのです。
ご飯は私を裏切らない heisoku著
辛い現実から目を背けて食べるご飯は、いつも美味しく幸せを届けてくれる。
29歳、中卒、恋人いない歴イコール年齢。バイト以外の職歴もなく、短期バイトを転々とする日々。ぐるぐると思索に耽るけど、ご飯を食べると幸せになれる。奇才の新鋭・heisokuが贈るリアル労働グルメ物語!
【最新版Gemini 3に対応!】できるGemini (できるシリーズ)
Geminiを「最強の知的生産パートナー」として使いこなすための、実践的なノウハウを凝縮した一冊です。
基本的な操作方法から、具体的なビジネスシーンでの活用、日々の業務を自動化するGoogle Workspaceとの連携、さらには自分だけのオリジナルAIを作成する方法まで余すところなく解説します。
Rustプログラミング完全ガイド 他言語との比較で違いが分かる!
Rustの各手法や考え方を幅広く解説!
500以上のサンプルを掲載。実行結果も確認。
全24章の包括的なチュートリアル。
ポチらせる文章術
販売サイト・ネット広告・メルマガ・ブログ・ホームページ・SNS…
全WEB媒体で効果バツグン!
カリスマコピーライターが教える「見てもらう」「買ってもらう」「共感してもらう」すべてに効くネット文章術
小型で便利な Type-C アダプター USB C オス - USB3.1 オスアダプター
Type-C端子のマイコンボードをこのアダプタを介して直接Raspberry Piに挿すことができます。ケーブルなしで便利なツールです。
Divoom Ditoo Pro ワイヤレススピーカー
15W高音質重低音/青軸キーボード/Bluetooth5.3/ピクセルアート 専用アプリ/USB接続/microSDカード
電源供給USBケーブル スリム 【5本セット】
USB電源ケーブル 5V DC電源供給ケーブル スリム 【5本セット】 電源供給 バッテリー 修理 自作 DIY 電子工作 (100cm)
|