导航:首页 > 编程语言 > 树莓派i2c编程

树莓派i2c编程

发布时间:2022-06-22 07:39:49

① 树莓派python支持i2c吗

树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应更多的应用。PCF8574为一款通过I2C总线扩展IO的芯
片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。

树莓派扩展功能的开发方法有很多,例如wiringPi和bcm2835 C library都提供I2C
API函数。如果使用python+SMBUS库开发的话,你会发现linux应用开发原来如此简单。(注意SMBUS和I2C存在区别与联系,在本文中
两者是相等的概念)

2.相关博文

【树莓派学习笔记——I2C设备载入和速率设置】

【树莓派学习笔记——I2C Tools 学习笔记】

【树莓派学习笔记——I2C PCF8574 BCM2835 Library】使用BCM2835
Library实现本文相同的内容

【树莓派学习笔记——I2C PCF8574 SysFs方式】使用SysFS方式实现本文相同的内容

3.PCF8574使用简述

PCF8574的采用7位I2C地址,7位I2C地址中的低3位从高到低分别为A2
A1和A0,该3位为地址选择位,若地址选择全部接GND,那么PCF8574的I2C从机地址为0x20。图1为PCF8574的基本信息,左侧为芯片
内部结构示意图,其中A2
A1和A0决定从机地址而从机地址直接影响I2C总线控制器,右侧上部为PCF8574引脚图,右侧下部为I2C从机地址组成示意图,从机地址的高4位为
0100,该4位数字固定不变。

图1 PCF8574基本信息


注意I2C 7位从机地址和I2C
读控制字或i2C写控制器存在联系与区别,对于7位从机地址为0x20的PCF8574而言,读控制字为0x41,写控制字为0x40。若使用GPIO通
过软件法模拟I2C时序时,通常把写控制字0x40定义为I2C从机地址,软件模拟时的I2C地址(0x40)和I2C
7位从机地址(0x41)存在区别。

PCF8574内部含有8个准双向IO,对PCF8574进行一次写操作可修改IO口的输出状态,对PCF8574进行一次读操作可获取IO口的输入状态。I2C总线的操作较为复杂,各芯片之间的差异较大,例如BH1750、AT24C04和ADXL345虽然均使用I2C接口,但是细节之处存在差异较大。

图2 PCF8574读写时序

4.代码实现——python

【安装python smbus】

sudo apt-get install python-smbus

新建一个名为pcf8574.py的文件

[python] view plain
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import smbus
import time

# 打开 /dev/i2c-1
bus = smbus.SMBus(1)

while True:
for i in range(0,4):
# 向PCF8574写入一个字节
bus.write_byte( 0x20 , (1<<i) )
# 延时100ms
time.sleep(0.1)

【代码详解】

【1】#!/usr/bin/env python

定义python解析脚本的绝对路径。

【2】# -*- coding: utf-8 -*-

py文件为utf-8格式,否则无法写入中文注释。

【3】import smbus

导入smbus模块。

【4】bus = smbus.SMBus(1)

在树莓派版本2中,I2C设备位于I2C-1,所以此处的编号为1

【5】bus.write_byte( 0x20 , (1<<i) )

向PCF8574写入一个字节,注意PCF8574和其他I2C芯片不同,该芯片没有寄存器,发送写控制字之后可直接设置IO口输出状态。

【执行程序】

进入pcf8574.py所在目录,输入以下指令

sudo python pcf8574.py

【运行结果】

图3 运行结果

5.参考资料

【python SMBUS GitHub】python封装SMBUS操作函数具体代码,值得阅读。

② 树莓派上用什么编程

Raspberry Pi 系统用的是 ARM 架构的 Linux, Linux上的大部分编程语言如GNU C/C++, Java, Python, Perl, php都能用, .
Net本来就不支持Linux, 不过说不定非官方的Mono会支持ARM!
希望回答能给你带来帮助~
如果满意,请采纳,如还有疑问,可继续追问!
您也可以向我们团队发出请求,会有更专业的人来为您解答!

③ 学习树莓派上编程的时候,需要哪些教程

树莓派教程(持续更新)网络网盘免费资源在线学习

链接: https://pan..com/s/1PuxuAIN8dV37G5E2n33pCA

提取码: wuuj

树莓派教程(持续更新) 中谷教育-Python视频教程(完整版)

游戏镜像 微雪5寸显示器config 树莓派详细资料 视频教程 镜像 Voice kit语音工具包镜像 Etcher-Setup-1.4.4-x86镜像烧录工具.

exeaiyprojects-2018-04-13.img.xz 开启SSH-raspbian-stretch.zip ubuntu-mate-16.04.2-desktop-armhf-raspberry-pi.img.xz StickyFingers-Kali-Pi-armhf-180923.img.xz recalboxOS-4.0.0-beta5.zip 2018-11-13-raspbian-stretch.zip

④ 新手求教树莓派用什么编程好

python,有官方控制引脚的包。

⑤ 为什么树莓派2上看不到i2c设备

1、将一个I2C器件连接至arino的SDA、SCL引脚(UNO R3 连接A4、A5) 2、将如下代码烧入arino,打开串口界面即可得到I2C设备的地址。 #include void setup() { Wire.begin(); Serial.begin(9600); Serial.println("nI2C Scanner"); } void loop()

⑥ 树莓派上用什么编程

树莓派用python来进行编程。树莓派项目的一个核心思想是Python编程语言的使用。Python允许树莓派的拥有者将项目扩展到令人难以置信的规模。Python是一个解释型的面向对象的、跨平台的编程语言。良好的可靠性、清晰的语法和易用性,使它成为最流行的编程语言之一。Python是一个优雅的、功能强大的语言。

