在本教程的帶領下,你將在十分鐘內學會在PYNQ-Z2板卡上使用傳感器和LED開發自己的IoT應用!
初始化板卡
from pynq.overlays.base import BaseOverlay
base = BaseOverlay("base.bit")
初始化LED Bar
Grove LED bar上有10個LED燈,8個綠色的LED,一個橘黃色的LED和一個紅色的LED。每個LED的亮度都可以獨立被控制。我們將會在Z2板卡上外接一塊Arduino Shield擴展板,LED bar連接在擴展板的D6接口上。
from pynq.lib.arduino import Grove_LEDbar
from pynq.lib.arduino import ARDUINO_GROVE_G4
# Instantiate Grove LED Bar on Arduino shield G4
ledbar = Grove_LEDbar(base.ARDUINO, ARDUINO_GROVE_G4)
ledbar.reset()
初始化超聲波傳感器
Pmod-grove擴展板連接在PMODA接口上,超聲波傳感器連接Pmod-Grove轉接器的G1接口上的
%%microblaze base.PMODA
#include "xparameters.h"
#include "xtmrctr.h"
#include "gpio.h"
#include "timer.h"
#include
#define TCSR0 0x00
#define TLR0 0x04
#define TCR0 0x08
#define TCSR1 0x10
#define TLR1 0x14
#define TCR1 0x18
#define MAX_COUNT 0xFFFFFFFF
void create_10us_pulse(gpio usranger){
gpio_set_direction(usranger, GPIO_OUT);
gpio_write(usranger, 0);
delay_us(2);
gpio_write(usranger, 1);
delay_us(10);
gpio_write(usranger, 0);
}
void configure_as_input(gpio usranger){
gpio_set_direction(usranger, GPIO_IN);
}
unsigned int capture_duration(gpio usranger){
unsigned int count1, count2;
count1=0;
count2=0;
XTmrCtr_WriteReg(XPAR_TMRCTR_0_BASEADDR, 0, TLR0, 0x0);
XTmrCtr_WriteReg(XPAR_TMRCTR_0_BASEADDR, 0, TCSR0, 0x190);
while(!gpio_read(usranger));
count1=XTmrCtr_ReadReg(XPAR_TMRCTR_0_BASEADDR, 0, TCR0);
while(gpio_read(usranger));
count2=XTmrCtr_ReadReg(XPAR_TMRCTR_0_BASEADDR, 0, TCR0);
if(count2 > count1) {
return (count2 - count1);
} else {
return((MAX_COUNT - count1) + count2);
}
}
unsigned int read_raw(){
gpio usranger;
usranger = gpio_open(PMOD_G1_A);
create_10us_pulse(usranger);
configure_as_input(usranger);
return capture_duration(usranger);
}
使用python即可調用超聲波傳感器
from pynq import Clocks
def read_distance_cm():
raw_value = read_raw()
clk_period_ns = int(1000 / Clocks.fclk0_mhz)
num_microseconds = raw_value * clk_period_ns * 0.001
if num_microseconds * 0.001 > 30:
return 500
else:
return num_microseconds/58
案例展示:超聲波測距儀
靠近測距儀50cm以內,LED每近5cm多亮一格
按BTN3結束
import time
import math
btns = [base.buttons[index] for index in range(4)]
ledbar.reset()
done = False
while not done:
if (btns[3].read()==1):
ledbar.reset()
done = True
distance = read_distance_cm()
if distance ledbar.write_level(10-math.floor(distance/5), 3, 1)
else:
ledbar.write_level(0, 3, 1)
time.sleep(0.1)
編輯:hfy
-
led
+關注
關注
242文章
23756瀏覽量
671572 -
IOT
+關注
關注
187文章
4292瀏覽量
200904
發布評論請先 登錄
10分鐘上手睿擎平臺GUI開發:第一個LVGL圖形應用

在IDE中運行固件內自帶的AI程序,約2分鐘左右就死機了,為什么?
10分鐘上手寫代碼,LuatOS協程輕松掌握!

調試TVP7002(VGA接口)芯片,十分燙手是怎么回事?
飛凌嵌入式ElfBoard ELF 1板卡-Linux內核移植之內核簡介
基于PYNQ和機器學習探索MPSOC筆記

冷機啟動板卡時,LMX2572鎖定時間在2分鐘以上,為什么?
無人機的發展十分火熱在哪些領域都有所應用
《DNK210使用指南 -CanMV版 V1.0》第十章 板卡信息實驗
INA122U如何讓上電就能在短時間讓ADC采集值趨于穩定?
三十分鐘入門基礎Go Java小子版

評論