串口摄像头由树莓派控制, 代码如下:
- # _*_ 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 });
- }
- });
- }
- });
- },
- })
来源: https://blog.csdn.net/rolan1993/article/details/79815262