中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

東莞seo網(wǎng)站優(yōu)化產(chǎn)品宣傳方式有哪些

東莞seo網(wǎng)站優(yōu)化,產(chǎn)品宣傳方式有哪些,wordpress做社區(qū) 商城,南京做網(wǎng)站南京樂識(shí)好前言 經(jīng)過上一篇文章的解說,相信大家都應(yīng)該都可以掌握樹莓派的安裝和基本的使用,然而要玩轉(zhuǎn)樹莓派,單單靠幾條命令是不夠。其中,對(duì)于GPIO的操作就是極其重要的。這篇文章介紹樹莓派的GPIO,以及用python操作GPIO來實(shí)現(xiàn)一…

前言

經(jīng)過上一篇文章的解說,相信大家都應(yīng)該都可以掌握樹莓派的安裝和基本的使用,然而要玩轉(zhuǎn)樹莓派,單單靠幾條命令是不夠。其中,對(duì)于GPIO的操作就是極其重要的。這篇文章介紹樹莓派的GPIO,以及用python操作GPIO來實(shí)現(xiàn)一些輸出輸入。

GPIO基本介紹

GPIO(General Purpose I/O Ports)意思為通用輸入/輸出端口,通俗地說,就是一些引腳,可以通過它們輸出高低電平或者通過它們讀入引腳的狀態(tài)-是高電平或是低電平。GPIO是個(gè)比較重要的概念,用戶可以通過GPIO口和硬件進(jìn)行數(shù)據(jù)交互(如UART),控制硬件工作(如LED、蜂鳴器等),讀取硬件的工作狀態(tài)信號(hào)(如中斷信號(hào))等。GPIO口的使用非常廣泛。掌握了GPIO,差不多相當(dāng)于掌握了操作硬件的能力。

現(xiàn)在,我們先看看樹莓派上的GPIO是怎么樣的:


網(wǎng)上找來的

右上角的詳細(xì)圖:


我們重點(diǎn)看第二張?jiān)敿?xì)圖。這張圖上可以看到,每一個(gè)針腳都有Pin#和NAME字段。Pin代表的是該針腳的編號(hào),其中01和02針腳對(duì)應(yīng)第一張圖中GPIO最右邊豎排的兩個(gè)針腳。而NAME代表的是該針腳的BCM名稱,當(dāng)然NAME也可以直接看得出針腳的默認(rèn)功能。比如 3.3v和5v代表著該針腳會(huì)輸出3.3v和5v的電壓,Ground代表著該針腳是接地的,GPIO0*則是一些待用戶開發(fā)的針腳。每個(gè)針腳都可以使用程序進(jìn)行控制操作。

控制GPIO

想用python來控制GPIO,最便捷的辦法就是使用一些python類庫,比如樹莓派系統(tǒng)本身集成的RPi.GPIO。本文詳細(xì)介紹如何使用RPi.GPIO來控制GPIO。

導(dǎo)入RPi.GPIO模塊

可以用下面的代碼導(dǎo)入RPi.GPIO模塊。

import RPi.GPIO as GPIO

引入之后,就可以使用GPIO模塊的函數(shù)了。如果你想檢查模塊是否引入成功,也可以這樣寫:

try:import RPi.GPIO as GPIO
except RuntimeError:print("引入錯(cuò)誤")

針腳編號(hào)

在RPi.GPIO中,同時(shí)支持樹莓派上的兩種GPIO引腳編號(hào)。第一種編號(hào)是BOARD編號(hào),這和樹莓派電路板上的物理引腳編號(hào)相對(duì)應(yīng)。使用這種編號(hào)的好處是,你的硬件將是一直可以使用的,不用擔(dān)心樹莓派的版本問題。因此,在電路板升級(jí)后,你不需要重寫連接器或代碼。

第二種編號(hào)是BCM規(guī)則,是更底層的工作方式,它和Broadcom的片上系統(tǒng)中信道編號(hào)相對(duì)應(yīng)。在使用一個(gè)引腳時(shí),你需要查找信道號(hào)和物理引腳編號(hào)之間的對(duì)應(yīng)規(guī)則。對(duì)于不同的樹莓派版本,編寫的腳本文件也可能是無法通用的。

