sea side she side

写真と山、資格が好きなアラフォーエンジニアのブログ

Arduino + fon + OpenWRT + ser2net + NewSoftSerial

      2011/11/12

前回fonにOpenWRTを導入するところまで実施しました。

その改造fonとArduinoとをシリアル接続で通信させます。その後Wifi経由で接続し、センサーの値を取得するところまで実施します。

Arduino + FON2200 + ser2net Wi-Fi接続

■ fonとArduinoを接続
まずfonへser2netパッケージを導入します。

<br />
# opkg update<br />
# opkg instal ser2net<br />

今回はtelnetを使ってデータを取得しますのでそれにあわせた設定を行います。

<br />
# vi /etc/ser2net.conf<br />
# 3001:telnet:0:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS LOCAL -RTSCTS<br />

これで3001番ポートにtelnet接続するとttyS0に渡されることになります。

次にArduino側を準備します。当初Arduino(というよりはAVR)内蔵のハードシリアルを利用する予定だったのですが、スケッチをアップロードする度に接続を解除しなければなりません。
# XBee Sheildと同様です。

そのためソフトウェアシリアルを再現させたライブラリがありますのでそれを利用します。とはいっても標準ライブラリのSoftwareSerialは利用しません。高機能で速度もでるようになったNewSoftSerialを利用します。

fon-ser2net-arduino回路図

スケッチを描いていきます。といってもとりあえずのものですが…。

<br />
#include &lt;NewSoftSerial.h&gt;<br />
NewSoftSerial mySerial(2, 3);</p>
<p>int a = 0;</p>
<p>void setup() {<br />
  mySerial.begin(9600);<br />
}</p>
<p>void loop() {<br />
  if(mySerial.available()) {<br />
    char val = mySerial.read();<br />
    if(val == 'A') {<br />
      a = !a;<br />
      digitalWrite(13, a);<br />
    }<br />
    if(val == 'C') {<br />
      float temp = 0;<br />
      for(int i = 0; i &lt; 10; i++) {<br />
        temp += analogRead(0);<br />
      }<br />
      temp /= 10;<br />
      temp = fmap(temp, 61.44, 327.68, -30.0, 100.0);<br />
      mySerial.println(temp);<br />
      mySerial.println(&quot;END&quot;);<br />
    }<br />
  }<br />
}</p>
<p>float fmap(float x, float in_min, float in_max, float out_min, float out_max) {<br />
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;<br />
}<br />

Arduinoにアップロードできたら回路を接続していきます。今回は温度センサーと動作確認用にLEDを一つ追加しました。

接続できたらさっそく試してみます。手元のWindowsからtelnetを使い、wifi経由でArduinoへシリアル接続します。

# telnet 172.16.0.254 3001

何も表示されないと思います。そこでおもむろに『A』を押してみます。LEDが点灯したでしょうか。もう一度押すと消灯します。次に『C』を押してみます。温度が表示されるかと思います。telnetを抜けるの時はCtr+]です。

とりあえずここまで。

 

 - Make , , , , , , , , , ,