wiringpi2显然也把i2c驱动带给了Python,手头上正巧有一个DS3231的模块,上边带了一个DS3231 RTC(实时时钟),与一片24C32,两个芯片均为iic总线设备,与树莓派接线如下:

也就是VCC GND SDA SCL四个脚分别接到树莓派的1(3.3v)、9(0v)、3(SDA.1)、5(SCL.1)上,因为树莓派的I2C接口默认是关闭的,需要先编辑一下/boot/config.txt,去掉 device_tree_param=i2c_arm=on上的注释(ArchlinuxARM RasperryPi2),然后重启(注:Raspbian可以用raspi-config打开)

然后重启,重启完成后,运行

modprobe i2c-dev

若想这个模块自动装载,请把它写到   /etc/modules-load.d/raspberrypi.conf

安装i2c-tools,Archlinux下为:

pacman –S i2c-tools

安装后,运行i2cdetect –y 1结果如下:

嗯,发现了57,68两个设备,哪个是DS3231,哪个又是24C32呢,我们把里边的数据dump出来看看:

可以看到0x57设备里边是空的,应该就是24C32了,0x68里边读出来20个字节,就是DS3231了。

我先解释下这几个命令:

i2cdetect顾名思义就是搜索i2c总线的设备,树莓派有2条i2c总线,咱们接的SDA.1,SCL.1,当然就是搜索1这条总线了(另外一条是SDA.0 SCL.0)

-y参数没啥意义,就是自己帮你按下y(yes).

i2cdump也很容易理解,就是dump出指定总线,指定设备的数据这里是1总线0x57 0x68两个设备。-y参数跟上个命令是一样的。

这样,我们的i2c设备就都通讯上了,下边就是用wiringpi2库读写之。

wringpi中操作i2c设备的函数主要有一下几个:

wiringPiI2CSetup() #这个函数的作用是初始化i2c设备,并返回一个设备对象(句柄),接下来,就是使用

wiringPiI2CRead()

wiringPiI2CReadReg16()  

wiringPiI2CReadReg8() 

wiringPiI2CWrite()

wiringPiI2CWriteReg16()

wiringPiI2CWriteReg8()

等函数来操作I2C总线设备了。

经过查阅DS3231的手册,DS3231的第一个寄存器值,读出的是秒,我们就读一下这个地址,代码比较简单,就直接在python shell里边写下来执行就行了代码如下“

可以看到,我们读出来了秒,我们把程序写进文件,一秒钟读一次:

import wiringpi2 as wpi

ds=wpi.wiringPiI2CSetup(0x68)
while True:
sec=wpi.wiringPiI2CReadReg8(ds,0)
print(sec,end=' ',flush=True)
wpi.delay(1000)

结果……

原来,这个RTC时钟读出来的是BCD码,比如9以后就是16,16的二进制为0001(1) 0000(0),4位一组,就是10,我编写了个小函数,把BCD码转换成10进制输出:

import wiringpi2 as wpi

def b2s(bcd):
return (bcd>>4)*10+(bcd&0xf) #高4位*10加上低四位 ds=wpi.wiringPiI2CSetup(0x68)
while True:
sec=wpi.wiringPiI2CReadReg8(ds,0)
print(b2s(sec),end=' ',flush=True)
wpi.delay(1000)

呼呼终于正常了。