你可以使用下列代碼(強(qiáng)制的)指定一種編號(hào)規(guī)則:

GPIO.setmode(GPIO.BOARD)# or
GPIO.setmode(GPIO.BCM)

下面代碼將返回被設(shè)置的編號(hào)規(guī)則

mode = GPIO.getmode()

警告

如果RPi.GRIO檢測(cè)到一個(gè)引腳已經(jīng)被設(shè)置成了非默認(rèn)值,那么你將看到一個(gè)警告信息。你可以通過下列代碼禁用警告:

GPIO.setwarnings(False)

引腳設(shè)置

在使用一個(gè)引腳前,你需要設(shè)置這些引腳作為輸入還是輸出。配置一個(gè)引腳的代碼如下:

# 將引腳設(shè)置為輸入模式
GPIO.setup(channel, GPIO.IN)# 將引腳設(shè)置為輸出模式
GPIO.setup(channel, GPIO.OUT)# 為輸出的引腳設(shè)置默認(rèn)值
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

釋放

一般來說,程序到達(dá)最后都需要釋放資源,這個(gè)好習(xí)慣可以避免偶然損壞樹莓派。釋放腳本中的使用的引腳:

GPIO.cleanup()

注意,GPIO.cleanup()只會(huì)釋放掉腳本中使用的GPIO引腳,并會(huì)清除設(shè)置的引腳編號(hào)規(guī)則。

輸出

要想點(diǎn)亮一個(gè)LED燈,或者驅(qū)動(dòng)某個(gè)設(shè)備,都需要給電流和電壓他們,這個(gè)步驟也很簡(jiǎn)單,設(shè)置引腳的輸出狀態(tài)就可以了,代碼如下:

GPIO.output(channel, state)

狀態(tài)可以設(shè)置為0 / GPIO.LOW / False / 1 / GPIO.HIGH / True。如果編碼規(guī)則為,GPIO.BOARD,那么channel就是對(duì)應(yīng)引腳的數(shù)字。

如果想一次性設(shè)置多個(gè)引腳,可使用下面的代碼:

chan_list = [11,12]
GPIO.output(chan_list, GPIO.LOW)
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))

你還可以使用Input()函數(shù)讀取一個(gè)輸出引腳的狀態(tài)并將其作為輸出值,例如:

GPIO.output(12, not GPIO.input(12))

讀取

我們也常常需要讀取引腳的輸入狀態(tài),獲取引腳輸入狀態(tài)如下代碼:

GPIO.input(channel)

低電平返回0 / GPIO.LOW / False,高電平返回1 / GPIO.HIGH / True。

如果輸入引腳處于懸空狀態(tài),引腳的值將是漂動(dòng)的。換句話說,讀取到的值是未知的,因?yàn)樗]有被連接到任何的信號(hào)上,直到按下一個(gè)按鈕或開關(guān)。由于干擾的影響,輸入的值可能會(huì)反復(fù)的變化。
使用如下代碼可以解決問題:

GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

需要注意的是,上面的讀取代碼只是獲取當(dāng)前一瞬間的引腳輸入信號(hào)。

如果需要實(shí)時(shí)監(jiān)控引腳的狀態(tài)變化,可以有兩種辦法。最簡(jiǎn)單原始的方式是每隔一段時(shí)間檢查輸入的信號(hào)值,這種方式被稱為輪詢。如果你的程序讀取的時(shí)機(jī)錯(cuò)誤,則很可能會(huì)丟失輸入信號(hào)。輪詢是在循環(huán)中執(zhí)行的,這種方式比較占用處理器資源。另一種響應(yīng)GPIO輸入的方式是使用中斷(邊緣檢測(cè)),這里的邊緣是指信號(hào)從高到低的變換(下降沿)或從低到高的變換(上升沿)。

輪詢方式
while GPIO.input(channel) == GPIO.LOW:time.sleep(0.01)  # wait 10 ms to give CPU chance to do other things
邊緣檢測(cè)

