How to make

Raspberry Pi シリアルポート経由でArduinoと連携

Arduinoブートローダを書き込んだ単体のATmega328p(ワンチップArdino)をRaspberry Piのシリアルポートに直結して連携させます。
Raspberry PiでArduino IDEを動かせばシリアルポート経由でスケッチを書き込む事も可能になるようにセットアップします。

注意
  • Raspberry Piには色々な種類があり色々なOSを走らせることができます。このレポートが対象としているのは,次のハードウェアでRaspbian jessie(2017-03-02版)が動いている環境を対象としています。 RasPi3とそれ以外のRasPiはシリアルポートの構成が異なっているため解説を2つに分けました。

Raspberry Pi 3B

1. 概要
  1. RasPi 3Bのシリアルポートは初期状態では隠蔽されており利用できませんので、シリアルポートを利用できるようにします。
  2. デフォルト状態でシリアルポート/dev/ttyS0はシリアルコンソール用に設定され,起動終了時のメッセージ出力やシェル・コマンドを受け付けるようになっています。Arduinoと通信する場合はシリアルコンソールの機能を止めておかなければなりません。
  3. Arduino IDE からスケッチを書き込むときシリアルポート/dev/ttyS0のRTS信号使ってArduinoにリセットをかけます。RasPi 3Bのシリアルポートの初期設定ではRTS信号線は利用できないので,これが使えるようにします。
2. シリアルポートの設定
  • raspi-configを起動します( $ sudo raspi-config )
    1. 5 Interfacing Options –>[Select]
    2. P6 Serial –> [Select]
    3. “Would you like a login shell to be accessible over serial?” –> [No]
    4. “Would you like the serial port hardware to be enabled” –> [Yes]
    5. The serial Login shell is disabled
      The serial interface is enabled  —> [OK] —> [Finish]
    6. “Would you like to reboot now?” –> [No]

3. GPIO 11番ピンをRTS信号に割り付ける
  1. wiringpi パッケージをインストールします( $ sudo apt-get install wiringpi )
    (デフォルトでインストールされているかも知れません)
  2. /etc/rc.local ファイルを編集します。( $ sudo nano /etc/rc.local )
    1. exit 0 の行の前に,次の行を挿入して保存・終了します。
      /usr/bin/gpio mode 0 alt5
以上の作業が終了したらリブートします。
4. 確認
  1. /dev/ttyS0 が存在するか確認( $ ls -l /dev/ttyS* )
  2. GPIO Physical pin 11 がALT5となっているか確認( $ gpio readall )
5. dialoutグループへのユーザの追加
  1. /dev/ttyS0は一般ユーザから利用できませんので、/dev/ttyS0を使いたいユーザ名をdialoutグループに追加します。
    例:ユーザ名 pi をdialoutグループに追加

    $ sudo usermod -a -G dialout pi
6. ATmega328PへのArduinoブートローダの書き込み

Raspberry Pi 2B, B+, B, Zero

1. 概要
  1. RasPi 2B, B+, B, Zeroのシリアルポート/dev/ttyAMA0はシリアルコンソール用として使われており,起動終了時のメッセージ出力やシェル・コマンドを受け付けるようになっています。Arduinoと通信する場合はシリアルコンソールの機能を止めておかなければなりません。
  2. Arduino IDE からスケッチを書き込むときシリアルポート/dev/ttyAMA0のRTS信号使ってArduinoにリセットをかけます。RasPi 2B, B+, Bのシリアルポートの初期設定ではRTS信号線は利用できないので,これが使えるようにします。
2. シリアルポートの設定
  • raspi-configを起動します( $ sudo raspi-config )
    1. 5 Interfacing Options –>[Select]
    2. P6 Serial –> [Select]
    3. “Would you like a login shell to be accessible over serial?” –> [No]
    4. “Would you like the serial port hardware to be enabled” –> [Yes]
    5. The serial Login shell is disabled
      The serial interface is enabled  —> [OK] —> [Finish]
    6. “Would you like to reboot now?” –> [No]

3. GPIO 11番ピンをRTS信号に割り付ける
  1. wiringpi パッケージをインストールします( $ sudo apt-get install wiringpi )
    (デフォルトでインストールされているかも知れません)
  2. /etc/rc.local ファイルを編集します。( $ sudo nano /etc/rc.local )
    1. exit 0 の行の前に,次の行を挿入して保存・終了します。
      /usr/bin/gpio mode 0 alt3
以上の作業が終了したらリブートします。
4. 確認
  1. /dev/ttyAMA0が存在するか確認( $ ls -l /dev/ttyA* )
  2. GPIO Physical pin 11 がALT3となっているか確認( $ gpio readall )
5. dialoutグループへのユーザの追加
  • /dev/ttyAMA0は一般ユーザから利用できませんので、/dev/ttyAMA0を使いたいユーザ名をdialoutグループに追加します。
    例:ユーザ名 pi をdialoutグループに追加

    $ sudo usermod -a -G dialout pi

ATmega328PへのArduinoブートローダ書き込み

  1. Arduino Pro or Pro mini Atmege328(3.3V 8Mhz) 用のブートローダ
    ATmegaBOOT_168_atmega328_pro_8MHz.hex
    を low_fuses=0xE2, high_fuses=0xDA, xtended_fuses=0x05 で書き込みます。
  2. Arduino IDEでのボード選択はArduino Pro or Pro mini Atmege328(3.3V 8Mhz),ポートはRasPi 3Bでは/dev/ttyS0 その他のRasPiは/dev/ttyS8を選択します。
Copyright © kosakalab All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.