使用树莓派远程控制Led灯


1. 树莓派的安装与远程登陆

1.1 实验所用硬件

树莓派3B、16GB SD卡一个、读卡器一个、树莓派电源线、LED灯若干、杜邦线若干

1.2 将16GB SD卡通过读卡器插入电脑

1.2.1 格式化SD卡

如果是之前用过的SD卡,需要用SD Formatter工具格式化这张SD卡,我们用的SD卡是新SD卡,故不需要格式化

python 控制树莓派LED灯 树莓派接led灯_linux

1.2.2 烧录树莓派官方操作系统Raspbian到SD卡里

烧录成功之后,在SD卡里就会有以下文件:

1.2.3 配置SSH远程登录文件和wifi文件

创建两个记事本txt文件,然后把它们的名字分别改成sshwpa_supplicant.conf(注意要把.txt扩展名删掉)

创建ssh文件和wpa_supplicant.conf空白文件

用文本编辑器Notepad++打开wpa_supplicant.conf,输入以下配置:

country=GB
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
	ssid="tsccg"
	psk="123456"
	priority=5
}

将ssh空白文件和wpa_supplicant.conf文件放入boot盘中

1.3 树莓派开机及获取ip地址

1.3.1 开机

拔出SD卡,插入树莓派,插好电源线,通电

树莓派上的红灯常亮,表示通电。绿灯间歇性亮,表示读写SD卡。

1.3.2 获取树莓派ip地址

将树莓派用网线连接到与笔记本电脑同一个网络的路由器,查看wifi的路由器后台配置界面,找到树莓派,查看ip地址

1.4 远程登录树莓派

使用远程ssh工具FinalShell和远程桌面工具VNC Viewer远程登陆树莓派

树莓派初始用户名为pi,密码是raspberry

1.4.1 FinalShell

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_02

python 控制树莓派LED灯 树莓派接led灯_树莓派_03

1.4.2 VNC Viewer

python 控制树莓派LED灯 树莓派接led灯_客户端_04

python 控制树莓派LED灯 树莓派接led灯_linux_05

2. 初始化树莓派配置

2.1 换源

2.1.1 给Raspbian的包管理器apt-get换源

在树莓派的命令行界面输入

sudo nano /etc/apt/sources.list

使用键盘方向键控制,在第一行开头加一个#,把下面的内容拷贝到最后一行之后,如图中的效果:

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ stretch main contrib non-free rpi

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_06

先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。再输入以下命令更新到清华大学镜像源最新的软件列表。

sudo apt-get update

这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在树莓派本地。

2.1.2 给Python的第三方模块安装工具pip换源

配置换源脚本

在树莓派的命令行中依次输入运行以下三个命令

sudo mkdir ~/.pip
cd .pip
sudo nano pip.conf

在打开的文件中输入以下内容:

[global]
timeout = 10
index-url =  http://mirrors.aliyun.com/pypi/simple/
extra-index-url= http://pypi.douban.com/simple/
[install]
trusted-host=
    mirrors.aliyun.com
    pypi.douban.com

先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。

2.2树莓派内部配置

打开树莓派命令行界面输入命令,进入树莓派配置界面。

sudo raspi-config

用上下键和左右键切换光标位置。

第一行:Change User Password修改密码

按照里面的要求修改成自己的密码即可。默认用户名为pi,密码为raspberry

这个密码会用于远程ssh登陆、VNC远程桌面及需要管理员root权限时输入。

第五行:Interfacing Options开启功能

打开VNCSerialRemote GPIO

Camera:摄像头

SSH:ssh远程通信与登陆

VNC:VNC远程桌面登陆

Serial:串口控制

Remote GPIO:远程GPIO引脚控制

第七行:Advanced Options高级设置

  • 选择Expand Filesystem,将根目录扩展到这个SD卡,充分利用SD卡的存储空间
  • 选择Overscan,在整个屏幕上显示
  • 选择Audio,选择Force 3.5mm('headphone' jack),树莓派的声音会从耳机孔输出
  • 选择Resolution,选择默认设置,自动根据显示屏调整分辨率
  • 选择Pixel Doubling,增加桌面显示画质
    选择Finish,会跳出对话框问是否重新启动,可以直接回车确定重启,也可以等下次启动时候生效。

3. 使用 web 控制树莓派 GPIO 引脚

3.1 web 环境安装

3.1.1 部署Apache服务器

执行以下命令安装Apache2

sudo apt-get install apache2 -y

测试web服务器

默认情况下,Apache将一个测试html文件index.html放在web文件夹/var/www/html中,在raspberry的浏览器中输入http://127.0.0.1/,或者在另一台电脑的浏览器中输入http://192.168.43.36/(自己树莓派的IP),可以看到以下页面

该页面表示Apache正常工作了。

开启服务并设置为开机启动

systemctl start apache2
systemctl enable apache2

部署自己的网站只要将网站文件放到/var/www/html文件夹中就可以了。

3.1.2 安装php

