チラシのうら

レゴとか、工作とか。

8pinoでSoftwareSerialを使う その1

困っていること

8pinoさんには、USBシリアルなどの手段がデフォルトで用意されていないため、デバッグが非常に困難です。

外部のセンサ情報を観察したい場合などで、困ることになります。 (注意:普通のarduinoでやれば、シリアル使えると思います。本ページでは8pino固執していまして…)

じゃあ、どうするか

策はありそうです。以前も参照した8pino+の方が、SoftwareSerialが使えたと記載されています。 これを試してみます。

SoftwareSerialを使うための部材

上記では変換基板を使われていますが、普通の家庭にはありません。
ですので、今回はこちらを仕入れました。

ただ

Compatible with Raspberry Pi A+,B,B+/2.

と言われると、arduino/trinket/8pinoに使えるのか不安だったのですが、UARTなんか共通仕様だろっ、とエイヤで。
(→結果、使えました)

接続トポロジー

Pin1を緑色、Pin2を白色に接続しています。勿論、黒はGNDf:id:tetunori_lego:20150527071241j:plain

ジャンパピン接続の拡大図。 8pinoから見て、それぞれ 緑色(Pin1) : RX、白色(Pin2) : TX
となります。 重要なポイントは、赤い線を接続していないこと。
この赤線は、USBからの電源供給用ですので、こっちのV系に入れちゃうと、電圧がぶつかるのかな?とブルったので結線せず。 f:id:tetunori_lego:20150527071256j:plain

上から俯瞰した図。
USBポートが2つあれば、満足いく開発が可能です。 f:id:tetunori_lego:20150527071309j:plain

Windowsでdriverのinstall

USBケーブルを挿すだけで、自動的にインストールが始まりました。特に他には何もせず、すぐに完了。私の環境では、COM5にアサインされました。 f:id:tetunori_lego:20150527073009j:plain

ターミナルの準備

みんな大好きteratermを使います。 f:id:tetunori_lego:20150527073213j:plain 新規接続すると、先程インストール済の「COM5 : Prolific …」が出てきますので、これでOK押します。 また、別途、ボーレートを4800に設定下さい。

SoftwareSerialを実装

API仕様や、 サンプルコードを一通り見た後、実装します。

対話型のサンプルアプリができました。 f:id:tetunori_lego:20150527074151j:plain 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経由で指示を出すと、電子工作の勉強からは外れてしまうので、それほど深堀しない予定です。