自己9月份做的一个项目
弊端:
近场无线通信:蓝牙
1.经典蓝牙
2.BLE蓝牙
读文件即可:/sys/class/thermal/thermal_zone0/temp
贴源码:
# 打开文件
file = open("/sys/class/thermal/thermal_zone0/temp")
# 读取结果,并转换为浮点数
temp = float(file.read()) / 1000
# 关闭文件
file.close()
# 向控制台打印
print ("temp : %.1f" %temp)
1.中国移动物联网开放平台OneNET:
http://open.iot.10086.cn
2.创建一个产品,产品下面接入设备,每个设备可以设置多个数据流。
这里创建1个数据流:cputemp.
创建后,记下设备ID,是7位数字,还有APIkey,相当于接入密钥。
3.然后参考移动云的官方示例:
4.在Raspberry Pi上编写访问云平台的代码(iot10086.py):
# -*- coding: utf-8 -*-
import requests
import json
#接入类:中国移动物联网开放平台http://open.iot.10086.cn/
class Iot10086(object):
#api-key
apikey =''
#apiurl只能精确到项目----设备,设备下的datastream在set_data时指定
apiurl=''
def __init__(self,apikey,apiurl):
self.apikey = apikey
self.apiurl = apiurl
self.apiheaders={'api-key':apikey}
#设置传感器
def set_data(self,datastream,value):
apiurl_set = self.apiurl + '?type=3'
payload={datastream:str(value)}
r=requests.post(apiurl_set, headers=self.apiheaders, data=json.dumps(payload), timeout=30)
return r.status_code
#获取传感器数值(返回dict)
def get_data(self,datastream):
apiurl_get = self.apiurl + '?datastream_id=' + datastream
r=requests.get(apiurl_get, headers=self.apiheaders, timeout=20)
if r.status_code == 200:
return json.loads(r.text)
else:
return r.status_code
注:
1、json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
2、json.dump()和json.load()主要用来读写json文件函数
5.调用iot10086.py上传数据(main_iot10086.py)
6.执行后结果:
首先来直观地认识树莓派提供的 40 个引脚(GPIO,general purpose i/o,接收外界输入,并向外界提供运算处理后的输出):
注意GPIO.BOARD和GPIO.BCM的区别。以上图举例,比如pin12(GPIO18),在GPIO.BOARD模式下为12,在GPIO.BCM模式下为18.
废话不多说,直接看代码,很简单。
代码中的dict参考移动云的官方示例:
假如目前想专注于开发硬件,不关心服务器,可以用onenet平台来当做服务器。Onenet的使用方法在之前上传温度那里就总结过,这里不再赘述。今天重点讲一下微信小程序的开发,碰过的坑。
https://developers.weixin.qq.com/miniprogram/dev/index.html?t=18101214
可以快速开始一个简单项目。
OK了, 改成https,还没完,接下来需要在微信平台上的设置—开发管理里面,配置好服务器域名。
然后,在开发工具中的详情—域名中更新,然后编译即可。
值得一提的是,手机端仍不能访问的话,耐心等待10几分钟,我就等了10分钟左右才能用。
源码:
ClickOn: function () {
if (app.globalData.userInfo.nickName != '李行')
return;
var that=this;
this.setData({ motto: "wait..." });
wx.request({
url: 'https://api.heclouds.com/devices/41144620/datapoints?type=3',
header:{
'api-key': 'ng88rqRmXwGltEvtWx08Gj3k6yw='
},
method:"POST",
data:{
'led_pi':'1'
},
success: function (res) {
// 操作json数据
//console.log(res.statusCode);
if(res.statusCode==200)
that.setData({ motto: "led on" })
else
that.setData({ motto: "404 not found" })
}
})
},
蓝牙通信细分为两种:经典蓝牙和低功耗蓝牙。早期的蓝牙通信方式称为经典蓝牙(classic bluetooth)。经典蓝牙中的数据传输协议是串行仿真协议RFCOMM,蓝牙串行端口基于RFCOMM协议,能在蓝牙设备之间创建串口进行数据传输。RFCOMM仿真了常见的串口连接,数据从一端输入,从另一端取出。经典蓝牙的开发非常简单,基于串口开发的有线键鼠程序,就可以直接用于RFCOMM连接的无线键鼠。此外,经典蓝牙可以快速传输数据。
经典蓝牙的缺点是比较耗电。后来,诺基亚发明了一种可以降低功耗的蓝牙通信方式。2010年出台的蓝牙4.0把这种通信方式规范为“低功耗蓝牙”(BLE,Bluetooth Low Energy)。BLE把通信双方分为非对称的双方,尽量让其中的一方承担主要的开销,减少另一方的负担。举例来说,手环电量少,而且需要长时间待机。BLE通信的主要负担可以放在电量较充裕且充电方便的手机一侧,从而减少手环的能耗。
1.经典蓝牙控制树莓派
sudo apt-get update
sudo apt-get install bluez minicom
sudo apt-get install bluez-utils
修改文件
sudo vim /etc/systemd/system/dbus-org.bluez.service
在ExecStart =行的末尾添加-C,以“兼容性”模式启动蓝牙守护程序。
添加ExecStartPost = / usr / bin / sdptool在该行之后立即添加SP,以添加SP配置文件。
如下所示:
ExecStart=/usr/lib/bluetooth/bluetoothd -C
ExecStartPost=/usr/bin/sdptool add SP
sudo rfcomm watch hci0
./ bluetooth-server.py
bluetoothctl discoverable yes
此时手机可通过SPP助手软件与树莓派进行通信,执行相应的指令。我们可以自己写一个获取eth0的IP地址的程序:
然后编译成可执行文件ipaddr,再将可执行文件拷贝到/usr/bin目录中。这样你在终端就有自己的命令了。之后你就可以通过蓝牙SPP助手获取你想要的信息了。
手机结果:
PC也可以通过蓝牙和串口调试助手与树莓派进行通信。
2.BLE通信
与iPhone手机进行了通信….安卓的ble和树莓派的ble不能适配......