導航:首頁 > 編程語言 > 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相關的資料

熱點內容
加密歐美航線 瀏覽:48
svn怎麼看伺服器的地址 瀏覽:187
騎馬與砍殺1命令部隊用盾牌 瀏覽:595
光纜pdf 瀏覽:350
加密流量實時監測 瀏覽:628
360壓縮和好壓哪個好 瀏覽:61
python判斷變數是否為list 瀏覽:906
雲伺服器1m帶寬表示什麼意思 瀏覽:702
429升冷櫃用多大壓縮機 瀏覽:116
決策樹演算法java實現 瀏覽:376
androidtv開發焦點控制 瀏覽:328
論人的成長pdf 瀏覽:282
python網站源代碼 瀏覽:827
手機文件壓縮器怎麼安裝 瀏覽:112
androidsdk封裝 瀏覽:266
微信加密不知道怎麼取消 瀏覽:705
分析演算法設計程序編寫 瀏覽:843
linux啟動dhcp失敗 瀏覽:356
芙蓉出水選股公式源碼 瀏覽:763
linux更改密碼錯誤 瀏覽:244