邊緣是指信號(hào)狀態(tài)的改變,從低到高(上升沿)或從高到低(下降沿)。通常情況下,我們更關(guān)心于輸入狀態(tài)的該邊而不是輸入信號(hào)的值。這種狀態(tài)的該邊被稱為事件。
先介紹兩個(gè)函數(shù):

  • wait_for_edge() 函數(shù)。
    wait_for_edge()被用于阻止程序的繼續(xù)執(zhí)行,直到檢測(cè)到一個(gè)邊沿。也就是說,上文中等待按鈕按下的實(shí)例可以改寫為:
    channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)
    if channel is None:print('Timeout occurred')
    else:print('Edge detected on channel', channel)
  • add_event_detect() 函數(shù)
    該函數(shù)對(duì)一個(gè)引腳進(jìn)行監(jiān)聽,一旦引腳輸入狀態(tài)發(fā)生了改變,調(diào)用event_detected()函數(shù)會(huì)返回true,如下代碼:
    GPIO.add_event_detect(channel, GPIO.RISING)  # add rising edge detection on a channel
    do_something()
    // 下面的代碼放在一個(gè)線程循環(huán)執(zhí)行。
    if GPIO.event_detected(channel):print('Button pressed')
    上面的代碼需要自己新建一個(gè)線程去循環(huán)檢測(cè)event_detected()的值,還算是比較麻煩的。

不過可采用另一種辦法輕松檢測(cè)狀態(tài),這種方式是直接傳入一個(gè)回調(diào)函數(shù):

def my_callback(channel):print('This is a edge event callback function!')print('Edge detected on channel %s'%channel)print('This is run in a different thread to your main program')GPIO.add_event_detect(channel, GPIO.RISING, callback=my_callback)

如果你想設(shè)置多個(gè)回調(diào)函數(shù),可以這樣:

def my_callback_one(channel):print('Callback one')def my_callback_two(channel):print('Callback two')GPIO.add_event_detect(channel, GPIO.RISING)
GPIO.add_event_callback(channel, my_callback_one)
GPIO.add_event_callback(channel, my_callback_two)

注意:回調(diào)觸發(fā)時(shí),并不會(huì)同時(shí)執(zhí)行回調(diào)函數(shù),而是根據(jù)設(shè)置的順序調(diào)用它們。

綜合例子:點(diǎn)亮LED燈

好了,上面說明了一大堆函數(shù)庫的用法,那么現(xiàn)在就應(yīng)該來個(gè)簡(jiǎn)單的實(shí)驗(yàn)了。這個(gè)實(shí)驗(yàn)很簡(jiǎn)單,點(diǎn)亮一個(gè)LED燈。

  • 編寫代碼之前,首先你需要將led燈的針腳通過杜邦線連接到樹莓派的引腳上,比如你可以連接到11號(hào)引腳。
  • 新建一個(gè)main.py文件,寫入如下代碼:
import RPi.GPIO as GPIO  //引入函數(shù)庫
import timeRPi.GPIO.setmode(GPIO.BOARD)  //設(shè)置引腳編號(hào)規(guī)則
RPi.GPIO.setup(11, RPi.GPIO.OUT)    //將11號(hào)引腳設(shè)置成輸出模式while TrueGPIO.output(channel, 1)   //將引腳的狀態(tài)設(shè)置為高電平,此時(shí)LED亮了time.sleep(1)   //程序休眠1秒鐘,讓LED亮1秒GPIO.output(channel, 0)   //將引腳狀態(tài)設(shè)置為低電平,此時(shí)LED滅了time.sleep(1)   //程序休眠1秒鐘,讓LED滅1秒GPIO.cleanup()    //程序的最后別忘記清除所有資源
  • 保存,并退出文件。執(zhí)行python3 main.py,即可觀看效果。Ctrl+C可以關(guān)閉程序。
  • 此外,不妨也試試其它的函數(shù)吧,增強(qiáng)印象。

使用PWM

這個(gè)python函數(shù)庫還支持PWM模式的輸出,我們可以利用PWM來制作呼吸燈效果。詳情看代碼:

