Back
Featured image of post 树莓派实现Web端控制GPIO&内网穿透教程

树莓派实现Web端控制GPIO&内网穿透教程

前段时间买了个树莓派2B,一直没用,元旦期间做出了这个无聊的玩意儿 先看效果,下面这个站就是搭建在树莓派上的,可以通过Web端获取传感器数据,控制GPIO接口。

 
URL:http://mysmpi.ngrok.natapp.cn 根据网络条件不同,打开有时会非常慢。。

原理

原理很简单,使用Flask框架开发,直接用Python的GPIO库进行操作。端口映射使用的是Ngrok,官方服务被墙了,这里用的是国人搭建的免费服务。

实现步骤

1.安装必要组件

总的来说需要装的组件有Python、Flask、GPIO库。如果使用的是官方镜像的话只需要安装Flask即可。

首先安装pip。右键这里另存为 并在树莓派中运行即可自动下载安装。

然后安装Flask。以Root权限执行下面命令即可安装

sudo pip install Flask

2.连接元件

这里根据大家的需要可以自己连接,我只是把我的连接方式说一下。

用到的元件有:杜邦线一把,面包板跳线一把、各种颜色的LED灯,220Ω电阻4个、电位器一个、有源蜂鸣器一个、lcd1602一个。

lcd的连接图如下:

 

再加上LED、蜂鸣器。。混乱的实物图:

 

实物图连接好后开始写代码。首先要实现打开首页时最左边的LED闪一下。代码如下:

@app.route('/')
def index():
	GPIO.setmode(GPIO.BCM)
	GPIO.setup(26,GPIO.OUT) 
	GPIO.output(26,GPIO.HIGH)
	time.sleep(0.5)
	GPIO.output(26,GPIO.LOW)
	return render_template('index.html')

注意这里设置time.sleep()的时间不能太长,否则首页打开会很慢 LCD屏的控制使用了rpimenu,github:https://github.com/lifanxi/rpimenu 其他的控制原理类似,这里就不多说了,代码打包下载:http://pan.baidu.com/s/1i4gSAQL 解压后先su 获取root权限然后执行下面命令即可

python web.py

出现下图就表示成功了。

 

默认端口设为了80,你可以在web.py第363行更改。

内网穿透

如果你的树莓派连接的是家用网络,那么外网可能并不能访问你的页面,因为你的宽带运营商可能把端口封了(移动就是这样)。想要实现外网访问,就要用内网穿透解决。国内比较知名的是花生棒,直接网线插上就能用,但硬件需要额外购买。不想花钱用Ngrok是个不错的选择,但他的官方服务被墙了,我用的是国人用阿里云搭建的免费服务natapp. 主页地址:http://natapp.cn/ 往下拉到客户端下载,由于树莓派是arm架构的,我们就下载“Linux ARM”.下载后解压到树莓派上。在此目录下打开终端,获取root后执行下面命令:

./ngrok -config ngrok.cfg -subdomain myapp 80

其中“myapp”为你自定义的域名,日后你可以通过http://myapp.ngrok.natapp.cn访问网站。 最后面的80为端口,一般不用改。 执行后会出现下面界面,这就表示内网穿透成功了,可以访问http://自定义域名.ngrok.natapp.cn试试看能不能打开

 

打开的速度肯定比较慢,毕竟不是专业机房。。

最后附上一张树莓派2的引脚示意图:

 

P.S.网站上线后,LCD收到了第一条消息:

 

Licenced under CC BY-NC-SA 4.0
views
这篇文章发表于 1741 天前,可能包含过期内容、中二言论、失效链接