要允许Apache服务器处理PHP文件,需要安装最新版本的PHP和Apache的PHP模块。输入以下命令来安装这些:

sudo apt-get install php libapache2-mod-php -y

3.2 ftp 文件上传、下载服务器安装

安装 vsftpd 服务

sudo apt-get install vsftpd

开启服务并设置为开机启动

systemctl start vsftpd
systemctl enable vsftpd

修改默认配置

安装vsftpd后,它的配置文件里的写入权限默认是开着的,但是被注释了

vim /etc/vsftpd.conf

python 控制树莓派LED灯 树莓派接led灯_客户端_07

把注释删掉即可


3.3 GPIO 库安装

3.3.1 树莓派中安装wiringPi

cd /home/pi/Downloads
wget http://project-downloads.drogon.net/files/wiringPi.tgz
tar xf wiringPi.tgz
cd wiringPi/wiringPi/
make
make install

使用wiringPi的程序进行测试编译时出现了如下问题:

/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_write_byte'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_read_byte'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_write_byte_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_write_word_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_read_word_data'
/usr/lib/gcc/arm-linux-gnueabi/4.6/../../../libwiringPi.so:undefined reference to `i2c_smbus_read_byte_data'
collect2: ld returned 1 exit status

网上搜索是缺少依赖,

执行命令 sudo apt-get install libi2c-dev

然后重新编译就可以了。

make clean
sudo make uninstall
make
sudo make install

之后就能正常编译了

3.4 实际接线与网页代码

3.4.1 接线

python 控制树莓派LED灯 树莓派接led灯_树莓派_08

3.4.2 网页代码

具体源代码见附件

使用finalshell将源码文件上传到树莓派的/var/www/html里

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_09

在浏览器中打开树莓派ip地址

python 控制树莓派LED灯 树莓派接led灯_树莓派_10

4. 实现内网穿透

4.1 方法1 通过Sunny-Ngrok 实现内网穿透

国内Ngrok官网:https://www.ngrok.cc/

4.1.1 注册账号

4.1.2 开通隧道

python 控制树莓派LED灯 树莓派接led灯_linux_11

4.1.3 在需要映射的机器里建立web服务

这一步我们已经在树莓派里做过了

4.1.4 下载操作系统对应客户端

根据自己树莓派的操作系统下载对应客户端,我的是Linux ARM版本,然后将下载的文件传入树莓派中

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_12

4.1.5 启动映射服务

在树莓派中进入到客户端的目录,执行以下命令 (隧道id在开通隧道后查看隧道管理)

./sunny clientid 隧道id

python 控制树莓派LED灯 树莓派接led灯_客户端_13

4.1.6 访问服务

在浏览器中输入赠送域名即可看到页面

4.1.7 设置开机自启动映射服务

4.1.7.1 赋予权限

进入客户端执行文件所在目录,给予可执行权限。

cd /home/pi
sudo chmod +x /home/pi/sunny
4.1.7.2 编写启动脚本

编写映射脚本

nano nwct.sh
./sunny clientid f9b6d7e301d74857

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_14

4.1.7.3 设置开机自动运行shell脚本

在 /home/pi/.config 下创建一个文件夹,名称为 autostart,并在该文件夹下创建一个lightShell.desktop文件,文件内容如下:

[Desktop Entry]
Name=lightShell
Comment=My light Program
Exec=/home/pi/nwct.sh start
Icon=/home/pi/Pictures/ledon.png
Terminal=false
MultipleArgs=false
Type=Application
Categories=Application;Development;
StartupNotify=true

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_15

之后 sudo reboot 重启,就可以看到映射服务在树莓派启动后也自动启动了

重启树莓派后打开网页:

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_16

4.2 方法2 通过natapp实现内网穿透

NATAPP官网:https://natapp.cn

4.2.1 注册账号

4.2.2 开通隧道

点右上角开通隧道,用免费的就可

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_17

开通后查看我的隧道

python 控制树莓派LED灯 树莓派接led灯_linux_18

4.2.3 在需要映射的机器里建立web服务

4.2.4 下载操作系统对应客户端

python 控制树莓派LED灯 树莓派接led灯_linux_19

将客户端文件传输到树莓派/usr/local中

python 控制树莓派LED灯 树莓派接led灯_linux_20

4.2.5 运行natapp

我们之前将natapp放在 /usr/local下,进入该目录

cd /usr/local

执行以下命令 ( authtoken在开通隧道后查看我的隧道)

nohup ./natapp -authtoken=7295530337edd260 -log=stdout

python 控制树莓派LED灯 树莓派接led灯_linux_21

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_22

4.2.6 访问网页

在浏览器中输入上一步所显示域名即可看到页面

python 控制树莓派LED灯 树莓派接led灯_客户端_23

5. 实验演示

5.1 打开树莓派电源,浏览器输入网址,默认关灯

python 控制树莓派LED灯 树莓派接led灯_客户端_24

5.2 点击开启按钮

python 控制树莓派LED灯 树莓派接led灯_python 控制树莓派LED灯_25