使用IIC协议在Arduino和树莓派中传递字符串

写在前面

这篇文章是在树莓派上写的,正好写完代码

1 树莓派传输

1.1 前置工作

首先:打开树莓派的iic

如果你使用的是图形桌面,非常好,直接在左上角首选项>Raspberry Pi Configuration>Interfaces 里面把i2c打开就可以

如果你用的命令行,在终端输入sudo raspi-config

1.2 查看你的iic设备地址

先安装必要的工具:sudo apt-get install i2c-tools

查看所有iic设备的地址:i2cdetect -y 1

从i2c设备读出所有寄存器的值: sudo i2cdump -y 1 <设备地址>

往某一个iic设备中的某一个寄存器中写入某一个值:sudo i2cset -y 1 <设备地址><寄存器地址><写入的值>

从某一个地址的某一个寄存器读出值:sudo i2cget -y 1<设备地址><寄存器地址>

2 python实现

我们使用smbus这个库:

首先实例化

from smbus2 import SMBus
i2c = SMBus(1)   # 1 代表 /dev/i2c-1

然后打开一个设备

i2c = SMBus(1)

从设备读取一个值:read_byte(i2c_addr, force=None)

向设备写入一个值:write_byte(i2c_addr, value, force=None)

从指定的寄存器中读取一个字节:read_byte_data(i2c_addr, register, force=None)

从给定的寄存器中读取字节数据块:read_i2c_block_data(i2c_addr, register, length(数据块大小), force=None)

将字节数据块写入给定寄存器:write_i2c_block_data(i2c_addr, register(起始寄存器), data, force=None)

我们以arduino和树莓派的通讯为例:

Arduino:

// 直接在Arduino IDE选择“文件”→“示例”→Wire→slave_receiver,可以打开该文件
#include <Wire.h>

void setup() {
  Wire.begin(8);                // Wire初始化, 并以从设备地址8的身份加入IIc总线
  Wire.onReceive(receiveEvent); // 注册一个IICqwq事件,用于响应主机的数据发送
  Serial.begin(9600);           // 初始化串口并设置波特率为9600
}

void loop() {
  delay(100);
}

// 当主机发送的数据被收到时,将触发 receiveEvent() 事件
void receiveEvent(int howMany) {
  String inString="";
// 循环读取收到的数据,最后一个数据单独读取

  char x = Wire.read();    			// 以整型形式接收数据
  Serial.print(x);         		// 串口输出该整型变量
  inString += char(x);
  //Serial.println(inString);
  inString="";

}

然后是树莓派部分


import time
import numpy as np
from smbus2 import SMBus 
i2c = SMBus(1)
i2c.open(1)
while 1:
    inf = time.ctime()
    adr = 0x08
    str_list = np.fromstring(inf,dtype=np.uint8)
    str_list=np.append(str_list,10)
    for i in str_list:
        #print(i)
        i = int(i)
        i2c.write_byte(adr,i,force=None)
    

评论

  1. 博主
    Chrome OS Chrome 113.0.5672.95
    1 年前
    2023-7-10 13:11:54

    import time
    import numpy as np
    from smbus2 import SMBus
    i2c = SMBus(1)
    i2c.open(1)
    while 1:
    inf = "0010!"
    adr = 0x08
    str_list = np.fromstring(inf,dtype=np.uint8)

    str_list=np.append(str_list,10)

    for i in str_list:
        #print(i)
        i = int(i)
        i2c.write_byte(adr,i,force=None)
    time.sleep(0.1)
  2. 798292805
    Linux Edge 113.0.1774.50
    1 年前
    2023-7-11 0:20:21

    import serial
    serial_port = serial.Serial(
    port=’/dev/ttyUSB0′,
    baudrate=115200,
    bytesize=serial.EIGHTBITS,
    parity=serial.PARITY_NONE,
    stopbits=serial.STOPBITS_ONE,
    )
    serial_port.write("T0rn".encode())
    str = ""
    while True:
    if serial_port.inWaiting() > 0:
    data = serial_port.read().decode()
    if data == ‘n’:
    print(str)
    str = ""
    else:
    str = str + data

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