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

# _*_ 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. Netty入门(五)ChanneHandler

    本节主要讨论了 Netty 的数据处理组件 ChannelHandler. 一.Channel 生命周期 Channel 有个简单但强大的状态模型,下面是 Channel 的四个状态: Channel ...

  2. jQuery做字符串分隔

    var str=new String(); var arr=new Array(); str="ddd,dsd,3,dd,g,k"; //可以用字符或字符串分割 arr=str.s ...

  3. javascript:void(0)的问题

    最近看了好几个关于<a>标签和javascript:void(0)的帖子,谨记于此,以资查阅. 注:以下代码未经全面测试,但每一种方法可能会出现的情况都基本做了说明. 在做页面时,如果想做 ...

  4. 环境搭建(Python)

    Python 开发环境搭建 Windows篇   一. Python安装 资源获取 登录Python官网的Windows下载页面https://www.python.org/downloads/win ...

  5. leetcode121—Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  6. Python3.2-re模块之常用正则记录

    python的re模块是个很好的模块,这里简单记录下自己编写的几个有用的正则: 1:邮箱匹配: gReMailbox = re.compile(r'([\w\.\-+]+@[\w\-]+(?:\.[\ ...

  7. iOS开发之使用UIView-Positioning简化页面布局

    使用过代码布局的人可能会有这样的感觉,给控件设置frame的时候比较繁琐.最 近在Github上看到有一个UIView的一个分类UIView-Positioning,这个分类提供了一些属性,比如lef ...

  8. 搭建HBase的本地模式、伪分布式、全分布式和HA模式

    一.安装HBase: 我这里选择的是hbase-1.3.1-bin.tar.gz版本解压HBase: tar -zxvf hbase-1.3.1-bin.tar.gz -C ~/training 配置 ...

  9. android studio更新gradle失败的解决办法-转

    android studio中每次自动更新gradle时速度实在太慢因为gradle服务器比较慢,所以更新gradle会比较慢,建议先下载下来,然后手动添加到gradle的下载目录,提升速度. 使用下 ...

  10. C# DataGridView控件禁止拷贝数据

    代码如下(没错,就一行): dataGridView1.ClipboardCopyMode=DataGridViewClipboardCopyMode.Disable; 当然其它方式很多,但是不如来个 ...