Raspberry Pi+Python+微信小程序入门物联网
Raspberry Pi 3B+ 实现入门物联网
本章主要讲述简便实现物联网,我们需要使用树莓派作为控制主板,使用python flask实现web服务器挂载,通过驱动板控制电机正反转,微信小程序作为远程控制终端,一起渐入IoT佳境吧!
智能窗帘概念图:
本次实验依赖的产品:
- Raspberry Pi 3B+ (既树莓派,含sd卡)
- 一台拥有HDMI接口的显示器
- UNL2003步进电机驱动器配套28BYJ-48步进电机
- 杜邦线若干
- 一台健康的电脑
起步
起初,我们需要为购买一张SD卡为树莓派烧录系统,这步操作网上有很多教程,在此不赘述。 一般烧录系统后的树莓派是有python环境的,如果没有的话,执行如下代码:
1.下载
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
2.解压Python-3.7.0.tgz
tar -zxvf Python-3.7.0.tgz
3、建立一个空文件夹,用于存放python3程序
mkdir /usr/local/python3
4、执行配置文件,编译,编译安装
cd Python-3.7.0
./configure --prefix=/usr/local/python3
make && make install
安装完成没有提示错误便安装成功了
5、建立软连接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3
6、测试一下python3是否可以用
[root@mini Python-3.7.0]# python3
Python 3.7.0 (default, Jul 28 2018, 22:47:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print("hello world!")
hello world!
>>> exit()
[root@mini Python-3.7.0]# pip3 --version
pip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7)
ok,写一段python小程序,没问题的话python就安装成功了。
硬件介绍
当我进入硬件环节的时候,对电机的了解及选配一筹莫展,得知此消息的同事奋不顾身拆开了自家电扇,囊中取物一般把他的罩极异步电机奉献给我(如下图)
对比我后入手的28BYJ-48电机
显然,这台沙包大小的电机沦为过客,暂时不会和它发生任何故事,随即把它还给了风扇。
连接设备
树莓派、电机、驱动器三端用杜邦线连接。
树莓派引脚图:
驱动器和电机连接很简单,四口线对接即可,这里要注意的是驱动器和树莓派连接:
可以通过上图看出 PIN02是我们要的正极5v电,然后负极接到Groud PIN06
- 5V (PIN-02)
- GND (PIN-06)
- in1 (PIN-35)
- in2 (PIN-36)
- in3 (PIN-38)
- in4(PIN-40)
注:PIN对应树莓派的引脚编号,in1~in4为驱动器引脚
编码
思路:(可参考前言模型图)
树莓派:核心主板兼服务提供者,需部署python flask搭建的web服务器,通过内网服务发布api接口,api接口中包含对硬件的一系列指令。
微信小程序:服务消费层,对接微型主板提供的程序操控api接口,以参数形式改变硬件设备的状态。
发布在树莓派上的python服务代码:
from flask import Flask, request
import json
import RPi.GPIO as GPIO
import timeapp = Flask(__name__)#对应引脚
IN1 = 35 # pin11
IN2 = 36
IN3 = 38
IN4 = 40def setStep(w1, w2, w3, w4):GPIO.output(IN1, w1)GPIO.output(IN2, w2)GPIO.output(IN3, w3)GPIO.output(IN4, w4)#停转
def stop():setStep(0, 0, 0, 0)#电机反转
def backward(delay, steps):for i in range(0, steps):setStep(0, 0, 0, 1)time.sleep(delay)setStep(0, 0, 1, 0)time.sleep(delay)setStep(0, 1, 0, 0)time.sleep(delay)setStep(1, 0, 0, 0)time.sleep(delay)#电机正转
def forward(delay, steps):for i in range(0, steps):setStep(1, 0, 0, 0)time.sleep(delay)setStep(0, 1, 0, 0)time.sleep(delay)setStep(0, 0, 1, 0)time.sleep(delay)setStep(0, 0, 0, 1)time.sleep(delay)def setup():GPIO.setwarnings(False)GPIO.setmode(GPIO.BOARD) # Numbers GPIOs by physical locationGPIO.setup(IN1, GPIO.OUT) # Set pin's mode is outputGPIO.setup(IN2, GPIO.OUT)GPIO.setup(IN3, GPIO.OUT)GPIO.setup(IN4, GPIO.OUT)def loop():while True:print("backward...")forward(0.003, 360) # 512 steps --- 360 angle# print# "stop..."# stop() # stop# time.sleep(3) # sleep 3s## print# "forward..."# forward(0.005, 512)## print# "stop..."# stop()# time.sleep(3)def destroy():GPIO.cleanup() # Release resource#提供服务核心代码
@app.route("/action", methods=["GET"])
def index():setup()if int(request.args.get("state"))==0 :loop()print(request.args.get("state"))return "当前装置状态为开"else :destroy()return "当前装置状态为关"if __name__ == '__main__':app.run(port='80',debug=True,host='0.0.0.0')
发布后即可通过链接 http://192.168.56.1/action (这里是我的内网ip,需要替换成自己的ip) 访问服务。
实现层微信小程序架构图:
只包含两个文件,学过前端的同学一目了然,这里可以理解成HTML和JavaScript
index.html 代码:
<!--index.wxml-->
<view class="container"><view class="userinfo"><button bindtap='changeState'> {{textState}} </button></view><view class="usermotto"><span class="user-motto">当前状态:<text style="color:red">{{oneState}}</text> </span></view>
</view>
index.js 代码:
//index.js
//获取应用实例
const app = getApp()Page({data: {motto: 'Hello World',userInfo: {},hasUserInfo: false,textState:'打开设备',oneState: '关'},//主要函数changeState:function(e){var state =0;let that = this;if (that.data.oneState=='关'){state=0;that.setData({oneState:'开',textState:'关闭设备'})}else{that.setData({oneState: '关',textState: '打开设备'})state=1;}wx.request({url: 'http://192.168.56.1/action?state='+state,success: function(res) {console.log("状态为:" +state)console.log(res)}})}
})
最后
树莓派实现物联网
当它转起来的时候,你能感受到世界是美好的
附个人公众号二维码
一起
搞点事情
Raspberry Pi+Python+微信小程序入门物联网相关推荐
- 微信小程序入门二:底部导航tabBar
小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- 微信小程序入门---01
目录 微信小程序入门 一.小程序简介 二.第一个小程序 二.小程序代码的构成 三.WXML模块 四.WXSS 样式 五.JS 逻辑交互 六.组件 七.API 八.WXML 模板语法 - 数据绑定 九. ...
- 微信小程序入门之常用组件(04)
常见组件 重点讲解微信小程序中常见的布局组件 view,text,rich-text,button,image,navigator,icon,swiper, radio,checkbox 等 一.vi ...
- 微信小程序入门案例-会议邀请函
微信小程序入门案例-会议邀请函 涉及内容:地图 目录结构: pages\index\index.wxml <view class="box"><view clas ...
- 【零基础微信小程序入门开发一】小程序介绍及环境搭建
什么是小程序? 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打 ...
- 微信小程序入门教程+案例demo
微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...
- 微信小程序入门七登录注册
上一章介绍了 微信小程序入门六本地缓存和搜索 ,这章介绍小程序的登录注册页面.主要有表单的验证,错误信息的提示,form表单的取值,get / post 请求 ,反馈交互提示框,页面跳转 以及 页面U ...
- 微信小程序入门-音乐播放器
萌新,随便做做,只是了解一下微信小程序,希望可以给看到的胖友一点参考. 之前在网上看到这个人入门四天做完一个,我五天做完了,比他好看,突然有一点自信 然后发现自己特别不乐意重新看自己的代码,总觉得写的 ...
最新文章
- (解释)单片机与各种外围设备(Flash、RAM、网络控制器、A/D、传感器、MCU等)进行直接串行通信通常采用( D)接口
- datatables中的bug
- thinkphp5带条件分页
- 什么是jsf_为什么应该避免JSF
- C++定时器的实现之格式修订版
- C++笔记-空指针加强、auto自动类型
- 关于Visual Studio .NET 2010最近的发布情况
- cmder 神器 +curl
- jquery 后代 children, find方法
- ubuntu启动时的初始化信息二
- struts2继承ActionSupport
- 真人发音计算机怎么弄成音乐模式,文字转语音真人发声怎么转换?简单教程分享...
- 金融风控实战——反欺诈特征
- TabLayout 不显示下划线
- 腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会
- win10linux双系统引导设置,win10 + Ubuntu20.04 LTS双系统引导界面美化
- 对龙邱科技TC264库的理解
- 栈和堆的区别是什么? 为什么说栈的速度快,堆的速度慢?
- 虚拟机vs裸金属服务器,裸金属虚拟机
- Windows Server 中 DNS 服务器的新增功能