DHT11 温度湿度传感器实验

    DHT11是一款含有已校准数字信号输出的温湿度复合传感器,它可以输出当前测定的环境温度和湿度;其中温度测量范围是0~50度,湿度是20-90%RH;测量精度是温度+-2度,湿度是+-5%;接下来我们将尝试如何将这两部分信息打印出来。
接线示例:
接线示例
其中:
(1)-接GND;
(2)+接VCC,范围是3.3v~5v,此处接3.3v;
(3)out为信号线,接自定义Pin脚,此处接Pin18;
采集程序部分,采用的是github已有的程序,测试精确度还是不错;程序获取地址:

sudo git clone https://github.com/szazo/DHT11_Python.git
如果地址不可访问,文章最后有可用下载包。
代码下载后,可见example.py,文件,此处我们复制一下文件然后进行简单修改;

cp example.py jiujiang.py
修改jiujiang.py文件如下:

#!usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

import RPi.GPIO as GPIO
import dht11
import time
import datetime

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

# 设置使用的 pin 18引脚
instance = dht11.DHT11(pin=18)

try:
    while True:
        result = instance.read()
        if result.is_valid():
            print("\n");
            print("最后采集时间: " + str(datetime.datetime.now()))

            print("当前温度: %-3.1f C" % result.temperature)
            print("当前湿度: %-3.1f %%" % result.humidity)

        time.sleep(2) #测量频率 2秒/次

except KeyboardInterrupt:
    print("停止采集")
    GPIO.cleanup()
执行代码,效果如下图,测量结果如果一开始不准确,可以等待一下数据刷新的结果;
实验结果
从上图可见,测量结果温度还是很准确的,湿度有差异,但是也在合理误差范围。

树莓派摄像头实验(一)

    很久前曾入手一个红外夜视摄像头,最近倒腾出来准备试一下;尝试如何拍照然后手机查看,还有实时摄像然后手机浏览。
首先连接摄像头,推荐关机连接,防止损坏摄像头;连接效果如下:
连接效果
然后打开树莓派Camera设置,执行以下命令:(当然也可以页面设置)

sudo raspi-config
命令执行后,选择5 Interfacing Options,然后Enter键选择;
列表项
然后选择第一个Camera选项,按Enter键选择,然后选择"是",重启系统完成。
选择Camera
(一)拍照,执行如下命令

raspistill -o show.jpg -rot 0 -w 1024 -h 768 -t 5000   -v
其中raspistill是摄像头拍照命令,具体参数如下:
参数含义
-o图像输出地址,如果为”-“,将输出标准输出设备
-rot图像旋转角度,支持0、90、180、270
-w图像宽度width
-h图像高度height
-t图像拍摄延迟时间,单位毫秒
-v输出拍照详细信息
-tl间隔拍照,每多少毫秒拍摄一张
-q设置图片品质,范围0-100
命令执行后,可见当前目录产生一个show.jpg图片,为了查看图片内容,我们可以参考上次文章,https://www.shumeijiang.com/2021/10/30/手机连接树莓派实验/;
(1)手机ssh登录树莓派;
(2)进入相片所在目录;
(3)点击图片下载,然后在下载目录点击图片查看;
(4)效果如下图;
手机查看效果
(二)实时摄像,执行raspivid命令,此命令是树莓派摄像命令;

raspivid -o - -t 0 -w 640 -h 360 -fps 25|cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8989}' :demux=h264
注意:如果执行上面命令报错cvlc命令没有找到,则需要执行sudo apt install vlc安装即可。
其中dst是输出端口,具体的参数含义可以网上查询;执行后,数据流产生了,但是我们没有存储,这个时候就需要一个能实时查看图像流的软件,可以用VLC、KMPlayer;此处我们用KMPlayer,效果如下图;(App Store下载)
浏览效果
    输入树莓派的静态IP加上命令启动时的端口号,然后点击打开,可以看到摄像头的实时视频,不过测试时发现有些延迟严重,下篇文章就实验PiCamera。

树莓派尝试web.py

    web.py是Python的web框架,它简单而且功能强大。它安装后启动服务,然后通过url和端口访问服务内容;下面将简单尝试一下,更多的内容可以参考官网内容:https://webpy.org/docs/0.3/
首先安装服务,可以采用pip安装,这边用的是Python3版本;

pip3 install web.py
模块安装后,启动服务,首先新建jiujiang.py,然后录入如下代码;

#!/usr/bin/env python
#coding:utf-8

'''
from JiuJiang
树莓酱的操作实例
https:://www.suhmeijiang.com
'''

#模块引入
import web

#路由规则定义
urls = (
    '/index/(.*)', 'index',
    '/jiujiang/(.*)', 'jiujiang'
)
app = web.application(urls, globals())

