Arduinoブートローダを書き込んだ単体のATmega328p(ワンチップArdino)をRaspberry Piのシリアルポートに直結して連携させます。
Raspberry PiでArduino IDEを動かせばシリアルポート経由でスケッチを書き込む事も可能になるようにセットアップします。
![]() |
![]() |
注意
- Raspberry Piには色々な種類があり色々なOSを走らせることができます。このレポートが対象としているのは,次のハードウェアでRaspbian jessie(2017-03-02版)以降が動いている環境を対象としています。
- Raspbery Pi B,B+,2B,ZERO,3B,ZERO-W
1. 概要
- RasPi 3B, ZERO-W のシリアルポートは初期状態では隠蔽されており利用できませんので、シリアルポートを利用できるようにします
- RasPi 2B, B+, B, Zeroのシリアルポート/dev/ttyAMA0はシリアルコンソール用として使われており,起動終了時のメッセージ出力やシェル・コマンドを受け付けるようになっています。Arduinoと通信する場合はシリアルコンソールの機能を止めておかなければなりません。
- Arduino IDE からスケッチを書き込むときシリアルポートのRTS信号使ってArduinoにリセットをかけます。シリアルポートの初期設定ではRTS信号線は利用できないので,これが使えるようにします。
2. シリアルポートの設定
- raspi-configを起動します( $ sudo raspi-config )
- 5 Interfacing Options –>[Select]
- P6 Serial –> [Select]
- “Would you like a login shell to be accessible over serial?” –> [No]
- “Would you like the serial port hardware to be enabled” –> [Yes]
- The serial Login shell is disabled
The serial interface is enabled —> [OK] —> [Finish] -
“Would you like to reboot now?” –> [No]
3. GPIO17(物理ピン11番)をRTS信号に割り付ける
- wiringpi パッケージをインストールします( $ sudo apt-get install wiringpi )
(デフォルトでインストールされているかも知れません) - /etc/rc.local ファイルを編集します。( $ sudo nano /etc/rc.local )
- exit 0 の行の前に,次の行を挿入して保存・終了します。
/usr/bin/gpio mode 0 alt5
- exit 0 の行の前に,次の行を挿入して保存・終了します。
以上の作業が終了したらリブートします。
4. 確認
- RasPi3, ZERO-W: /dev/ttyS0 が存在するか確認( $ ls -l /dev/ttyS* )
- RasPi 2B,B+,B,ZERO: /dev/ttyAMA0 が存在するか確認( $ ls -l /dev/ttyAMA* )
- GPIO Physical pin 8, 10, 11 がALT5となっているか確認( $ gpio readall )
5. dialoutグループへのユーザの追加
- /dev/ttyS0, /dev/ttyAMA0 は一般ユーザから利用できませんので、これらを使いたいユーザ名をdialoutグループに追加します。
例:ユーザ名 pi をdialoutグループに追加
$ sudo usermod -a -G dialout pi
ATmega328PへのArduinoブートローダ書き込み
- Arduino Pro or Pro mini Atmege328(3.3V 8Mhz) 用のブートローダ
ATmegaBOOT_168_atmega328_pro_8MHz.hex
を low_fuses=0xE2, high_fuses=0xDA, xtended_fuses=0x05 で書き込みます。 - Arduino IDEでのボード選択はArduino Pro or Pro mini Atmege328(3.3V 8Mhz),
- ポートはRasPi 3B, ZERO Wでは/dev/ttyS0 その他のRasPiは/dev/AMA0を選択します。