导航:首页 > 编程语言 > pythonwiringpi2

pythonwiringpi2

发布时间:2022-05-13 21:18:40

1. python读取WiringPi文件数据

在a中获得执行B的结果,可以用sys.popen('sudo ./B')来获得

2. 树莓派用wiringPi控制SPI口的方法有什么

方案——使用GIT工具:

如果在你的平台上还没有安装GIT工具,可以输入以下命令

sudo apt-get install git-core

如果在这个过程中出现错误,尝试更新软件,例如输入以下指令:

sudo apt-get update

sudo apt-get upgrade

紧接着可以通过GIT获得wiringPi的源代码

git clone git://git.drogon.net/wiringPi

若需要更新wiringPi。

cd wiringPi

git pull origin

进入wiringPi目录并安装wiringPi

cd wiringPi

./build

build脚本会帮助你编译和安装wiringPi

3. 树莓派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操作函数具体代码,值得阅读。

4. Mac下搞 Python 开发用什么 IDE

【1】GPIO.setmode(GPIO.BOARD),采用树莓派插座引脚编号方式。
【2】WiringPiSetupGpio()或RPi.GPIO.setmode(GPIO.BCM),则是采用树莓派主芯片提供商Broadcom的编号方法,相当于采用BCM GPIO编号。

5. 如何在Raspberry Pi上用LED闪烁提示网站首页新访客

硬件安装
需要以下硬件:
可以工作的树莓派一个
1P杜邦线2条
面包板一个
面包板跳线 或 单排针 两根
发光二极管一个
300欧姆的电阻一个

GPIO接口

用杜邦线将上图的3.3V输出和GPIO 23引出(板子正面朝上,GPIO引脚在左上角),将电阻和LED串联起来(电阻防止LED电流过大烧掉),注意二极管的两根脚不一样长,长脚的接正级,这样GPIO 23如果输出高电平,二极管就不发光了,输出低电平就亮啦!
都接好了后的样子如下:

GPIO接口编程WiringPi
An implementation of most of the Arino Wiring functions for the Raspberry Pi。 代码地址在:github.com/wiringPi
安装:
git clone github.com/WiringPi/WiringPi
cd WiringPi/wiringPi
sudo make install

让二极管闪一下的示例代码:
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc, char* argv[])
{
int pinNumber = 4;
if (-1 == wiringPiSetup()) {
printf("failed to setup wiringPi");
return 1;
}
pinMode(pinNumber, OUTPUT);
digitalWrite(pinNumber, 1);
delay(200);
digitalWrite(pinNumber, 0);
delay(200);
return 0;
}

WiringPi也有Python, Perl, PHP, Ruby的接口包装,按这里,怎么没有Go的呢。。。
RPi.GPIO
这是GPIO的Python库,地址在:pypi.python.org/pypi/RPi.GPIO 这里建议用python2,原因是web.py还不支持python 3 …
pacman -S python2
pacman -S python2-distribute
easy_install RPi.GPIO

让二极管一直闪的示例代码:
import RPi.GPIO as GPIO
import time

PORT = 16

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)

GPIO.setup(PORT,GPIO.OUT)

while True:
GPIO.output(PORT,True)
time.sleep(0.2)
GPIO.output(PORT,False)
time.sleep(0.2)

Webiopi
项目地址: code.google.com/p/webiopi/ 这是一个使用RESTful API控制Pi的GPIO接口,文档丰富,使用起来非常简单。
安装好后,用命令python -m webiopi启动,用浏览器打开webiopi:raspberry@raspberrypi2:8000/webiopi/ 可以看到控制界面,其中有GPIO 26个引脚的状态(输入输出,高电平或低电平),用鼠标点端口还可以修改数据:

完成的代码
最后用一小段代码来实现最初的想法,这段代码可以较实时的处理QPS<=3的网站流量,如果流量较大则会滞后反应。。。
hugo@raspberrypi ~/bin $ cat traffic_led.sh
#!/bin/sh

tail -f /mnt/usb/logs/nginx/access.log | grep --line-buffered "GET / HTTP" | while read LINE; do {
#echo $LINE
curl -s --data "" "://webiopi:raspberry@raspberrypi2:8000/GPIO/23/value/0"
sleep 0.2
curl -s --data "" "://webiopi:raspberry@raspberrypi2:8000/GPIO/23/value/1"
sleep 0.1
}
done

类似的还可以用这个方法来提醒:来自某某某的新邮件到了,Github有Pull Requests了。。。,或者网站挂了。。。
文章来源:://hugozhu.myalert.info/2013 ... -led-indicator.html

6. 树莓派怎么样用 Python 控制 GPIO 来发送串口指令

python GPIO
1、先安装python-dev,输入以下指令。

sudo
apt-get install python-dev

2、安装RPi.GPIO,依次输入以下指令。

