2013年8月18日日曜日

ArduinoからI2C

wireってライブラリ使うだけ。

DRV8830を使ってモーター操作するライブラリはこちらで公開されています。
http://junkroom2cyberrobotics.blogspot.jp/2013/04/i2cdrv8830.html
https://cyberrobotics.codeplex.com/releases/view/105736

2013年8月17日土曜日

Pythonからシリアル

急きょRaspberry PiからArduinoをつかう必要があったのでメモ。
pyserialが必要なのでpipでインストール

cuでやる場合はインストールする必要あり
$ sudo apt-get install cu
USBにArduinoさすだけで、/dev/ttvACM0に認識されるので、
cu -l /dev/ttyACM0 -s 9600
でConnectされ、あとは入力したのがそのままArduinoにわたる

目的はPythonから操作したいので、Pythonのserialをインストール
$ sudo pip install pyserial

あとはここを参考にした
http://tomono.eleho.net/2012/09/15/3140/

2013年8月4日日曜日

Raspberry piからI2C



1./etc/modulesに追記
$ sudo vi /etc/modules

i2c-dev  # 追記

2.ブラックリストから削除
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
blacklist i2c-bcm2708
 |
 V
#blacklist i2c-bcm2708

3.上記を有効にするためReboot
$ sudo reboot

4.モジュールの組み込みを確認
$ dmesg |grep i2c
[    4.830278] bcm2708_i2c bcm2708_i2c.0: BSC0 Controller at 0x20205000 (irq 79) (baudrate 100k)
[    5.053221] bcm2708_i2c bcm2708_i2c.1: BSC1 Controller at 0x20804000 (irq 79) (baudrate 100k)

[   11.096122] i2c /dev entries driver

5.i2c-toolsをインストール
$ sudo apt-get install i2c-tools

6. pythonからi2cバスをたたくためのsmbusをインストール
$ sudo apt-get install python-smbus

7. I2Cデバイスを結線
SCLはSCLに、SDAはSDAに結線

8.接続チャンネルを確認
$ sudo i2cdetect -l
i2c-0   i2c             bcm2708_i2c.0                           I2C adapter

i2c-1   i2c             bcm2708_i2c.1                           I2C adapter
これでつながっている数がわかる
$ sudo i2cdetect -l

 $ sudo i2cdetect 0
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-0.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

$ sudo i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x03-0x77.
Continue? [Y/n] y
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- 64 -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

DRV8830を半田ジャンパOpenのままで使うと、アドレス0x64になるのが確認できた

9.動かしてみる

import smbus
import time

i2c = smbus.SMBus(1)    # sudo i2cdetect 1で見つかったので
adr = 0x64

i2c.write_byte_data(adr,0,0x35)   #  内部アドレス0で上位6bit 0x0D=1.04V, 下位2bit 0x01正転
print 'set on'
time.sleep(2)
i2c.write_byte_data(adr,0,0x34)     #  内部アドレス0で上位6bit 0x0D=1.04V, 下位2bit 0x00スタンバイ
print 'set standby'

USBカメラもつないでる為か、無線LANの接続が不安定