“第十二课--microWRT与Microduino I2C 通信”的版本间的差异
(Created page with "{| style="width: 800px;" |- | 一般的应用中microwrt和其他模块,比如蓝牙,zigbee,microduino-core模块都是通过串口进行通信的。本文主要介绍...") |
(→Microduino Core) |
||
第18行: | 第18行: | ||
#include <Wire.h> | #include <Wire.h> | ||
− | |||
#define SLAVE_ADDRESS 0x04 | #define SLAVE_ADDRESS 0x04 | ||
int number = 0; | int number = 0; | ||
int state = 0; | int state = 0; | ||
− | |||
void setup() { | void setup() { | ||
pinMode(13, OUTPUT); | pinMode(13, OUTPUT); | ||
第28行: | 第26行: | ||
// initialize i2c as slave | // initialize i2c as slave | ||
Wire.begin(SLAVE_ADDRESS); | Wire.begin(SLAVE_ADDRESS); | ||
− | |||
// define callbacks for i2c communication | // define callbacks for i2c communication | ||
Wire.onReceive(receiveData); | Wire.onReceive(receiveData); | ||
Wire.onRequest(sendData); | Wire.onRequest(sendData); | ||
− | |||
Serial.print("Ready!"); | Serial.print("Ready!"); | ||
} | } | ||
− | |||
void loop() { | void loop() { | ||
delay(100); | delay(100); | ||
} | } | ||
− | |||
// callback for received data | // callback for received data | ||
void receiveData(int byteCount) | void receiveData(int byteCount) | ||
第47行: | 第41行: | ||
Serial.print("data received: "); | Serial.print("data received: "); | ||
Serial.println(number); | Serial.println(number); | ||
− | |||
if (number == 1) | if (number == 1) | ||
{ | { | ||
第62行: | 第55行: | ||
} | } | ||
} | } | ||
− | |||
// callback for sending data | // callback for sending data | ||
void sendData(){ | void sendData(){ |
2015年5月31日 (日) 08:53的版本
一般的应用中microwrt和其他模块,比如蓝牙,zigbee,microduino-core模块都是通过串口进行通信的。本文主要介绍如何利用 microWRT的i2c接口进行通信。对于i2c接口的具体含义,本教程不做详细介绍,在microduino的基础教程中有详细描述。
microWRT i2c接口配置通过下面的基础教程来配置microwrt对i2c接口的支持。 https://www.microduino.cc/wiki/index.php?title=第五课--MicroWRT_I2C_使用 Microduino CoreCore模块已经支持了i2c协议。包括3.3v的core模块和5v core模块。 下面是microduino Core 的程序。 #include <Wire.h> #define SLAVE_ADDRESS 0x04 int number = 0; int state = 0; void setup() { pinMode(13, OUTPUT); Serial.begin(9600); // start serial for output // initialize i2c as slave Wire.begin(SLAVE_ADDRESS); // define callbacks for i2c communication Wire.onReceive(receiveData); Wire.onRequest(sendData); Serial.print("Ready!"); } void loop() { delay(100); } // callback for received data void receiveData(int byteCount) { while(Wire.available()) { number = Wire.read(); Serial.print("data received: "); Serial.println(number); if (number == 1) { if (state == 0){ digitalWrite(13, HIGH); // set the LED on state = 1; } else { digitalWrite(13, LOW); // set the LED off state = 0; } } } } // callback for sending data void sendData(){ Wire.write(number); } 硬件连接在microWRT的UPIN扩展板上,留出了I2C接口,包括SCL,SDA,3.3V,GND 4个引脚。将这四个引脚分别接到Core模块的对应引脚上。 为了验证传输数据的有效性,我们在core的D13引脚接一个LED灯。 系统连接如下图所示: 测试系统上电后,可以发现i2c-0设备,core模块被设置为从机,并且地址为0x04,可以通过下面的命令来测试数据。 同时开启Microduino的模拟串口来监视数据。 root@microWrt:/dev# i2cset -y 0 0x04 1 其中: 0: 表示操作i2c-0 0x04:表示从机地址 1: 表示输入的数据 测试结果如下: 有了I2C-0 设备和从机地址0x04,玩家可以通过在microwrt上通过python,C程序来完成对I2C接口的使用。 |