1)下载:$ wget http://raspberry-gpio-python.googlecode.com/files/RPi.GPIO-0.5.3a.tar.gz

2)解压缩:$ tar xvzf RPi.GPIO-0.5.3a.tar.gz

3)进入解压之后的目录 :$ cd RPi.GPIO-0.5.3a
4)启动安装 :$ sudo python setup.py install

3、例子:

[python] view plain
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
# BOARD编号方式,基于插座引脚编号
GPIO.setmode(GPIO.BOARD)
# 输出模式
GPIO.setup(11, GPIO.OUT)

while True:
GPIO.output(11, GPIO.HIGH)
time.sleep(1)
GPIO.output(11, GPIO.LOW)
time.sleep(1)

4、执行:
sudo python led.py

5、说明:
1)GPIO.setmode(GPIO.BOARD),采用插座引脚编号方式。
2)由于采用插座引脚编号方式,此处的11脚相当于BCM2835寄存器编号方式的引脚11。

python GPIO
1、说明:
WiringPi是应用于树莓派平台的GPIO控制库函数,WiringPi遵守GUN Lv3。wiringPi使用C或者C++开发并且可以被其他语言包转,例如python、ruby或者PHP等。

wiringPi包括一套gpio控制命令,使用gpio命令可以控制树莓派GPIO管脚。用户可以利用gpio命令通过shell脚本控制或查询
GPIO管脚。wiringPi是可以扩展的,可以利用wiringPi的内部模块扩展模拟量输入芯片,可以使用
MCP23x17/MCP23x08(I2C
或者SPI)扩展GPIO接口。另外可通过树莓派上的串口和Atmega(例如arino等)扩展更多的GPIO功能。另外,用户可以自己编写扩展模
块并把自定义的扩展模块集成到wiringPi中。WiringPi支持模拟量的读取和设置功能,不过在树莓派上并没有模拟量设备。但是使用
WiringPi中的软件模块却可以轻松地应用AD或DA芯片。

7. 树莓派主机怎么控制分机执行python程序 anno

先贴最终的源代码:
#!/usr/bin/env python3
from bottle import get,post,run,request,template
@get("/")
def index():
return template("index")
@post("/cmd")
def cmd():
print("按下了按钮: "+request.body.read().decode())
return "OK"
run(host="0.0.0.0")

没错,就10句,我一句一句解释:
1. # !/usr/bin/env python3 ,告诉shell这个文件是Python源代码,让bash调用python3来解释这段代码
2. from bottle import get,post,run,request,template ,从bottle框架导入了我用到的方法、对象
下边几句是定义了2个路由,一个是“/”一个是“/cmd”,前者是get类型(用@get装饰),后者是POST类型(用的@post装饰)
第一个路由很简单,就是读取index模版(模版就是个html啦)并发送到客户端(浏览器),因为路径是“/”也就是比如树莓派的IP地址是:192.168.0.10
那用 就访问到了我们的"/”路由(bottle默认端口是8080)
同理,第二个路由的路径是“/cmd”也就是访问 就访问到了第二个路由
最后一句: run(host = " 0.0.0.0 " )就是调用bottle的run方法,建立一个http服务器,让我们能通过浏览器访问我们的界面。
下边我详细的解释一下这些代码的作用:
第一个路由的作用就是扔给浏览器一个HTML(index.tpl)文档,显示这个界面:

这个文件的源代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>遥控树莓派</title>
<link href="//cdn.bootcss.com/bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" media="screen">
<script src=""></script>
<style type="text/css">
#up {
margin-left: 55px;
margin-bottom: 3px;
}
#down {
margin-top: 3px;
margin-left: 55px;
}
</style>
<script>
$(function(){
$("button").click(function(){
$.post("/cmd",this.id,function(data,status){});
});
});
</script>
</head>
<body>
<div id="container" class="container">
<div>
<button id="up" class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-up"></button>
</div>
<div>
<button id='left' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-left"></button>
<button id='stop' class="btn btn-lg btn-primary glyphicon glyphicon-stop"></button>
<button id='right' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-right"></button>
</div>
<div>
<button id='down' class="btn btn-lg btn-primary glyphicon glyphicon-circle-arrow-down"></button>
</div>
</div>
<script src="//cdn.bootcss.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
</body>
</html>

这个内容有点多,不过很简单,就是引用了jquery bootstrap这两个前端框架,加了5个按钮(<body></body>之间的代码)。当然我用了bootstrap内置的上下左右停止这几个图标,这5个按钮的id分辨定义成up,down,left,right,stop,然后写了如下的关键代码:
$(function(){
$("button").click(function(){
$.post("/cmd",this.id,function(data,status){});
});
});

