8pinoでSoftwareSerialを使う その1
困っていること
8pinoさんには、USBシリアルなどの手段がデフォルトで用意されていないため、デバッグが非常に困難です。
外部のセンサ情報を観察したい場合などで、困ることになります。 (注意:普通のarduinoでやれば、シリアル使えると思います。本ページでは8pino固執していまして…)
じゃあ、どうするか
策はありそうです。以前も参照した8pino+の方が、SoftwareSerialが使えたと記載されています。 これを試してみます。
SoftwareSerialを使うための部材
上記では変換基板を使われていますが、普通の家庭にはありません。
ですので、今回はこちらを仕入れました。
ただ
Compatible with Raspberry Pi A+,B,B+/2.
と言われると、arduino/trinket/8pinoに使えるのか不安だったのですが、UARTなんか共通仕様だろっ、とエイヤで。
(→結果、使えました)
接続トポロジー
Pin1を緑色、Pin2を白色に接続しています。勿論、黒はGND。
ジャンパピン接続の拡大図。
8pinoから見て、それぞれ
緑色(Pin1) : RX、白色(Pin2) : TX
となります。
重要なポイントは、赤い線を接続していないこと。
この赤線は、USBからの電源供給用ですので、こっちのV系に入れちゃうと、電圧がぶつかるのかな?とブルったので結線せず。
上から俯瞰した図。
USBポートが2つあれば、満足いく開発が可能です。
Windowsでdriverのinstall
USBケーブルを挿すだけで、自動的にインストールが始まりました。特に他には何もせず、すぐに完了。私の環境では、COM5にアサインされました。
ターミナルの準備
みんな大好きteratermを使います。 新規接続すると、先程インストール済の「COM5 : Prolific …」が出てきますので、これでOK押します。 また、別途、ボーレートを4800に設定下さい。
SoftwareSerialを実装
対話型のサンプルアプリができました。 1発であまりにも上手く動いてしまい、teratermのローカルエコーか?と思ってしまったので、デバッグ的に'%'入力時だけ出力変えています。深い意味はありません。
コードはこちら
/* Software serial test */ #include <SoftwareSerial.h> #define _8PINO_SOFTWARE_SERIAL_PIN_RX ( 1 ) #define _8PINO_SOFTWARE_SERIAL_PIN_TX ( 2 ) SoftwareSerial mySerial( _8PINO_SOFTWARE_SERIAL_PIN_RX, _8PINO_SOFTWARE_SERIAL_PIN_TX ); void setup() { // set the data rate for the SoftwareSerial port mySerial.begin(4800); mySerial.println(""); mySerial.println("--- Hello! from 8pino... ---"); mySerial.write( "\r\n > " ); } void loop() // run over and over { int tmp_char = 0; if ( mySerial.available() ){ tmp_char = mySerial.read(); if( tmp_char == '\r' ){ mySerial.write( "\r\n > " ); }else if( tmp_char == '%' ){ mySerial.write( tmp_char ); mySerial.write( "\r\n" ); mySerial.write( " % : Percentage sign \r\n" ); mySerial.write( " Percentage : In mathematics, a percentage is a number or ratio expressed as a fraction of 100. \r\n" ); mySerial.write( " It is often denoted using the percent sign. \"%\" \r\n" ); mySerial.write( " Sometimes the abbreviation \"pc\" is used in the case of quantities in economics. \r\n"); mySerial.write( " From Wikipedia... \r\n" ); mySerial.write( "\r\n > " ); }else{ mySerial.write( tmp_char ); } } }
これで
UART経由で、外部から指示が出せるようになりました。
ただ、あまりUART経由で指示を出すと、電子工作の勉強からは外れてしまうので、それほど深堀しない予定です。