第1步:您需要什么
Rapberry Pi 3-可从RS Components获得。
RPi3内置了蓝牙无线电。您也许可以将其与RPi的早期版本和蓝牙加密狗配合使用,但我没有尝试过。
用于RPi的microSD卡
监视器,键盘和鼠标(仅用于RPi的初始设置)
一个Google帐户。
像这样的小型显示器。 (可选)
10芯带状电缆,40针和10针接头连接器插座等,用于将显示器连接到RPi GPIO接头(可选)
第2步:设置Raspberry Pi操作系统
由于在https://www上已经有很多howtos,因此我将不涉及设置raspberry pi SD卡的细节。 raspberrypi.org。下载最新版本的Raspbian,并使用Win32 Disk Imager(Windows)或dd(linux)等软件包对SD卡进行映像。插入电源,将显示器,键盘和鼠标连接到RPi并打开电源。将其启动到桌面后,使用WiFi或直接将其插入网络集线器将其连接到本地网络。
打开终端外壳,并使用pi更新pi上的软件存储库信息。以下命令:
sudo apt-get update -y
然后使用
sudo apt-get upgrade -y
和
sudo apt-get dist-upgrade -y将pi上的所有软件升级到最新版本
最后,确保已安装所有必需的蓝牙和python软件
sudo apt-get install bluez python-bluez python-requests python-pygame python-rpi.gpio -y
步骤3:检查Pi是否可以看到倾斜的IBeacon
将倾斜式比重计放在一杯水中或倾斜一定角度以将其打开并在终端中发出以下命令。
sudo hcitool lescan
当您看到倾斜的地址和名称弹出时,请按ctrl + c停止扫描。 12位十六进制数字是倾斜的蓝牙地址。它就像是用于网络设备的MAC地址,但用于蓝牙。
如果未出现,则表示不正确。检查Tilt的电池状态,并且它实际上已经打开(当倾斜度从垂直位置移动到倾斜位置时,LED应当闪烁)。倾斜到垂直位置时,需要20到30秒才能进入睡眠模式。尝试使用Android或IOS设备连接到Tilt。如果Tilt正常,则RPi一定有问题。仔细检查是否已安装所有必需的蓝牙软件。
步骤4:设置Python代码
这是我第一次完成任何操作Python除了运行别人开发的奇怪脚本外,还可以运行。这是一种很棒的高级解释器语言,看起来非常直观。并不是说我立即成为超级黑客,但是我可以让它做我想让它相对容易地做的事情。希望新手能够轻松浏览我的代码,知道自己在做什么的家伙不会太笑了。
要使此代码正常工作,您需要安装Google表格并如Tilt Hydrometer的人员在此博客文章中所述,作为Web应用程序进行了部署。将blescan.py和tiltV1.py复制到RPi上的同一目录(我与/home/pi/tilt一起使用),导航到该目录,然后使用文本编辑器(如文本编辑器)将表格Web部署应用程序的URL复制到纳米或gedit。使用
sudo python tiltV1.py
代码执行代码:
import blescan
import sys
import requests
import datetime
import time
import bluetooth._bluetooth as bluez
import pygame
import os
#Assign uuid‘s of various colour tilt hydrometers. BLE devices like the tilt work primarily using advertisements.
#The first section of any advertisement is the universally unique identifier. Tilt uses a particular identifier based on the colour of the device
red = ’a495bb10c5b14b44b5121370f02d74de‘
green = ’a495bb20c5b14b44b5121370f02d74de‘
black = ’a495bb30c5b14b44b5121370f02d74de‘
purple = ’a495bb40c5b14b44b5121370f02d74de‘
orange = ’a495bb50c5b14b44b5121370f02d74de‘
blue = ’a495bb60c5b14b44b5121370f02d74de‘
yellow = ’a495bb70c5b14b44b5121370f02d74de‘
pink = ’a495bb80c5b14b44b5121370f02d74de‘
#The default device for bluetooth scan. If you’re using a bluetooth dongle you may have to change this.
dev_id = 0
#function to calculate the number of days since epoch (used by google sheets)
#In python time.time() gives number of seconds since epoch (Jan 1 1970)。
#Google Sheets datetime as a number is the number of days since the epoch except their epoch date is Jan 1 1900
def sheetsDate(date1):
temp = datetime.datetime(1899, 12, 30)
delta=date1-temp
return float(delta.days) + (float(delta.seconds) / 86400)#scan BLE advertisements until we see one matching our tilt uuid
def getdata():
try:
sock = bluez.hci_open_dev(dev_id)
except:
print “error accessing bluetooth device.。。”
sys.exit(1)
blescan.hci_le_set_scan_parameters(sock)
blescan.hci_enable_le_scan(sock)
gotData = 0
while (gotData == 0):
returnedList = blescan.parse_events(sock, 10)
for beacon in returnedList: #returnedList is a list datatype of string datatypes seperated by commas (,)
output = beacon.split(‘,’) #split the list into individual strings in an array
if output[1] == black: #Change this to the colour of you tilt
tempf = float(output[2]) #convert the string for the temperature to a float type
gotData = 1
tiltTime = sheetsDate(datetime.datetime.now())
tiltSG = float(output[3])/1000
tiltTemp = tempf
tiltColour = ‘BLACK’
tiltBeer = ‘test’ #Change to an identifier of a particular brew
#assign values to a dictionary variable for the http POST to google sheet
data= {
‘Time’: tiltTime,
‘SG’: tiltSG,
‘Temp’: tiltTemp,
‘Color’: tiltColour,
‘Beer’: tiltBeer,
‘Comment’: “”
}
blescan.hci_disable_le_scan(sock)
return data
def main():
global screen
updateSecs = 600 #time in seconds between updating the google sheet
timestamp = time.time() #Set time for beginning of loop
updateTime = timestamp + updateSecs #Set the time for the next update to google sheets
while True:
data = getdata()
if time.time() 》 updateTime: #if we‘ve reached the update time then do a POST to the google sheet and reset the updateTime
r = requests.post(’https://the.address.of.your.google.sheets.script/exec‘, data) #Change this to the address of your google sheet script
#print r.text
updateTime = updateTime + updateSecs
if __name__ == “__main__”: #dont run this as a module
main()
我建议您在测试时减少’updateSecs‘变量的时间,无需等待片刻的更新。尝试将奇数打印(变量)也放入代码中,这样您就可以看到发生了什么事
步骤5:添加本地显示
“太好了”,我听你说,“但是如果我没有网络可以连接,那就太好了!”。是的,是的。我在介绍中提到的LAMP服务器安排将是一个很好的理由。另一种可能性是增加一个小的TFT显示屏,让您知道发生了什么。我使用了从我当地的Jaycar购买的Freetronics 128x128像素OLED显示器,价格约为20澳元。我按照这里的说明将其连接到Raspberry Pi上的GPIO接头,然后按照说明在此处安装由Notro开发的fbtft模块。
就我而言,我必须在目录/etc/modules-load.d/中添加一个名为fbtft.conf的文件:
sudo nano /etc/modules-load.d/fbtft.conf
,并添加以下几行
spi-bcm2835
fbtft_device
(在nano中按CTRL + x保存并退出)
然后将一个名为fbtft.conf的文件添加到/etc/modprobe.d/:
sudo nano /etc/modprobe.d/fbtft.conf
,并在其中添加以下几行
options fbtft_device name=freetronicsoled128
最后,最重要的是在“主界面”-》“首选项”-》“ Raspberry Pi配置”中’标签,启用SPI接口。重新启动,如果一切正常,将有另一个帧缓冲区fb1。通过发出以下命令进行检查:
ls /dev | grep fb
响应应为:
fb0
fb1
fb0是pi的HDMI输出。
《这些小屏幕很容易烧坏,所以我想建立一个函数使屏幕进入睡眠状态并有一个按钮将其唤醒。该显示器在显示器的“机翼”上带有两个按钮。我将它们以下拉配置连接到GPIO17和GPIO27。上面的电路图。
步骤6:使用Pygame开发显示器
一旦硬件就位并且操作系统能够识别显示器,我们就可以修改Python代码以使用Pygame合并屏幕。在这种情况下,我将修改SDL Environment变量以直接写入Freetronics显示器的帧缓冲区。希望代码中的行注释可以说明发生了什么。
与上次相同,将tiltV2.py模块复制到与blescan.py相同的目录中,并使用以下命令执行程序:
sudo python tiltV2.py
需要注意的几件事。如果您没有连接几个按钮,则没有办法退出该程序,除非将RPi上的插头拔出或将其推入一个单独的控制台并终止进程或重新启动。同样,一旦进入睡眠状态,将无法唤醒屏幕。您可以使用Pygame来监视键盘事件。我确定代码在那里。
Anywho,就是这样。也许这不是一个超级优雅的解决方案,我还没有考虑到校准点的编码,但是它可以工作,并且是新的android设备的廉价替代品。
-
树莓派
+关注
关注
116文章
1707浏览量
105660
发布评论请先 登录
相关推荐
评论