串口摄像头由树莓派控制,代码如下:

# _*_ 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 }); }
}); }
});
}, })

微信小程序对接串口摄像头的更多相关文章

  1. 微信小程序对接显示阿里云数据库数据

    现实需求 在项目中需求,有时候现场设备发生故障,需要远程的人员知道.除了邮件方式,以微信小程序的方式也很好.今天进行尝试,并制作了一个demo版本. 1.微信小程序申请制作前端 1.1lists文件( ...

  2. 当微信小程序遇到AR(一)

    当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...

  3. 当微信小程序遇到AR(三)

    当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...

  4. 当微信小程序遇到AR(四)

    当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...

  5. 当微信小程序遇到AR(二)

    当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...

  6. php对接微信小程序支付

    前言:这里我就假装你已经注册了微信小程序,并且基本的配置都已经好了.注: 个人注册小程序不支持微信支付,所以我还是假装你是企业或者个体工商户的微信小程序,其他的商户号注册,二者绑定,授权,支付开通,就 ...

  7. 微信小程序登录对接Django后端实现JWT方式验证登录

    先上效果图 点击授权按钮后可以显示部分资料和头像,点击修改资料可以修改部分资料. 流程 1.使用微信小程序登录和获取用户信息Api接口 2.把Api获取的用户资料和code发送给django后端 3. ...

  8. 关于微信小程序在ios中无法调起摄像头问题

    这几天关于微信小程序开发关于wx.chooseVideo组件问题,因为自己一直是安卓手机上测试,可以调取摄像头,但是应用在ios上无法打开摄像头,困扰了好多天,经过反复查看官方文档,今天总算修复了这个 ...

  9. uni-app开发经验分享十九: uni-app对接微信小程序直播

    uni-app对接微信小程序直播 1.登录微信小程序后台-点击>设置->第三方设置->添加直播插件 2.添加直播组件后->点击<详情>      记录这两个参数直播 ...

随机推荐

  1. windows 下配置 Nginx 常见问题

    因为最近的项目需要用到负载均衡,不用考虑,当然用大名鼎鼎的Nginx啦.至于Nginx的介绍,这里就不多说了,直接进入主题如何在Windows下配置. 我的系统是win7旗舰版的,到官网下载最新版本 ...

  2. oracle 按条件删除、查询表

    ---查询表的名称,字段信息以及字段注释 select us.table_name, --表名   ut.COLUMN_NAME,--字段名称 uc.comments,--字段注释 ut.DATA_T ...

  3. AOP实现拦截对象以及获取切入目标方法和注解

    AOP实现拦截对象以及获取切入目标方法和注解 一.JoinPoint是什么? AspectJ使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用 o ...

  4. OpenCV——图像的深度与通道数讲解

    矩阵数据类型: – CV_(S|U|F)C S = 符号整型 U = 无符号整型 F = 浮点型 E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双 ...

  5. JAVA框架 Spring 入门

    一.阐述: IoC:我们以前写的框架虽然我们已经进行分层,web.业务层.持久层.但是各个层之间的关系.耦合性比较高,那个层调用其他层的时候,需要new对应层的类的对象,这样的话,我们以后做修改的时候 ...

  6. TensorFlow入门

    Win10下pycharm安装tensorflow: 1.安装git,这样就会有windows powerShell 2.安装python3.x,配置环境变量 3.安装pip,下载地址是:https: ...

  7. Scala--集合

    一.主要的集合特质 Seq有先后顺序的序列,如数组列表.IndexedSeq通过下标快速的访问元素.不可变:Vector, Range, List 可变:ArrayBuffer, LinkedList ...

  8. SAP查询TABLE对应的文本表

    SAP 取数时,通常配置项,需要取对应的文本描述,一般在配置表后加个T,就可以找到描述对应的表名. 但有时也有不符合这个规则的,例如生产订单类型数据表 T003O. 表名加T后并不存T003OT. 这 ...

  9. Django Rest Framework源码剖析(五)-----解析器

    一.简介 解析器顾名思义就是对请求体进行解析.为什么要有解析器?原因很简单,当后台和前端进行交互的时候数据类型不一定都是表单数据或者json,当然也有其他类型的数据格式,比如xml,所以需要解析这类数 ...

  10. Spring-data-jpa 学习笔记(一)

    Spring家族越来越强大,作为一名javaWeb开发人员,学习Spring家族的东西是必须的.在此记录学习Spring-data-jpa的相关知识,方便后续查阅. 一.spring-data-jpa ...