微信小程序对接串口摄像头
串口摄像头由树莓派控制,代码如下:
# _*_ 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 });
}
});
}
});
},
})
联系方式:wuchaodzxx@126.com

浙公网安备 33010602011771号