同じ構成で、ブレッドボードに挿す側がメスになったケーブルがお家にころがってた。
というわけで、、、
Raspberry PiでGPIOに直接LEDをつないでLチカでもよかったんだが、今回はあえて、、、
1.片方のケーブルをArduinoのTXやらRXに、もう片方をRaspberry PiのTXやらRXにつないで、それらをリバース変換して接続
2.WebからRaspberry Piにアクセスして、シリアル通信コマンドを送信
3.Arduino側で受信したコマンドに従って3色LEDを制御
ってな感じで遊んでみた。
思いたったことをやってみて、書いてるだけなので、理解しがたい文章なのはご了承くださいw
Raspberry PiでRailsが動くようにする方法はこちらを参照。
◆Arduino側
D2:3色LEDの青
D3:3色LEDの緑
D4:3色LEDの赤
を接続。
スケッチ
#include <adb.h> #define MAX_RESET 8 #define LED_R 4 #define LED_B 2 #define LED_G 3 #define DELAY_MS 100 #define LED_ON 0xF0 #define LED_OFF 0x0 #define BAUDRATE 115200 int nR; int nG; int nB; void led_off() { analogWrite(LED_R, LED_OFF); // 赤を消す analogWrite(LED_G, LED_OFF); // 緑を消す analogWrite(LED_B, LED_OFF); // 青を消す nR = 0; nG = 0; nB = 0; } void led_on(bool R, bool G, bool B) { analogWrite(LED_R, (R)? LED_ON: LED_OFF); analogWrite(LED_G, (G)? LED_ON: LED_OFF); analogWrite(LED_B, (B)? LED_ON: LED_OFF); } void led_on(int nLed, bool bON) { analogWrite(nLed, (bON)? LED_ON: LED_OFF); } void setup() { for(int nB=0; nB<2; nB++) { for(int nR=0; nR<2; nR++) { for(int nG=0; nG<2; nG++) { led_on(nR==1, nG==1, nB==1); delay(DELAY_MS); } } } led_off(); Serial.begin(BAUDRATE); } void loop() { if(Serial.available() > 0) { switch (Serial.read()) { case 'r': led_on(LED_R, true); break; case 'g': led_on(LED_G, true); break; case 'b': led_on(LED_B, true); break; case 'R': led_on(LED_R, false); break; case 'G': led_on(LED_G, false); break; case 'B': led_on(LED_B, false); break; default: break; } } }
◆Raspberry Pi側
Raspberry Pi本体とddkit0704を接続する。 ピンアサインの詳細はこちらを参照。
次に/boot/cmdline.txtを編集します。
$ sudo vim /boot/cmdline.txtファイルの内容を、まるごと
dwc_otg.lpm_enable=0 rpitestmode=1 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait
というようにしてしまう。
後は、/etc/inittabを編集してシリアルからのログインをさせないようにする。
$ sudo vim /etc/inittabT0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
を下記のようにコメントにする。
#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100
$ sudo rebootこれでシリアル通信ができる状態になりました。
Railsでプログラムを組んでいきます。
$ rails new serialTest $ bundle installでプロジェクト作成。
app/controllers/send_serial_controller.rb
class SendSerialController < ApplicationController def index str = params[:serialVal] com = open("/dev/ttyAMA0","r+") system(" stty < /dev/ttyAMA0 115200") com.write str com.close end end
app/views/serial_test/index.html.erb
<script type="text/javascript"> function sendSerial(data) { $.ajax({ type: "POST", url: "/sendSerial/index", data: "serialVal=" + data + "&msc=" + (new Date()).getTime(), success: function(msg){ } }); } </script> コマンド:<input id="command" style="width:128px;" type="text"><input onclick='sendSerial(document.getElementById("command").value);' value="送信" type="button">
config/routes.rb
match '/serialTest/index' match '/sendSerial/index' (上記を追記)
あとは、
$ cd serialTest $ rails sってやっておいて、
http://xxx.xxx.xxx.xxx:3000/serialTest/index
にアクセス。
コマンド欄に文字を入力して送信ボタンでLEDが制御できるはず。
r:赤点灯
R:赤消灯
g:緑点灯
G:緑消灯
b:青点灯
B:青消灯