//
表示中
モノづくり, Computer - コンピューター, Electronics - 電子工作

LPC1114をI2CのスレーブとしてKoshianと接続する


mbedをI2Cのスレーブにするのが簡単だそうで、早速試してみました。

こちらのページにmbedをI2Cのスレーブとして動かす方法が書かれています。

その前にKoshian BLEモジュールをI2C接続できるようにピンヘッダをハンダ付け。1.27mmピッチのスルーホールに2.54mmピッチのピンヘッダを付けるので一つおきにしかピンを使えませんが、幸いI2C接続するには都合のいい位置にピンがあります。Koshianのピン配置はこちらに載っています。

 

2016-05-05 19.50.26

LPC1114のフラッシュメモリにmbedオンラインコンパイラで生成したbinファイルを書き込む回路と方法はこちらの投稿に書いてあります。

I2C接続はKoshianの17番ピンをLPC1114をdp5に(SDA:黄色のジャンパー線)、18番ピンをdp27に(SCL:緑色のジャンパー線)それぞれつなぎます。どちらも2.2KΩの抵抗でプルアップしました。電源はUSBシリアル変換モジュールからKoshianの12番ピン(VDD:赤色のジャンパー線)に供給。GNDはGNDへ(黒色のジャンパー線)。

 

2016-05-05 23.43.12

 

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です。裏側でタクトスイッチの(写真で見て)右側の脚を全部つなげて、黒色の線にハンダ付けしてあります。

 

2016-05-05 21.03.09

スケッチを少し修正して、モーション系(角度や速度)で一つ、環境系(温度・湿度・気圧・照度)で一つ、スイッチで1つにまとめてダイエットしました。

 

2016-05-05 22.10.49

 

まだMPU-6050の値から傾斜角を求めるロジックが微妙な動きです。時々、数値が暴れる感じ。原因はこれを書いている時点ではわかっていません。

kazz12211 について

Working as a OO programmer and enjoying music, bicycle and photography.

ディスカッション

コメントはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

評価

ブログ統計

  • 576,688 ヒット

カテゴリー

アーカイブ

カレンダー

2016年5月
« 4月   6月 »
1234567
891011121314
15161718192021
22232425262728
293031  
%d人のブロガーが「いいね」をつけました。