Raspberry Pi+Python+微信小程序入门物联网

Raspberry Pi 3B+ 实现入门物联网

本章主要讲述简便实现物联网,我们需要使用树莓派作为控制主板,使用python flask实现web服务器挂载,通过驱动板控制电机正反转,微信小程序作为远程控制终端,一起渐入IoT佳境吧!

智能窗帘概念图:
在这里插入图片描述
本次实验依赖的产品:

  1. Raspberry Pi 3B+ (既树莓派,含sd卡)
  2. 一台拥有HDMI接口的显示器
  3. UNL2003步进电机驱动器配套28BYJ-48步进电机
  4. 杜邦线若干
  5. 一台健康的电脑

起步

起初,我们需要为购买一张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 time


app = Flask(__name__)

#对应引脚
IN1 = 35  # pin11
IN2 = 36
IN3 = 38
IN4 = 40


def 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 location
    GPIO.setup(IN1, GPIO.OUT)  # Set pin's mode is output
    GPIO.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)
        }
      })
  }
})

最后

树莓派实现物联网

当它转起来的时候,你能感受到世界是美好的

附个人公众号二维码
一起
搞点事情

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值