串口摄像头由树莓派控制,代码如下:
# _*_ 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;100%" > <image src='{{userImageBase64}}' mode="widthFix" style="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 }); } }); } }); }, })