class index:
    def GET(self, name):
        if not name:
            name = 'World'
        return 'Hello, ' + name + '!'
#定义处理类
class jiujiang:
    def GET(self, data):
        return 'jiujiang test '+ data

#服务启动
if __name__ == "__main__":
    app.run()
文件保存后,执行命令,启动服务;其中2323是自定义端口,不写默认为8080;

python3 jiujiang.py  2323
服务启动后,我们可以用同局域网的电脑和手机访问;http://192.168.0.118:2323/jiujiang/webpy
浏览器访问效果
手机访问效果
接口访问后,可以看到服务端访问日志如下图:
访问日志
 其他操作或者效果可以参考网上其他讲解。

陀螺仪模块实验-获取欧拉角

    在三维空间中,我们定义分别在三个方向存在X轴,Y轴以及X轴,当物体转动时,欧拉角用来表示围绕三个轴转动的三个角度;可以用矩阵来表示;这篇文章将实验mpu6050陀螺仪如何获取欧拉角。
    其中围绕X轴旋转定义为Pitch(俯仰角);围绕Y轴旋转定义为Yaw(偏航角);围绕Z轴旋转定义为Roll(翻滚角)。
    首先建立空间坐标系,根据右手坐标系法则,右手手心面向我们,然后食指向上,中指指向我们,这时候,大拇指指向为X轴,食指指向Y轴,中指指向Z轴;如下图:
图来自网络
借用网络图片可看到三个角度运动方向:
自制一个飞机小模型,分别展示三个动作如下:
俯仰
翻滚
偏航
下面将实验mpu6050陀螺仪传感器,分别执行俯仰,翻滚,偏航动作,然后获取对应的角度。
获取陀螺仪数据,我们使用现成的模块,安装需要执行以下命令:

pip install mpu6050-raspberrypi
其他安装可参考文章:https://www.shumeijiang.com/2021/10/23/陀螺仪模块实验-准备/
实验过程:
    上面动图可见,先执行左右翻滚,可见roll数值在变化;执行前后俯仰时,pitch数值在变化;执行左右偏航时,yaw数值变化。
程序部分可参考文章: https://blog.csdn.net/weixin_38956024/article/details/94898531
算法部分参考:https://blog.csdn.net/weixin_38956024/article/details/94757023

手机连接树莓派实验

    平时都是通过电脑ssh连接树莓派,这次尝试通过手机登录树莓派然后进行命令行输入以及文件查看;当然前提是树莓派设置好静态IP。
示例app
   这次用的是Terminal & SSH和PiHelper两个手机app,都是从Apple手机的App Store下载;下面分别测试如何使用两个APP。
1、Terminal & SSH
打开app后,首先配置登录信息,点击右上角的+号,然后弹层输入配置信息,如下图:
    其中Name为自定义名称,用于区分登录信息,Host是登录树莓派的静态IP地址,Port是默认端口22,Username是登录名称,这边是pi,密码如果没有修改过是raspberry,Use SFTP(Secure File Transfer Protocol)默认打开,表示是否可以传输文件;Path是登录后默认进入的路径地址。
登录效果
命令行界面
    文件下载部分,点击文件可以看到文件下载,然后查看最底部导航栏的Documents按钮,可以看到已下载文件。
2、PiHelper
点击进入APP,然后点击+新建连接;弹出新页面输入如下图配置,同上面:
    配置好后,测试连接,成功后保存配置;保存后跳转首页,然后点击配置好的连接项,效果如下图:其中GPIO为GPIO口注解,TERM为命令行页面,SFTP为文件列表;
点击TERM后,进入命令行界面,如下图:
点击SFTP,进入文件列表页面:

树莓派Zero系统烧录实验

    前面曾经实验过给树莓派3B+烧录系统,文章地址: https://www.shumeijiang.com/2021/04/17/树莓派烧录系统/;由于3B+有正常的USB接口,所以可以正常外接鼠标,键盘以及正常的尺寸的HDMI接口外接显示器;但是zero由于尺寸不一,加之手里面没有对应的转换接口,所以这次尝试一下烧录系统以及配置网络信息。
    首先准备好树莓派Zero(已焊好针脚),适配的电源,以及一个TF卡(最好大于等于16G),TF卡读卡器;一台Windows电脑。
实验一:
1、TF卡按上面的文章烧录系统;
2、如果手里面有非zero其他树莓派版本,将卡插入,用正常版本进行设置;
3、外接鼠标、键盘、显示器然后开机登录,设置网络以及下载相关软件;
4、网络设置好后,将TF卡插入到树莓派zero上,启动zero;
5、启动后,正常ssh连接即可;
6、这个方法依赖其他硬件,所以不做重点,有条件的可以尝试。
实验二:
采用串口模式,通过一个USB转串口模块,连接Zero和电脑,然后进行系统设置;
1、首先按前面文章烧录系统,烧录完成后,打开TF卡并寻找config.txt文件;
2、在config.txt文件的尾部添加打开串口命令,如下图:
 3、 将TF卡插入Zero,用杜邦线连接树莓派Zero和USB转串口模块,效果如下图: 
