当前位置: 首页 > 后端技术 > Python

使用微信小程序远程切换树莓派RGB七色灯

时间:2023-03-26 15:42:06 Python

前言:因为上学期上了一门嵌入式开发课,老师要求用树莓派设计一个项目。由于会用微信小程序,所以脑洞大开,于是想出了下面这篇用微信小程序远程切换树莓派RGB七色灯的文章。什么是树莓派:树莓派是由英国树莓派基金会开发的。它是基于Linux的单片机,??也称为袖珍计算机。所以电脑能做到的,树莓派基本上都能做到。截至目前,树莓派已经发布了4代。我用的是3代3B+,足够我用1.2的树莓派配件和系统了。你可以检查一下。师资:树莓派新手教程1.3电子元器件:因为我需要实现七色灯的切换,所以需要先集成所需的RGB电子元器件,直接在网上购买即可。七色灯的原理可以通过控制树莓派的GPIO来控制。RGB彩色LED灯。LED灯有3种灯,分别是红光、绿光和蓝光。这三盏灯被控制发出不同强度的光,混合在一起可以发出各种颜色的光。LED与树莓派GPIO引脚接线LED灯上的4个引脚分别为GND、R、G、B,GN??D需要接地。R、G、B分别为红、绿、蓝灯的正极。我们将它们连接到RaspberryPi的GPIO端口。LED灯上,R接树莓派的GPIO18,G接树莓派的GPIO15,B接树莓派的GPIO14。引脚图如下。连接后的实物图。项目过程架构图。首先,让我们了解一下我们项目架构的流程图。服务器因为要实现对树莓派的远程连接和控制,我们需要一个服务器。我使用的是在线物联网云平台服务器oneNet。注册账号后,进入点击控制台->所有产品和服务,选择多协议接入->选择HTTP协议->选择添加产品产品信息可以随意填写,比如点击创建的产品进入详情页面获取Master-APIkey和access-key。点击进入设备列表->添加设备点击进入数据流模板->添加数据流,数据流的名称任意,如'led_pi'。完成这些步骤后,我们的云平台界面就创建好了。代码部分微信小程序constapp=getApp()constAPI_URL='https://api.heclouds.com/devices/655618681/datapoints'//655618681为设备号,替换为你添加的设备号constAPI_KEY='wkXV2upi=614H4U=HpeRiQ=OLU='//这里换成自己的api_keyPage({data:{rgb:'rgb(0,154,97)',//初始值pick:false},postData:function(value){varthat=this;wx.request({url:API_URL,header:{'api-key':API_KEY},method:"POST",data:{"datastreams":[{"id":"led_pi",“数据点”:[{“at”:“2020-03-13T19:20:43”,“价值”:价值},]}]},成功:函数(res){console.log(res.statusCode)如果(res.statusCode==200)that.setData({motto:"ledon"})elsethat.setData({motto:"404notfound"})}})},//切换红灯clickRed:function(){this.postData('red')},//切换绿灯clickGreen:function(){this.postData('green')},clickWhite:function(){this.postData('white')},clickBlue:function(){this.postData('blue')},ClickOn:function(){this.postData('1')},ClickOff:function(){那个=这个;this.setData({motto:"wait..."})wx.request({url:`${API_URL}?type=3'`,header:{'api-key':API_KEY},method:"POST",data:{'led_pi':'0'},success:function(res){if(res.statusCode==200)that.setData({motto:"ledoff"})elsethat.setData({motto:"404notfound"})}})},ClickGet:function(){this.setData({motto:"wait"})wx.request({url:`${API_URL}?datastream_id=led_pi`,header:{'api-key':API_KEY},method:"GET",success(res){console.log(res.data)}})},//显示取色器toPick:function(){this.setData({pick:true})},//取颜色结果回调pickColor(e){letrgb=e.detail.colorconsole.log(rgb)vara=rgb.split('rgb')//varb=a[1].split(')')console.log(a[1])//console.log(b)this.postData(a[1])}})小程序界面小程序取色版组件从npm下载树莓派脚本树莓派的脚本文件是用python的,我分成了两个py文件。一个切换七种颜色,另一个切换彩色。PS因为临时学了python解决这个问题,代码写的不好,大家看一下云平台接口的文档。在RaspberryPi终端上运行以下wxMain.py文件。/wxMain.py#-*-coding:utf-8-*-fromiot10086importIot10086importtimeimportRPi.GPIOasGPIOdefsleep(mytime):time.sleep(mytime)rpin=18gpin=15bpin=14GPIO.setmode(GPIO.BCM)GPIO.setwarnings(False)GPIO.setup(rpin,GPIO.OUT)GPIO.setup(gpin,GPIO.OUT)GPIO.setup(bpin,GPIO.OUT)pwmR=GPIO.PWM(rpin,70)pwmG=GPIO.PWM(gpin,70)pwmB=GPIO.PWM(bpin,70)pwmR.start(1)pwmG.start(1)pwmB.start(1)apikey=''apiurl=''iot=Iot10086(apikey,apiurl)#定时刷新界面接收小程序发送的数据forxinrange(10000):iot_post_status=iot.get_data('led_pi')colors=iot_post_status['data']print('colors',colors)value=iot_post_status['data']['current_value']boolen=(len(value)>=7)if(value=='1'orvalue=='white'):GPIO.output(rpin,GPIO.HIGH)GPIO.output(gpin,GPIO.HIGH)GPIO.output(bpin,GPIO.HIGH)elif值=='0':GPIO.output(rpin,GPIO.LOW)GPIO.输出(gpin,GPIO.LOW)GPIO.output(bpin,GPIO.LOW)elifvalue=='red':GPIO.output(rpin,GPIO.HIGH)GPIO.output(gpin,GPIO.LOW)GPIO.output(bpin,GPIO.LOW)elif值=='绿色':GPIO.output(gpin,GPIO.HIGH)GPIO.output(rpin,GPIO.LOW)GPIO.output(bpin,GPIO.LOW)elifvalue=='blue':GPIO.output(bpin,GPIO.高)GPIO.输出(rpin,GPIO.LOW)GPIO.输出(gpin,GPIO.LOW)elifboolen:RGB=value.split('(')[1].split(')')[0].split(',')r=int(RGB[0])/2.55001g=int(RGB[1])/2.55001b=int(RGB[2])/2.55001print('RGB',RGB)pwmR.ChangeDutyCycle(r)pwmG.ChangeDutyCycle(g)pwmB.ChangeDutyCycle(b)#调整红绿蓝各色LED的亮度,组合各种颜色pwmR.stop()pwmG.stop()pwmB.stop()GPIO.cleanup()导入云平台提供的接入类iot10086.pyimportrequestsimportjsonclassIot10086(object):apikey='wkXV2upi=614H4U=HpeRiQ=OLeU='apiurl='http://api.heclouds.com/devices/65561868/datastreams/'def__init__(self,apikey,apiurl):self.apikey=apikeyself.apiurl=apiurlself.apiheaders={'api-key':apikey}defset_data(self,datastream,value):apiurl_set=self.apiurl+'?type=3'payload={datastream:str(value)}r=requests.post(apiurl_set,headers=self.apiheaders,data=json.dumps(payload),timeout=30)returnr.status_codedefget_data(self,datastream):apiurl_get=self.apiurl+datastreamr=requests.get(apiurl_get,headers=self.apiheaders,timeout=20)ifr.status_code==200:returnjson.loads(r.text)else:returnr.status_code实现效果PS:由于我当时在学校没有录制按钮的操作视频,所以这里就不放参考了《微信小程序通过wifi和蓝牙控制树莓派》推荐掘金,更好的阅读体验掘金地址完感谢相约,我是林依依,下期见.