使用树莓派远程控制Led灯
1. 树莓派的安装与远程登陆
1.1 实验所用硬件
树莓派3B、16GB SD卡一个、读卡器一个、树莓派电源线、LED灯若干、杜邦线若干
1.2 将16GB SD卡通过读卡器插入电脑
1.2.1 格式化SD卡
如果是之前用过的SD卡,需要用SD Formatter工具格式化这张SD卡,我们用的SD卡是新SD卡,故不需要格式化
1.2.2 烧录树莓派官方操作系统Raspbian到SD卡里
烧录成功之后,在SD卡里就会有以下文件:
1.2.3 配置SSH远程登录文件和wifi文件
创建两个记事本txt文件,然后把它们的名字分别改成ssh
和wpa_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
1.4.2 VNC Viewer
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
先按键盘上的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
开启功能
打开VNC
、Serial
、Remote 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
把注释删掉即可
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 接线
3.4.2 网页代码
具体源代码见附件
使用finalshell将源码文件上传到树莓派的/var/www/html里
在浏览器中打开树莓派ip地址
4. 实现内网穿透
4.1 方法1 通过Sunny-Ngrok 实现内网穿透
国内Ngrok官网:https://www.ngrok.cc/
4.1.1 注册账号
4.1.2 开通隧道
4.1.3 在需要映射的机器里建立web服务
这一步我们已经在树莓派里做过了
4.1.4 下载操作系统对应客户端
根据自己树莓派的操作系统下载对应客户端,我的是Linux ARM版本,然后将下载的文件传入树莓派中
4.1.5 启动映射服务
在树莓派中进入到客户端的目录,执行以下命令 (隧道id在开通隧道后查看隧道管理)
./sunny clientid 隧道id
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
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
之后 sudo reboot 重启,就可以看到映射服务在树莓派启动后也自动启动了
重启树莓派后打开网页:
4.2 方法2 通过natapp实现内网穿透
NATAPP官网:https://natapp.cn
4.2.1 注册账号
4.2.2 开通隧道
点右上角开通隧道,用免费的就可
开通后查看我的隧道
4.2.3 在需要映射的机器里建立web服务
4.2.4 下载操作系统对应客户端
将客户端文件传输到树莓派/usr/local中
4.2.5 运行natapp
我们之前将natapp放在 /usr/local下,进入该目录
cd /usr/local
执行以下命令 ( authtoken在开通隧道后查看我的隧道)
nohup ./natapp -authtoken=7295530337edd260 -log=stdout
4.2.6 访问网页
在浏览器中输入上一步所显示域名即可看到页面
5. 实验演示
5.1 打开树莓派电源,浏览器输入网址,默认关灯
5.2 点击开启按钮