4、将上图的USB插入Windows电脑,然后树莓派Zero开机;
5、登录Windows电脑,下载串口通信软件Putty,也可以用其他软件,下载地址:https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html;
6、软件下载并安装,安装好后打开软件,并设置如下图:
参数设置
6、如上图设置好端口COM3以及波特率115200,连接方式选择Serial,然后点击右下方的Open按钮;
7、页面打开后,回车,按提示输入账号pi和初始密码raspberry,然后进入系统命令行交互页面,如下图:
8、设置静态IP地址,后面就可以通过固定IP地址登录;参考文章:https://www.shumeijiang.com/2021/04/17/树莓派设置静态ip/;
 9、静态IP地址设置好后,需要打开ssh支持,可参考文章:https://www.shumeijiang.com/2019/12/08/基于命令行打开i2c协议支持; 
10、设置好静态IP地址和打开ssh后,重启Zero,然后断开USB串口模块,就可以通过正常ssh登录了;
11、其他参考文章:
(1)切换清华源:https://www.shumeijiang.com/2021/04/17/树莓派切换清华镜像源/;
(2)安装可视化工具VNC:https://www.shumeijiang.com/2021/05/06/树莓派安装vnc/

OLED显示屏驱动显示实验

    前面文章曾经做过LCD液晶显示屏的实验,文章地址:
(https://www.shumeijiang.com/2020/04/18/lcd液晶显示屏滚动播放实验/),实验使用的是LCD1602液晶显示屏;本篇文章使用的是12832OLED显示屏,驱动显示样例数据以及自定义文字数据。
#接线示例
接线示例
   显示屏使用的I2C协议通信,由于树莓派默认是关闭的因此需要打开,相关的设置可以参考以前的文章;
1、https://www.shumeijiang.com/2019/12/08/基于命令行打开i2c协议支持/;
2、https://www.shumeijiang.com/2020/04/14/命令行下i2c读写操作/
杜邦线接好后,执行命令:

i2cdetect  -y 1
命令执行后,当出现地址0x3c表示连接成功,并读取到模块地址;
    连接成功后,我们将实验驱动显示文字或者图形图像效果;由于Python已经有了很多成熟的驱动库,因此我们将采用已有的库实验驱动;代码仓库地址:https://github.com/adafruit/Adafruit_Python_SSD1306.git。
代码下载可以通过下面的命令:

git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
其中git是代码仓库管理工具,如果执行命令没有git,则需要执行安装命令:

apt-get install git
代码下载后,可以得到如下目录结构:
目录结构
然后进入目录,执行安装程序:

sudo python  setup.py install
其中examples目录里面是几个例子,可以直接执行就可以看到效果,如下图:

python shapes.py
其中文字显示部分我们可以参考上面的例子的部分:

# Write two lines of text.
draw.text((x, top),    'Hello',  font=font, fill=255)
draw.text((x, top+20), 'World!', font=font, fill=255)
通过修改上面两行代码,我们可以自定义显示内容,如下效果:

陀螺仪模块实验-准备

    MPU6050是一款陀螺仪,它集成了3轴角速度计、3轴加速度计以及温度测量等功能;具体介绍可以网上搜索,本篇文章将介绍它如何接线以及如何通过树莓派读取数据。
    其中陀螺仪的原理是,一个旋转物体的旋转轴所指向的方向在不受外力影响时,是不会改变的;人们利用这个原理,用它来保持方向。通过I2C通信,读取轴指向的方向,将信号传送给树莓派处理。这个跟骑自行有相似之处,骑车骑的越快,车子越会沿着前进方向而不容易倾倒,因为车子有一种保持水平的力量。
    加速度是当物体在加速过程中作用在物体上的力,比如当汽车加速前进时,就有一种加速度的力,可以理解为正值;当汽车刹车时,就有一种相反方向的加速度,可以理解为负值;加速度传感器就是测量加速度的电子设备,多数加速度传感器是根据压电效应的原理在工作。
接线示例
    其中I2C协议默认是关闭的,需要手工打开,可参考文章:https://www.shumeijiang.com/2019/12/08/基于命令行打开i2c协议支持/。
    还有 I2C操作可参考文章:https://www.shumeijiang.com/2020/04/14/命令行下i2c读写操作/
    接线接好后,执行命令,可见陀螺仪模块地址:
地址为0x68
   下篇文章将介绍如何获取数据。