数码之家

 找回密码
 立即注册
搜索
查看: 1236|回复: 6

[Arduino] esp8266/iic总线例程求解

[复制链接]
发表于 2022-9-14 20:58:43 来自手机浏览器 | 显示全部楼层 |阅读模式
这个是iic主机向从机写入数据例程。
有几处看不懂。
标号1看懂是定义SDA/SCL引脚和在函数上使用。
标号2看不懂,这里表达的是  从机地址还是要写入的字节数?
标号3也是看不懂,这里表达的是  从机地址还是要写入的字节数?
标号4不大明白,只知道这里periodic 是字符串,那么nextPing(1000);是什么意思?还有上面using那条又是什么意思?


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
发表于 2022-9-14 21:12:16 | 显示全部楼层
帮顶,还没用过EPS8266的I2C。
回复 支持 反对

使用道具 举报

发表于 2022-9-14 21:44:52 | 显示全部楼层
Arduino Wire.h(IIC)库函数详解
此库中包含
1 Wire.begin()
2 Wire.requestFrom()
3 Wire.beginTransmission()
4 Wire.endTransmission()
5 Wire.write()
6 Wire.available()
7 Wire.read()
8 Wire.onReceive()
9 Wire.onRequest()

Wire.begin() 和 Wire.begin(address)
描述
初始化wire库 ,并且加入到I2C网络,前者作为Master 或 Slaver,并且只能调用一次

参数
address :7位的器件地址(可选),如果没有输入,则以Master的形式加入到I2C网络

Wire.requestFrom()
描述
主设备请求从设备一个字节,这个字节可以被主设备用 read()或available()接受
Wire.requrstFrom(addtess,quantity)
Wire.requrstFrom(addtess,quantity,stop)

参数
addtess : 7位的器件地址
quantity : 请求得到的数量
stop :布尔形,‘1’ 则在请求结束后发送一个停止命令,并释放总线。‘0’则继续发送请求保持连接

返回
字节形 ,从从机接受到的字节数目

Wire.beginTransmission(address)
描述
开始一次传输数据,发送一个I2C开始字符

参数
address : 器件的7位地址

返回
none

Wire.endTransmission()和Wire.endTransmission(stop)
描述
结束一个由beginTransmission()开始的并且由write()排列的从机的传输。在Arduino中 endTransmission()接受到
一个布尔形变量,如果为1 则endTransmission()发送一个停止信息;如果为0 则发送开始信息

返回
0 成功 1 数据溢出 2 发送addtess时从机接受到NACK 3 发送数据时接受到 NACK 4 其他错误

Wire.write()
描述
向从机发送数据

形式
Wire.write(value)
Wire.write(string)
Wire.write(data, length)

参数
value :要发送的数值
string :字符组的指针
data :一个字节数组
length :传输的数量

打赏

参与人数 1家元 +30 收起 理由
广东梁百万 + 30 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2022-9-14 22:01:14 | 显示全部楼层
标号2看不懂,这里表达的是  从机地址还是要写入的字节数?
初始化IIC库,关联引脚和主机地址
标号3也是看不懂,这里表达的是  从机地址还是要写入的字节数?
发送从机地址,也可以理解为芯片的地址
标号4不大明白,只知道这里periodic 是字符串,那么nextPing(1000);是什么意思?还有上面using那条又是什么意思?
因为用了using,所以periodic不是字符串,是代替上一行那一长串的定义,这个库是用来做轮询定时的

打赏

参与人数 1家元 +30 收起 理由
广东梁百万 + 30 精彩回帖

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2022-9-14 22:24:31 | 显示全部楼层
bg4rff 发表于 2022-9-14 22:01
标号2看不懂,这里表达的是  从机地址还是要写入的字节数?
初始化IIC库,关联引脚和主机地址
标号3也是看 ...

谢谢,我去消化理解下
回复 支持 反对

使用道具 举报

发表于 2022-9-15 00:07:44 | 显示全部楼层
我看了一下源码,这个就是定时一秒 给从机发送 "x is 0".... "x is 1"....  
别的4楼说的很完全了, 就最后一条补充一下  using 在c++里是使用命名空间的关键词,在这里 using periodic = esp8266::polledTimeout::periodicMs;
periodic 是命名空间中类的别名,第二句  periodic nextPing(1000);  是用periodic 实例化了一个类 nextping  ,参数是1000  毫秒 即1秒,作用大概是轮询1秒后返回一个true,然后给从机发送内容。 楼主应该看看每行的//  是注释 ,虽然是英文 ,用百度翻译一下,就知道大概意图了。

打赏

参与人数 1家元 +30 收起 理由
广东梁百万 + 30 謝謝分享

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

头像被屏蔽
发表于 2022-9-15 06:33:37 | 显示全部楼层
这个厉害了!谢谢LZ!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-29 07:00 , Processed in 0.374401 second(s), 17 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表