没错,就这三句代码……
第1,2行给所有的按钮(button)绑定了一个点击的事件,第三行调用jquery的post方法把this.id(被单击按钮的id),发送到“/cmd”这个路径下,这时,我们python代码的第二个路由起作用了,接收到了网页上被单击按钮的id,并打印出了“按下了按钮: XXX”
当然,在这里写几个if语句判断,就可以按照实际的需求做一些实际的控制了,嗯,比如调用wiringpi2 for python控制树莓派的GPIO。
关于使用Python简单的实现树莓派的WEB控制的相关内容就给大家介绍这么多,希望对大家有所帮助!

8. “树莓派3”、“树莓派3b”和“树莓派3b+”有什么区别

型号越新功能越强大,新手入门和型号没关系,基本都一样,库函数wiringPi或者Python都是一样的。

9. 如何用树莓派3+Python+wiringpi生成PWM

材料:树莓派3,wiringpi,电源,HobbyWing电调;
接口:电调的白色线接GPIO21,黑色线接地;
代码:
import wiringpi as wiringpi
from time import sleep;
#from wiringpi import GPIO

wiringpi.wiringPiSetupGpio()
#import wiringpi as wiringpi
wiringpi.pinMode(21,1)
wiringpi.digitalWrite(21,0)
wiringpi.pwmSetClock(2)
W=raw_input("Input 1-200 :")
i=wiringpi.softPwmCreate(21,0,200)
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))
W=raw_input("Input 1-200 :")
wiringpi.softPwmWrite(21,int(W))

while 1:
sleep(30)

print "goodbye"


4.操作
1)先给树莓派上电,运行程序,输入参数20,此时树莓派通过GPIO21输出周期为20ms,脉宽为2ms的方波(相当于油门最大);
2)电调上电,“哔哔”两声后,3秒内将输入输入参数10,此时树莓派通过GPIO21输出周期为20ms,脉宽为1ms的方波(相当于油门最小);
3)油门设定完毕,将参数设定成11,电机开始以较低速度旋转,逐渐提高输入参数,转速随着升高,参数为20时达到最高速。
5.总结
用wiringpi的softPWM,PWM的Clock是固定不变的(100us),而我们需要的PWM周期20ms,softPwmCreate中设置200就好了。问题在于softPwmWrite函数中的参数均为整数,转速10到20可调,也就是共11个档位,对于精确控制不利,后面需要解决这个问题。


0


0

10. 树莓派怎么安装wiringpi库

1.简介wiringPi
wiringPi , 安装好这个库后可以直接 调用函数配置和控制GPIO功能

下图中左边是wiringPi封装好后的引脚,右边是树莓派本身的引脚(bcm2835库也使用它)

还有一张图可以参考:

2.树莓派中安装wiringPi方法:
mkdir temp
cd temp
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xf wiringPi.tgz
cd wiringPi/wiringPi/
make
make install
测试LED的程序:#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>

int main (int argc,char* argv[])
{
if (argc < 2) {
printf("Usage example: ./led 4 \n");
return 1;
}
int pinNumber = atoi(argv[1]);

if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
return 1;
}

pinMode(pinNumber, OUTPUT); // set mode to output
while(1) {
digitalWrite(pinNumber, 1); // output a high level
delay(800);
digitalWrite(pinNumber, 0); // output a low level
delay(800);
}

return 0;
}

3.相关问题
使用wiringPi的程序进行测试编译时出现了如下问题:
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_byte'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_byte'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_byte_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_write_word_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_word_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../ libwiringPi.so: undefined reference to `i2c_smbus_read_byte_data'
collect2: ld returned 1 exit status
网上少个相关资料,发现 是少装了库的原因:
需要安装这几个库: i2c-tools, libi2c-dev ,python-smbus

执行命令 sudo apt-get install libi2c-dev ,会自动安装这三个。
然后重新编译就可以了。
make clean
sudo make uninstall
make
sudo make install
之后就能正常编译了,别忘了最后要加连接动态库的选项 -l wiringPi 。

阅读全文

与pythonwiringpi2相关的资料

热点内容
php如何选中相同的进行修改 浏览:623
工行app个人怎么给企业账户转账 浏览:149
汇编与程序员 浏览:666
压缩包解码器下载 浏览:130
爱旅行的预备程序员 浏览:111
安卓qq浏览器怎么转换到ios 浏览:292
不同编译器的库可以调用吗 浏览:455
灰度信托基金加密 浏览:421
宿迁程序员兼职网上接单 浏览:924
电视编译器怎么设置 浏览:276
手机如何解压汉字密码的压缩包 浏览:701
为什么很多程序员爱用vim 浏览:828
安卓手机怎么连接宝华韦健音响 浏览:555
12星座制作解压球 浏览:867
java调用oracle数据 浏览:827
怎么在服务器上上传小程序源码 浏览:304
空中加油通达信指标公式源码 浏览:38
分卷解压只解压了一部分 浏览:760
php网站自动登录 浏览:705
合肥凌达压缩机招聘 浏览:965