import time
import RPi.GPIO as GPIO   //引入庫
GPIO.setmode(GPIO.BOARD)  //設(shè)置編號(hào)方式
GPIO.setup(12, GPIO.OUT)  //設(shè)置12號(hào)引腳為輸出模式p = GPIO.PWM(12, 50)  //將12號(hào)引腳初始化為PWM實(shí)例 ,頻率為50Hz
p.start(0)    //開始脈寬調(diào)制,參數(shù)范圍為: (0.0 <= dc <= 100.0)
try:while 1:for dc in range(0, 101, 5):p.ChangeDutyCycle(dc)   //修改占空比 參數(shù)范圍為: (0.0 <= dc <= 100.0)time.sleep(0.1)for dc in range(100, -1, -5):p.ChangeDutyCycle(dc)time.sleep(0.1)
except KeyboardInterrupt:pass
p.stop()    //停止輸出PWM波
GPIO.cleanup()    //清除

結(jié)語

在文中,主要講解了GPIO的概念,以及如何使用python操作GPIO。如果有條件,建議大家多動(dòng)動(dòng)手,你會(huì)收獲不少滿足感。我也是初學(xué)者,如果你有任何問題,大家一起探討學(xué)習(xí)。
本文參考文檔:https://sourceforge.net/p/raspberry-gpio-python/wiki/

http://www.risenshineclean.com/news/51951.html

相關(guān)文章:

  • 網(wǎng)站做淘寶推廣收入優(yōu)化營商環(huán)境條例心得體會(huì)
  • 網(wǎng)站建設(shè)問題運(yùn)營推廣計(jì)劃
  • 大航母網(wǎng)站建設(shè)與服務(wù)山西seo排名廠家
  • 微信做網(wǎng)站的弊端百度一下百度搜索
  • 網(wǎng)站優(yōu)化檢測(cè)百度網(wǎng)頁推廣怎么做
  • 三河市城鄉(xiāng)建設(shè)局網(wǎng)站淘寶指數(shù)查詢?nèi)肟?/a>
  • 百度容易收錄的網(wǎng)站黃頁引流推廣網(wǎng)站軟件免費(fèi)
  • 建設(shè)局網(wǎng)站策劃書培訓(xùn)網(wǎng)站排名
  • adobe illustrator做網(wǎng)站網(wǎng)站服務(wù)器
  • 沒有公司 接單做網(wǎng)站寧波seo營銷平臺(tái)
  • wordpress 插件代碼seo教程培訓(xùn)
  • 好的高端網(wǎng)站長沙seo報(bào)價(jià)
  • 白山建設(shè)局網(wǎng)站游戲優(yōu)化軟件
  • 服務(wù)好的專業(yè)建站公司seo網(wǎng)站是什么意思
  • 北京旅游網(wǎng)站建設(shè)推推蛙貼吧優(yōu)化
  • 阿克蘇網(wǎng)站建設(shè)正在播網(wǎng)球比賽直播
  • 怎樣加盟網(wǎng)站建設(shè)鄭州有沒有厲害的seo
  • 用dw做網(wǎng)站怎么換行最新消息
  • 濰坊網(wǎng)站建設(shè)哪家好市場(chǎng)調(diào)研報(bào)告范文大全
  • 做冰淇淋生意網(wǎng)站企業(yè)查詢系統(tǒng)
  • 湘潭網(wǎng)站建設(shè)是什么營銷網(wǎng)站建設(shè)流程
  • 網(wǎng)站中文域名好嗎職業(yè)培訓(xùn)機(jī)構(gòu)有哪些
  • 什么網(wǎng)站可以發(fā)布信息百度推廣效果怎么樣
  • 磐石網(wǎng)站seo站外推廣方式
  • app小程序網(wǎng)站開發(fā)是什么免費(fèi)建一級(jí)域名網(wǎng)站
  • 手機(jī)wordpress建站教程野狼seo團(tuán)隊(duì)
  • 網(wǎng)站規(guī)劃的流程網(wǎng)絡(luò)廣告一般是怎么收費(fèi)
  • c2c的盈利模式seo優(yōu)化標(biāo)題 關(guān)鍵詞
  • 鄭州天梯網(wǎng)站制作青島網(wǎng)絡(luò)推廣公司哪家好
  • 網(wǎng)站關(guān)鍵詞沒被搜出來互聯(lián)網(wǎng)營銷師課程