Raspberry Pi 系统用的是 ARM 架构的 Linux, Linux上的大部分编程语言如GNU C/C++, Java,Python, Perl, PHP都能用, .Net本来就不支持Linux, 不过说不定非官方的Mono会支持ARM。

⑦ 如何在windows下或者linux下对树莓派编程(C语言或C++)

硬件的没玩过
树莓派 是不是那个 教学型 ARM编程主板?

建议你去 他们官方论坛看下
我同学他们毕业搞ARM的 都是 自己焊接板子的
然后用 winCE或者 unix linux 的嵌入式系统

他这种定制的包装过的,一般都把很多底层的 原理封装了,只需要 学号他官方提供的 支持文档和事例程序,就能实现 很多功能。而且
如果 你直接去学C/C++ windows编程 以及通信编程 SSH协议 等 反倒离目的远了。
我估计你应该是个 爱好者,或者学生。

论坛里有很多 爱好者 发的 相关项目及 细节

比如:我刚才在 论坛里看到一个帖子说

做了一个工具,在windows下面和pi 进行ssh 交互

http://bbs.ickey.cn/index.php?app=group&ac=topic&id=2573

⑧ 如何由树莓派开始学习编程

先装系统(我装的是Linux的),然后上网找找教程,比如Python、C++的教程,(内容和开发软件差不多,只不过可以通过编程控制一些电子小零件),学多了自己也能做很多有趣的小发明啦!

⑨ python3 树莓派编程怎么写

首先树莓派得安装 python-smbus, i2c-tools,
然后修改文件:sudo nano /etc/moles,添加上 i2c-bcm2708 和i2c-dev 这两行,Raspbian还需要在raspi-config中激活i2c.

用 sudo i2cdetect -y 1 查看设备地址,
例子1:LCD2004,设备地址 为0x27;
先写个驱动调用程序 i2c_driver_lcd.py

import smbus
from time import *

# LCD Address
ADDRESS = 0x27

# commands
LCD_CLEARDISPLAY = 0x01
LCD_RETURNHOME = 0x02
LCD_ENTRYMODESET = 0x04
LCD_DISPLAYCONTROL = 0x08
LCD_CURSORSHIFT = 0x10
LCD_FUNCTIONSET = 0x20
LCD_SETCGRAMADDR = 0x40
LCD_SETDDRAMADDR = 0x80

# flags for display entry mode
LCD_ENTRYRIGHT = 0x00
LCD_ENTRYLEFT = 0x02
LCD_ENTRYSHIFTINCREMENT = 0x01
LCD_ENTRYSHIFTDECREMENT = 0x00

# flags for display on/off control
LCD_DISPLAYON = 0x04
LCD_DISPLAYOFF = 0x00
LCD_CURSORON = 0x02
LCD_CURSOROFF = 0x00
LCD_BLINKON = 0x01
LCD_BLINKOFF = 0x00

# flags for display/cursor shift
LCD_DISPLAYMOVE = 0x08
LCD_CURSORMOVE = 0x00
LCD_MOVERIGHT = 0x04
LCD_MOVELEFT = 0x00

# flags for function set
LCD_8BITMODE = 0x10
LCD_4BITMODE = 0x00
LCD_2LINE = 0x08
LCD_1LINE = 0x00
LCD_5x10DOTS = 0x04
LCD_5x8DOTS = 0x00

# flags for backlight control
LCD_BACKLIGHT = 0x08
LCD_NOBACKLIGHT = 0x00
# set init LCD BACKLIGHT ON or OFF
def lcd_backlight(lcdbl=1):
if lcdbl == 0 :
return LCD_NOBACKLIGHT
return LCD_BACKLIGHT

En = 0b00000100 # Enable bit
Rw = 0b00000010 # Read/Write bit
Rs = 0b00000001 # Register select bit

class lcd(object):
#initializes objects and lcd
def __init__(self,lcd_bl,port=1):

self.addr = ADDRESS
self.bus = smbus.SMBus(port)
self.lcd_bl = lcd_bl

self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x03)
self.lcd_write(0x02)

self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE)
self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON)
self.lcd_write(LCD_CLEARDISPLAY)
self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT)
sleep(0.2)

⑩ 如何编程让树莓派存取传感器传来的数据

方法非常多
最简单的一个:
树莓派上有GPIO,上面有一组UART接口,分RX和TX,把这两个接口于ARDUINO板子上的TTL接口连起来就能传输数据了,arino上的程序用serial系列的程序,树莓派上也有很多方式读取UART的数据,比如Python下的模块,或者minicom等串口调试工具。

还可以用无线到方式,wifi之类的,更麻烦。

阅读全文

与树莓派i2c编程相关的资料

热点内容
扫地机怎么安装app 浏览:317
考研结合特征值计算法 浏览:514
操作系统算法综合题 浏览:150
华为程序员待遇 浏览:545
程序员带娃的图片 浏览:77
迷你云服务器怎么下载 浏览:813
福州溯源码即食燕窝 浏览:232
当乐服务器怎么样 浏览:713
nc编程软件下载 浏览:382
如何限制手机app的使用 浏览:307
安卓华为手机怎么恢复桌面图标 浏览:956
我的世界电脑版服务器地址在哪找 浏览:533
违抗了命令 浏览:256
安卓如何实现拖拽放置 浏览:91
净资产收益率选股指标源码 浏览:599
血压力传感器计算公式单片机 浏览:466
全网接口vip影视解析源码 浏览:916
如何破解服务器远程密码错误 浏览:377
平安深圳app如何实名认证 浏览:500
linux网络监控软件 浏览:889