Komunikacja z Arduino po sieci

Arduino to platforma oparta o mikrokontroler RISC firmy ATMEL. W tym krótkim artykule przedstawione zostanie w jaki sposób można się komunikować z Arduino po sieci kablowej lub WiFi.

Instalujemy pakiety

opkg update
opkg install ser2net kmod-usb-serial-ftdi

Programujemy Arduino(opcja)

Ten krok jest po części opcjonalny. Po prostu potrzebujemy zaprogramowanego Arduino programem, który korzysta z konsoli szeregowej. Może to być proste „Hello Word” lub coś bardziej skompilowanego. Przeze mnie zostanie wykorzystany Bitlash.

Bitlash jest linią poleceń dla Arduino. Można przez to wykonywać proste makra. Zachęcam do zapoznawania się z dokumentacją projektu. Potrzebujemy pobrać w/w program i zainstalować. Instalacja jest prosta, rozpakowane archiwum wrzucamy do katalogu libraries IDE Arduino. Kontroler programujemy bitlashdemo. Podłączamy kablem USB do routera.

Testujemy połączenie

Od strony OpenWrt sprawdzamy czy wykryte zostało połączenie z Arduino:

ftdi_sio 1-1.2:1.0: FTDI USB Serial Device converter detected
usb 1-1.2: Detected FT232RL
usb 1-1.2: Number of endpoints 2
usb 1-1.2: Endpoint 1 MaxPacketSize 16384
usb 1-1.2: Endpoint 2 MaxPacketSize 16384
usb 1-1.2: Setting MaxPacketSize 64
usb 1-1.2: FTDI USB Serial Device converter now attached to ttyUSB1

Jest w porządku. Uruchamiamy ser2net:

ser2net -C "3001:raw:600:/dev/ttyUSB1:57600 NONE 1STOPBIT 8DATABITS -XONXOFF -LOCAL -RTSCTS"

Wytłumaczenie:

  • 3001 - port pod który się będziemy podłączać po telnecie
  • 300 - timeout(w sek) po przekroczeniu którego, następuje przerwanie sesji telnetu, (0 - nieskończoność)
  • /dev/ttyUSB1 - interfejs USB pod którym widziany jest Arduino w OpenWrt
  • 57600 - prędkość komunikacji po konsoli szeregowej (zależy od ustawionej w programie w Arduino)

Po uruchomieniu komendy, logujemy się z maszyny podłączonej do routera:

telnet 192.168.1.1 3001

W przypadku Bitlash zostaniemy przywitani

Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
bitlash here! v1.1 (c) 2010 Bill Roy -type HELP- 1342 bytes free
> 

Można wykonać proste komendy:

> print 1+1
2

lub zapalić diodę pod pinem 13 (duemilanove)

> d13=1
d13=1

Dostęp z zewnątrz (nie zalecane)

Można oczywiście otworzyć port 3001(lub inny), jednak jest to ryzykowne, gdyż logowanie nie wymaga żadnej autoryzacji.

uci add firewall rule
uci set firewall.@rule[-1]._name=ser2net
uci set firewall.@rule[-1].src=wan
uci set firewall.@rule[-1].target=ACCEPT
uci set firewall.@rule[-1].proto=tcp
uci set firewall.@rule[-1].dest_port=3001
uci commit firewall

/etc/init.d/firewall restart
zastosowania/arduino.txt · ostatnio zmienione: 2011/01/08 23:01 przez arteq
CC Attribution-Noncommercial-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0
Profesjonalny Hosting