微信小程序对接串口摄像头
串口摄像头由树莓派控制,代码如下:
# _*_ coding:utf-8
import serial
import time
import traceback
import pycurl
import requests
import io
import json
import base64 ser = serial.Serial("/dev/ttyAMA0",115200)
print(ser.name)
print(ser.port) f=None def main():
print("main:")
res0 = setResolution()
res0 = reset()
print(res0)
while True:
try:
res1=stopCurrent()
print(res1) res2=getCurrentLength()
print(res2) hBit = res2[7]<<8
lBit = res2[8]
imageSize = hBit+lBit;
dataSize = imageSize+10
print(imageSize) res3=getCurrentImage(res2[7],res2[8],dataSize)
imageData = res3[5:(dataSize-5)] f = open('/home/pi/Camera/image.jpg','wb')
for i in range(len(imageData)):
f.write(chr(imageData[i]))
f.close resumCurrent()
upload()
except Exception:
print(traceback.print_exc()) def setResolution():
bitarray = [0x56,0x00,0x31,0x05,0x04,0x01,0x00,0x19,0x11]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
while True:
s = ser.read()
if s!=None:
index = index+1
resp.append(ord(s))
if index>=5:
break;
return resp
def setCompress():
bitarray = [0x56,0x00,0x31,0x05,0x01,0x01,0x12,0x04,0x36]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
while True:
s = ser.read()
if s!=None:
index = index+1
resp.append(ord(s))
if index>=5:
break;
return resp
def resumCurrent():
bitarray = [0x56,0x00,0x36,0x01,0x03]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
while True:
s = ser.read()
if s!=None:
index = index+1
#print(s)
resp.append(ord(s))
if index>=5:
break;
return resp
def stopCurrent():
bitarray = [0x56,0x00,0x36,0x01,0x00]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
while True:
s = ser.read()
if s!=None:
index = index+1
#print(s)
resp.append(ord(s))
if index>=5:
break;
return resp def getCurrentLength():
bitarray = [0x56,0x00,0x34,0x01,0x00]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
while True:
s = ser.read()
if s!=None:
index = index+1
#print(s)
resp.append(ord(s))
if index>=9:
break;
return resp
def getCurrentImage(hBit,lBit,dataSize):
bitarray = [0x56,0x00,0x32,0x0C,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,chr(hBit),chr(lBit),0x10,0x00]
ser.write(bitarray)
time.sleep(0.1)
index=0
resp=[]
f=io.BytesIO()
while True:
s = ser.read()
if s!=None:
index = index+1
#print(s)
resp.append(ord(s))
#f.write(s)
if index>=dataSize:
break;
return resp
def reset():
bitarray = [0x56,0x00,0x26,0x00]
ser.write(bitarray)
time.sleep(2)
index=0
resp=[] len = ser.inWaiting()
s = ser.read(len)
resp.append(s) return resp
def upload(device=27390392):
url='http://api.heclouds.com/bindata'
headers={"api-key":"*******","Content-Type":"image/jpg"}
queryString = {"device_id":str(device),"datastream_id":"picture"}
with open('/home/pi/Camera/image.jpg','rb') as f:
base64_data = base64.b64encode(f.read())
r = requests.post(url,params=queryString,headers=headers,data=base64_data)
print(r.text)
return f if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
if ser != None:
ser.close()
except Exception:
print(traceback.print_exc())
微信小程序代码如下:
wxml
<view class="weui-flex justify">
<button bindtap="receivePic" class="weui_btn mini_btn" style="justify-content: center;" stype="plain-default" size="mini">刷图</button>
</view>
<view style="height:20px;" >
</view>
<view style="weui-flex justify;width:100%" >
<image src='{{userImageBase64}}' mode="widthFix" style="width:100%;background-color: #66ffff;"/>
</view>
js
const util = require('../../utils/util.js')
Page({
data: {
device: {},
userImageBase64:{},
},
onLoad: function (options) {
var _this = this;
console.log(options.device_id);
//查询该设备的详细信息
wx.request({
url: 'https://api.heclouds.com/devices/' + options.device_id, //仅为示例,并非真实的接口地址
header: {
'content-type': 'application/json', // 默认值
'api-key': '**'
},
success: function (res) {
console.log(res.data),
//执行this.setData方法,就会渲染视图数据
_this.setData({
device: res.data.data
}
),
//修改标题栏
wx.setNavigationBarTitle({ title: _this.data.device.title })
}
});
receivePic:function(){
var _this = this;
wx.request({
url: 'https://api.heclouds.com/devices/' + this.data.device.id + '/datapoints',
header: {
'content-type': 'application/json', // 默认值
'api-key': '**'
},
success: function (res) {
var __this = _this;
console.log("PIC")
var index = res.data.data.datastreams[1].datapoints[0].value.index;
console.log(res);
console.log(index)
wx.request({
url: 'https://api.heclouds.com/bindata/'+index,
header: {
'content-type': 'image/jpg', // 默认值
'api-key': '**'
},
success: function (res) {
console.log("PIC")
var image = res.data;
//var a = image.split('');
console.log(image);
__this.setData({ userImageBase64: "data:image/png;base64," + image });
}
});
}
});
},
})
微信小程序对接串口摄像头的更多相关文章
- 微信小程序对接显示阿里云数据库数据
现实需求 在项目中需求,有时候现场设备发生故障,需要远程的人员知道.除了邮件方式,以微信小程序的方式也很好.今天进行尝试,并制作了一个demo版本. 1.微信小程序申请制作前端 1.1lists文件( ...
- 当微信小程序遇到AR(一)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(三)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(四)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(二)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- php对接微信小程序支付
前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...
- 微信小程序登录对接Django后端实现JWT方式验证登录
先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3. ...
- 关于微信小程序在ios中无法调起摄像头问题
这几天关于微信小程序开发关于wx.chooseVideo组件问题,因为自己一直是安卓手机上测试,可以调取摄像头,但是应用在ios上无法打开摄像头,困扰了好多天,经过反复查看官方文档,今天总算修复了这个 ...
- uni-app开发经验分享十九: uni-app对接微信小程序直播
uni-app对接微信小程序直播 1.登录微信小程序后台-点击>设置->第三方设置->添加直播插件 2.添加直播组件后->点击<详情> 记录这两个参数直播 ...
随机推荐
- python open 关于读、写、追加的总结
# -*- coding: utf-8 -*- # 测试文件名为: # text.txt # 测试文件内容为: # abcdefg # 每次操作后将文件复原 # r # 以只读方式打开文件,文件不可写 ...
- bat脚本,备份数据库并压缩
forfiles /p "D:\DBBackup" /m "*.sql" /d -08 /c "cmd /c del @path"forfi ...
- Thinkphp5.0分页和跳页
后台查询商品或者会员量需要用到分页展示列表,当页数比较多的时候为了体高用户体验度,需要添加一个跳页也就是手动输入页码数进行快速跳转指定页面.由于手动编写分页比较麻烦,又想使用TP5自带的分页,但是TP ...
- zabbix没有frontends目录
去解压缩的源码包中取 # cd /opt/data/src/about_zabbix/zabbix-2.2.3# cp -rv frontends/ /opt/OperMainManager/zabb ...
- 关于PCB的线宽与过孔
关于PCB的线宽与过孔 我们在画PCB时一般都有一个常识,即走大电流的地方用粗线(比如50mil,甚至以上),小电流的信号可以用细线(比如10mil). 对于某些机电控制系统来说,有时候走线里流过的瞬 ...
- html样式表格
<html><body><table border="1"> <tr height="20px"> &l ...
- 20155233 《网络对抗技术》EXP3 免杀原理与实践
正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己利用shellcode编程等免杀工具或技巧 使用msf编码器生成jar包 输入命令msfvenom -p ...
- 20155318 《网络攻防》Exp3 免杀原理与实践
20155318 <网络攻防>Exp3 免杀原理与实践 基础问题 杀软是如何检测出恶意代码的? 基于特征来检测:恶意代码中一般会有一段有较明显特征的代码也就是特征码,如果杀毒软件检测到有程 ...
- Keras实现风格迁移
风格迁移 风格迁移算法经历多次定义和更新,现在应用在许多智能手机APP上. 风格迁移在保留目标图片内容的基础上,将图片风格引用在目标图片上. 风格本质上是指在各种空间尺度上图像中的纹理,颜色和视觉图案 ...
- how2j 的shiro教程初探
教程案例里的mysql连接器只支持mysql,不支持mariadb,如果用的不是mysql,创建连接时会报错.