目的:
       实现Arduino主从设备之间的互相IIC通信,掌握IIC通信协议的使用方法。
器材:
Arduino UNO R3 一块
Arduino Nano 三块
面包板   导线
3K电阻 2个
连接方法:

    由于Arduino IIC接口总线没有上拉电阻,在连接布线时需要提供两个上拉电阻。
 
首先给出程序:
Master程序
   #include <Wire.h>
void setup() {
  Wire.begin(); // join i2cbus (主机,不用写IIC地址)
  Serial.begin(9600); // 串口输出
 }
 
int i = 1;
 
 void loop()
 {
     //向从机写入数据
     Wire.beginTransmission(2);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(2, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
     delay(2000); // 等2秒
     Serial.println( ); // 输出到下一行方便查看       
    
     //向从机写入数据
     Wire.beginTransmission(3);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(3, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
      delay(2000); // 等2秒
      Serial.println( ); // 输出到下一行方便查看           
   
     //向从机写入数据
     Wire.beginTransmission(4);
     Wire.write(i);
     Wire.endTransmission();
     //读数据
     Wire.requestFrom(4, 6); // 要求2号IIC设备,通过Wire传送 6个 char过来
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
      delay(2000); // 等2秒
      Serial.println( ); // 输出到下一行方便查看     
   
     i++;
     i = i%4;
 
 }// loop
 
 
SALVE程序
#include <Wire.h>
void ggyy();
//接收主机命令
int revData = 0;
void receiveData(int byteCount) {  
  while (Wire.available()) {
    int number = Wire.read();
    Serial.print("data received1: ");
    Serial.println(number);
    revData = number;
    } 
 
void setup()
{
  Wire.begin(3); //通知IIC总线, 是2 号IIC设备地址
  Wire.onReceive(receiveData);
  Wire.onRequest(ggyy); // 注册当收到主机信息时相应的调用函数ggyy( )
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13,LOW);
}
void loop()
{ // 从机,代码空
      int b = revData;
      revData = 0;
      for(int i = 0; i < b; i++){
      digitalWrite(13,HIGH);
      delay(200);
      digitalWrite(13,LOW);
      delay(200);
    }
}
// 信息处理函数,必须在 setup( ) 內用onRequest( ) 注册
void ggyy()
{
  Wire.write("World "); // 送出 6 个char给IC 上的主机
}
 
 
程序要点分析:
Master程序用Wire.begin();设置,表示本机为Master
  主机向从机写入数据格式
     Wire.beginTransmission(从机地址号);
     Wire.write(数据byte);
     Wire.endTransmission();
Master从Salve读数据
     Wire.requestFrom(从机地址, 字符个数);
     while(Wire.available()) // 如果Wire上有 char 等读取
     {
           char c = Wire.read(); // 从Wire 上读取一个char
            Serial.print(c); //输出到串口监视器查看
     }
SLAVE用Wire.begin(地址号)表示本机为SLAVE,并设置地址号
5.  注册用于接收和发送的函数
Wire.onReceive(receiveData);
     Wire.onRequest(sendData);
两个函数的格式:
void receiveData(int byteCount);
void sendData ();
 
当主机发出requestForm请求时,从机响应,开始发送数据

Arduino IIC 主从设备连接通信的更多相关文章

  1. STM32作为主设备,Arduino作为从设备进行IIC通讯的注意要点

    近日公司的项目重心要往米思齐的Arduino图形化编程上转移了,需要我将STM32和Arduino的IIC通讯调通.之前Arduino并没怎么使用过,仅仅是将超声波的代码移植成TOF激光测距而已.网上 ...

  2. 基于HTML5的Web跨设备超声波通信方案

    前言:Chirp在iPhone上掀起了有声传输文件的序幕,我们再也不需要彩信.蓝牙配对.IM来传送数据.它通过“叽叽喳喳”的小鸟叫声来分享数据,简单有趣,而且可以快速的实现一对多的分享. 此外支付宝曾 ...

  3. USB协议-检测设备连接与速度

    在USB设备连接时,USB系统能自动检测到这个连接,并识别出其采用的数据传输速率.USB采用在D+或D-线上增加上拉电阻的方法来识别低速和全速设备. USB支持3种类型的传输速率:1.5Mb/s的低速 ...

  4. android usb Host模式下与usb Hid 设备的通信

    做android 与USB HID设备的通信有段时间了,总结一下遇到的问题和解决方法: 1,第一次遇到的问题:android 版本低不支持usb hid, 被要求做相关项目的时候,就从mUsbMana ...

  5. Niagara解决设备连接应用的软件框架平台技术。

    Niagara 是Tridium公司所研发的设计用于解决设备连接应用的软件框架平台技术. Niagara是一种应用框架,或者说是软件框架,特别设计用于应对智能设备所带来的各种挑战,包括设备连接到企业级 ...

  6. Android和BLE模块连接通信

    首先,进行一下科普: 1.BLE(Bluetooth Low Energy),蓝牙4.0核心profile,主要特点是快速搜索,快速连接,超低功耗保持连接和数据传输,缺点:数据传输速率低,由于其具有低 ...

  7. 理解主从设备模式(Master-Slave)

    前言 在给定上下文的软件体系结构中,为了解决某些经常出现的问题而形成的通用且可重用的解决方案称之为架构模式,而常见的体系架构模式主要有以下十种 分层模式 客户端-服务器模式 主从设备模式 管道-过滤器 ...

  8. Android BLE设备蓝牙通信框架BluetoothKit

    BluetoothKit是一款功能强大的Android蓝牙通信框架,支持低功耗蓝牙设备的连接通信.蓝牙广播扫描及Beacon解析. 关于该项目的详细文档请关注:https://github.com/d ...

  9. C++服务器设计(六):设备连接的生命周期管理

    生命周期介绍 每一个服务器系统的新连接从建立开始时,均会经历多个阶段.比如连接的建立,登录的验证,退出前的资源释放等.同时在具体的消息处理中,还会遇到不可识别的消息事件,或者消息处理时出现数据错误等. ...

随机推荐

  1. OBU设备非接触式读卡方案:SI522

    传统收费站将成历史!全部转为ETC系统 当高速人工收费已经成为我们驾驶出行的习惯后,我们发现,高速人工收费带来低效率.长等待以及落后性等缺点逐渐给人们出行带来不便.伴随着我国汽车保有量的逐年递增,高速 ...

  2. nuxt.js 初始化 npm run dev 报错

    在初始化 npm install 了基本依赖后: npm run dev 报错: error in ./server/index.js Module build failed: Error: Plug ...

  3. linux服务器常用操作和命令

    1. 什么是linux服务器load average? Load是用来度量服务器工作量的大小,即计算机cpu任务执行队列的长度,值越大,表明包括正在运行和待运行的进程数越多.参考资料:http://e ...

  4. 《新标准C++程序设计》4.2-4.3(C++学习笔记13)

    一.重载赋值运算符“=” 赋值运算符“=”要求左右两个操作数的类型是匹配的,或至少是兼容的.有时候希望赋值运算符两边的类型可以不匹配,比如,把一个int类型变量赋值给一个Complex对象,或把一个 ...

  5. 学生选课数据库MySQL语句练习题45道

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. select Sname,Ssex,Class from Student;2. 查询教师所有的单位即不重复的Depart列 ...

  6. C# enable为false时不变颜色

            [System.Runtime.InteropServices.DllImport("user32.dll ")]         public static ex ...

  7. pyhton pandas数据分析基础入门(一文看懂pandas)

    //2019.07.17 pyhton中pandas数据分析基础入门(一文看懂pandas), 教你迅速入门pandas数据分析模块(后面附有入门完整代码,可以直接拷贝运行,含有详细的代码注释,可以轻 ...

  8. MongoDB_02简介

    MongoDB简介 MongoDB是一个开源,高性能,无模式的文档型数据库. 它支持的数据结构非常松散,是一种类似于JSON的格式叫BSON,所以他既可以存储比较复杂的数据类型,又相当的灵活. Mon ...

  9. Redis 详解 (五) redis的五大数据类型实现原理

    目录 1.对象的类型与编码 ①.type属性 ②.encoding 属性和 *prt 指针 2.字符串对象 3.列表对象 4.哈希对象 5.集合对象 6.有序集合对象 7.五大数据类型的应用场景 8. ...

  10. DRF项目之实现用户密码加密保存

    在DRF项目的开发中,我们通过直接使用序列化器保存的用户信息时,用户的密码是被明文保存到数据库中. 代码实现: def create(self, validated_data): '''重写creat ...