树莓派高级GPIO库,wiringpi2 for python使用笔记(五)i2c读取测试的更多相关文章

  1. 树莓派高级GPIO库,wiringpi2 for python使用笔记(一)安装

    网上的教程,一般Python用RPi.GPIO来控制树莓派的GPIO,而C/C++一般用wringpi库来操作GPIO,RPi.GPIO过于简单,很多高级功能不支持,比如i2c/SPI库等,也缺乏高精 ...

  2. 树莓派高级GPIO库,wiringpi2 for python使用笔记(三)GPIO操作

    GPIO库的核心功能,当然就是操作GPIO了,GPIO就是"通用输入/输出"接口,比如点亮一个LED.继电器等,或者通过iic spi 1-wire等协议,读取.写入数据,这都是G ...

  3. 树莓派高级GPIO库,wiringpi2 for python使用笔记(四)实战DHT11解码

    DHT11是一款有已校准数字信号输出的温湿度传感器. 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃. 我买的封装好的模块,上边自带了上拉电阻,直接查到树莓派上即可灰 ...

  4. 树莓派高级GPIO库,wiringpi2 for python使用笔记(二)高精度计时、延时函数

    学过单片机的同学应该清楚,我们在编写传感器驱动时,需要用到高精度的定时器.延时等功能,wiringpi提供了一组函数来实现这些功能,这些函数分别是: micros() #返回当前的微秒数,这个数在调用 ...

  5. Python课程笔记 (五)

    今天主要学习图形用户界面,更多的还是要我们自己去实际操作,课仿佛上了一半就完了,分享一下课程(这里在SixthClass)的源码: https://gitee.com/wang_ming_er/pyt ...

  6. [Python学习笔记]文件的读取写入

    文件与文件路径 路径合成 os.path.join() 在Windows上,路径中以倒斜杠作为文件夹之间的分隔符,Linux或OS X中则是正斜杠.如果想要程序正确运行于所有操作系统上,就必须要处理这 ...

  7. PYTHON 爬虫笔记五:BeautifulSoup库基础用法

    知识点一:BeautifulSoup库详解及其基本使用方法 什么是BeautifulSoup 灵活又方便的网页解析库,处理高效,支持多种解析器.利用它不用编写正则表达式即可方便实现网页信息的提取库. ...

  8. python学习笔记五 模块上(基础篇)

    模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要 ...

  9. Python学习笔记(五)函数和代码复用

    函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Python提供了许多内建函数,比如print().同样,你也可以自己创建函数, ...

随机推荐

  1. create a (VSTO) Office 2007 add-in using VS 2012?

    You can get VS 2012 working with Office 2007. First create an Outlook 2010 Add-In and modify the pro ...

  2. T-SQL查询:语句执行顺序

    读书笔记:<Microsoft SQL Server 2008技术内幕:T-SQL查询> ===============  T-SQL查询的执行顺序 =============== === ...

  3. javascript实现倒计时

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  4. cocos2dx中包含svn

    因为不想从svn上载下整个工程,就只把Classes和Resources载下来了,在打安卓包时出现WindowsError: [Error 5] : 'D:\\CocosProject\\(Proje ...

  5. 一致性哈希(Consistent Hashing)

    前言:对于一致性哈希已经不是罕见概念,在此只是对原有理论概念的一个整理和用自己的理解讲述,希望对新手有些许帮助,利人利己足矣. 1.概念 一致哈希是一种特殊的哈希算法.在使用一致哈希算法后,哈希表槽位 ...

  6. windows server 2008 NTP授时服务[转]

    转自  http://www.cnblogs.com/jingdian1956/admin/EditPosts.aspx?opt=1 服务端: 默认情况下,独立服务器WINDOWS SERVER 20 ...

  7. Android 树形菜单

    首先来一张萌萌哒的效果图(比较懒 - -) 然后是代码: // Node package com.example.treeview.utils; import java.util.ArrayList; ...

  8. MySQL中用decimal的原因

    原因:float保存的值有可能是这个值的近似值,而不是这个值的真实值.如 0.1在二进制中是没有办法保存真实值的. 下面是例子: 第一步:建表: create table t2(x float,y d ...

  9. C#实现邮件发送功能

    发送邮件所用的核心知识点 微软封装好的MailMessage类:主要处理发送邮件的内容(如:收发人地址.标题.主体.图片等等) 微软封装好的SmtpClient类:主要处理用smtp方式发送此邮件的配 ...

  10. 如何自定义Intent.createChooser的显示结果

    Intent是android核心的概念之一,Intent为android系统提供了真正的开放.android的姿态是开放了,但却没有做到位. 拿“发邮件”这一功能来说,为了使用Intent机制来发送邮 ...