存档10月 2021

手机连接树莓派实验

    平时都是通过电脑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
   下篇文章将介绍如何获取数据。

树莓派间通信-socket通信

    上篇文章已经尝试过使用mongo作为介质,来实现消息的传递;今天这篇文章将尝试socket,来实现消息传递;具体scoket的详细信息,可以网上搜索查看,这篇文章主要是讲解两个树莓派之间如何使用socket通信。
    使用mongo文章:https://www.shumeijiang.com/2021/01/24/多个树莓派之间实现通信对话/
两个树莓派,一个3b+,一个zero
#上图可见,实验用到一个树莓派zero(上),一个树莓派3b+(下);
#server服务端代码

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

import socket
import time

host = '192.168.0.118'  #本机(主机)ip
port = 1026   # 自定义端口

server = socket.socket() #默认AF_INET、SOCK_STREAM
server.bind((host, port)) #连接主机
server.listen(5) #连接最多5个设备

while True:
    connect, address = server.accept() #开始接收客户端连接请求

    #处理连接交互信息
    while True:
        data = connect.recv(1024) #接收客户端发送的信息
        if not len(data):
            print('链接已断开')
            break
        else:
            print('收到信息:%s'%data)

        #信息回复
        connect.send('ok')

server.close()
#client客户端

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

import socket
import time

host = '192.168.0.118' #主机地址
port = 1026

client = socket.socket()
client.connect((host, port)) #连接主机

while True:
    s = raw_input(">>")   #接收输入
    client.send(s)   #发送给主机信息
    data = client.recv(1024)  #接收主机回复信息

    #主机回复信息处理
    if data=='ok':
        print('命令传输完成')

client.close()
    从上面代码可知,客户端接收用户输入,然后发送给服务端,服务端将信息处理,然后发送给客户端处理状态。
#实验过程:
1、首先启动server端,执行Python server.py;
2、接着启动client端,执行Python client.py;
3、client端,提示">>",输入指令,然后回车发送给服务端;
4、服务端接收到数据,然后处理后将处理状态发送给客户端;
#效果如下图:
客户端发送命令
服务端接收处理