ブログを引っ越しました。新しいブログは工房便り〜TSUBAKI GUITARS&LEATHERです。
mbedをI2Cのスレーブにするのが簡単だそうで、早速試してみました。
こちらのページにmbedをI2Cのスレーブとして動かす方法が書かれています。
その前にKoshian BLEモジュールをI2C接続できるようにピンヘッダをハンダ付け。1.27mmピッチのスルーホールに2.54mmピッチのピンヘッダを付けるので一つおきにしかピンを使えませんが、幸いI2C接続するには都合のいい位置にピンがあります。Koshianのピン配置はこちらに載っています。
LPC1114のフラッシュメモリにmbedオンラインコンパイラで生成したbinファイルを書き込む回路と方法はこちらの投稿に書いてあります。
I2C接続はKoshianの17番ピンをLPC1114をdp5に(SDA:黄色のジャンパー線)、18番ピンをdp27に(SCL:緑色のジャンパー線)それぞれつなぎます。どちらも2.2KΩの抵抗でプルアップしました。電源はUSBシリアル変換モジュールからKoshianの12番ピン(VDD:赤色のジャンパー線)に供給。GNDはGNDへ(黒色のジャンパー線)。
LPC1114にはmbedオンラインコンパイラで次のソースコードを入力してコンパイル。
main.cpp
#include "mbed.h" I2CSlave slave(dp5, dp27); // LPC1114 SDA=dp5, SCL=dp27 DigitalOut myled(LED1); #define DEVICE_ADDR (0x20<<1) int main() { char buff[10]; char msg[] = "OK!"; slave.address(DEVICE_ADDR); while(1) { int i = slave.receive(); switch(i) { case I2CSlave::ReadAddressed: slave.write(msg, strlen(msg)+1); break; case I2CSlave::WriteGeneral: slave.read(buff, 10); break; case I2CSlave::WriteAddressed: slave.read(buff, 1); if(buff[0] == 0) myled = 0; else myled = 1; break; } for(int i = 0; i < 10; i++) { buff[i] = 0; } } }
次にXcodeでKonashi sdkを使ってiPhoneアプリを作って動作を確認します。
ViewController.h
#import <UIKit/UIKit.h> @interface ViewController : UIViewController @property (nonatomic, weak) IBOutlet UIButton *findButton; - (IBAction)find:(id)sender; - (IBAction)led:(id)sender; @end
ViewController.m
#import "ViewController.h" #import "Konashi.h" @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; [_findButton setTitle:@"Find BLE Device" forState:UIControlStateNormal]; [[Konashi shared] setDisconnectedHandler:^{ [_findButton setTitle:@"Find BLE Device" forState:UIControlStateNormal]; }]; [[Konashi shared] setConnectedHandler:^{ NSLog(@"CONNECTED"); }]; [[Konashi shared] setReadyHandler:^{ NSLog(@"READY"); [Konashi i2cMode:KonashiI2CModeEnable100K]; [_findButton setTitle:@"Disconnect" forState:UIControlStateNormal]; }]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)find:(id)sender { if([Konashi isConnected]) { [Konashi disconnect]; } else { [Konashi find]; } } // LEDスイッチが切り替えられた時の操作 - (IBAction)led:(id)sender { UISwitch *sw = (UISwitch *)sender; uint8_t bytes[1]; bytes[0] = sw.on ? 1 : 0; NSData *data = [NSData dataWithBytes:bytes length:1]; [Konashi i2cStartCondition]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cWriteData:data address:0x20]; [NSThread sleepForTimeInterval:0.01]; [Konashi i2cStopCondition]; [NSThread sleepForTimeInterval:0.01]; } @end
前回、Koshianとmbed-1114をUART接続して実験しましたが、I2Cでも似た様な事が出来ました。面白い!
別件ですが、ブレッドボードがなくなってきたので、Bluefruit LE Microでやった実験の一部をユニバーサル基板に移しました。配線は裏側にした方がカッコいいと思いましたが、写真を見てわかる様に表側に配線しました。白色が信号線でBluefruitのAnalogピンにつながります。赤色は電源、黒色はGNDです。裏側でタクトスイッチの(写真で見て)右側の脚を全部つなげて、黒色の線にハンダ付けしてあります。
スケッチを少し修正して、モーション系(角度や速度)で一つ、環境系(温度・湿度・気圧・照度)で一つ、スイッチで1つにまとめてダイエットしました。
まだMPU-6050の値から傾斜角を求めるロジックが微妙な動きです。時々、数値が暴れる感じ。原因はこれを書いている時点ではわかっていません。
ディスカッション
コメントはまだありません。