树莓派折腾记录 - yunfanfan/Notes GitHub Wiki

树莓派折腾记录

摄像头调取拍照

sudo fswebcam -r 1280x960 ./test.jpg

还有一个命令无法使用,不知道为什么fswebcam /dev/video0 ~/image.jpg

重大PYPI 镜像使用帮助

PyPI 镜像使用帮助 :: cqumirror-wiki

查询温度

/opt/vc/bin/vcgencmd measure_temp

树莓派3b引脚图

TJnVmg

温湿度传感器教程

详细原理版lookTemp2.py

树莓派基础实验27:温湿度传感器DHT11 实验 - 云+社区 - 腾讯云

#!/usr/bin/env python
import RPi.GPIO as GPIO
import numpy as np
import time
 
DHTPIN = 17         #引脚号17

GPIO.setmode(GPIO.BCM)      #以BCM编码格式

def read_dht11_dat():
    
    GPIO.setup(DHTPIN, GPIO.OUT)
    GPIO.output(DHTPIN, GPIO.LOW)
    #给信号提示传感器开始工作,并保持低电平18ms以上
    time.sleep(0.02)                #这里保持20ms   
    GPIO.output(DHTPIN, GPIO.HIGH)  #然后输出高电平
    
    GPIO.setup(DHTPIN, GPIO.IN)    
    # 发送完开始信号后得把输出模式换成输入模式,不然信号线上电平始终被拉高
 
    while GPIO.input(DHTPIN) == GPIO.LOW:
        continue
    #DHT11发出应答信号,输出 80 微秒的低电平
    
    while GPIO.input(DHTPIN) == GPIO.HIGH:
        continue
    #紧接着输出 80 微秒的高电平通知外设准备接收数据
    
    
    #开始接收数据
    j = 0               #计数器
    data = []           #收到的二进制数据
    kk=[]               #存放每次高电平结束后的k值的列表
    while j < 40:
        k = 0
        while GPIO.input(DHTPIN) == GPIO.LOW:  # 先是 50 微秒的低电平
            continue
        
        while GPIO.input(DHTPIN) == GPIO.HIGH: # 接着是26-28微秒的高电平,或者 70 微秒的高电平
            k += 1
            if k > 100:
                break
        kk.append(k)
        if k < 8:       #26-28 微秒时高电平时通常k等于5或6
            data.append(0)      #在数据列表后面添加一位新的二进制数据“0”
        else:           #70 微秒时高电平时通常k等于17或18
            data.append(1)      #在数据列表后面添加一位新的二进制数据“1”
 
        j += 1
 
    print("sensor is working.")
    print '初始数据高低电平:\n',data    #输出初始数据高低电平
    print '参数k的列表内容:\n',kk      #输出高电平结束后的k值
    
    m = np.logspace(7,0,8,base=2,dtype=int) #logspace()函数用于创建一个于等比数列的数组
    #即[128 64 32 16 8 4 2 1],8位二进制数各位的权值
    data_array = np.array(data) #将data列表转换为数组

    #dot()函数对于两个一维的数组,计算的是这两个数组对应下标元素的乘积和(数学上称之为内积)
    humidity = m.dot(data_array[0:8])           #用前8位二进制数据计算湿度的十进制值
    humidity_point = m.dot(data_array[8:16])
    temperature = m.dot(data_array[16:24])
    temperature_point = m.dot(data_array[24:32])
    check = m.dot(data_array[32:40])
    
    print humidity,humidity_point,temperature,temperature_point,check
    
    tmp = humidity + humidity_point + temperature + temperature_point
    #十进制的数据相加
 
    if check == tmp:    #数据校验,相等则输出
        return humidity, temperature
    else:               #错误输出错误信息
        return False
 
def main():
    print "Raspberry Pi DHT11 Temperature test program\n"
    time.sleep(1)           #通电后前一秒状态不稳定,时延一秒
    while True:
        result = read_dht11_dat()
        if result:
            humidity, temperature = result
            print "humidity: %s %%,  Temperature: %s  ℃" % \
                  (humidity, temperature)
            print '\n' 
            time.sleep(1)

        if result == False:
            print "Data are wrong,skip\n"
            time.sleep(1)
            
def destroy():
    GPIO.cleanup()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        destroy() 

简单易用版lookTemp.py

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
 
channel =4
data = []
j = 0
 
GPIO.setmode(GPIO.BCM)
 
time.sleep(1)
 
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
 
while GPIO.input(channel) == GPIO.LOW:
  continue
while GPIO.input(channel) == GPIO.HIGH:
  continue
 
while j < 40:
  k = 0
  while GPIO.input(channel) == GPIO.LOW:
    continue
  while GPIO.input(channel) == GPIO.HIGH:
    k += 1
    if k > 100:
      break
  if k < 8:
    data.append(0)
  else:
    data.append(1)
 
  j += 1
 
print("sensor is working.")
print(data)
 
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
 
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
 
for i in range(8):
  humidity += humidity_bit[i] * 2 ** (7-i)
  humidity_point += humidity_point_bit[i] * 2 ** (7-i)
  temperature += temperature_bit[i] * 2 ** (7-i)
  temperature_point += temperature_point_bit[i] * 2 ** (7-i)
  check += check_bit[i] * 2 ** (7-i)
 
tmp = humidity + humidity_point + temperature + temperature_point
 
if check == tmp:
  print("temperature :", temperature, "*C, humidity :", humidity, "%")
else:
  print("wrong")
  print("temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp)
 
GPIO.cleanup()

软件工程师树莓派获取室内温湿度的坎坷之旅 - 三升水 - 博客园

监控系统

参考:树莓派上的温湿度环境监控 - 简书

存json数据

Python JSON | 菜鸟教程

#!/usr/bin/python
import json
import copy
# 接在上面的lookTemp.py后面写

env = []
if humidity_dht11 is not None and temperature_dht11 is not None:
        data = {"metric":"humidity","tag":"module=dht11","value":humidity}
        env.append(copy.copy(data))
        data = {"metric":"temperature","tag":"module=dht11","value":temperature}
        env.append(copy.copy(data))
if len(env) > 0:
        with open("./env.json", 'w') as f:
                f.write(json.dumps(env))

crontab

19. crontab 定时任务 — Linux Tools Quick Tutorial

编辑crontab文件:

如果希望添加、删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就可以用vi来编辑crontab文件:

$ crontab -e

Crontab.guru - 在线验证crontab语法

放入 crontab 里,这个脚本每分钟运行一次。

*/1 * * * * python3 ~/study/lookTemp2Json.py

ubuntu下启动、停止与重启cron:

$sudo /etc/init.d/cron start
$sudo /etc/init.d/cron stop
$sudo /etc/init.d/cron restart

python 获取格式化时间:time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) ,输出2016-04-07 10:25:09

安装vim

humiaozuzu/dot-vimrc: Maple's vim config files

SSD1306 OLED 屏幕

在树莓派上使用 SSD1306 OLED 屏幕 | 树莓派实验室

安装TensorFlow

参考:树莓派安装TensorFlow教程!树莓派安装TensorFlow2.0!超详细! - 知乎

安装python3.7和pip3之后

sudo apt install libatlas-base-dev

安装虚拟环境

install -U virtualenv

创建虚拟环境

virtualenv --system-site-packages -p python3 ./venv

激活虚拟环境。注意,从这一步开始,一直处于虚拟环境哦。

source ./venv/bin/activate

安装依赖包

pip install keras_applications==1.0.8 --no-deps
pip install keras_preprocessing==1.1.0 --no-deps
pip install h5py==2.9.0
pip install -U six wheel mock

上一步其实不需要,需要执行安装tensorflow的命令就会自动安装各种包,比如我安装了

Successfully installed absl-py-0.15.0 astunparse-1.6.3 cachetools-4.2.4 flatbuffers-1.12 gast-0.3.3 google-auth-2.3.3 google-auth-oauthlib-0.4.6 google-pasta-0.2.0 h5py-2.10.0 keras-preprocessing-1.1.2 markdown-3.3.6 opt-einsum-3.3.0 protobuf-3.19.1 pyasn1-0.4.8 pyasn1-modules-0.2.8 rsa-4.8 six-1.15.0 tensorboard-2.7.0 tensorboard-data-server-0.6.1 tensorboard-plugin-wit-1.8.0 tensorflow-2.4.0 tensorflow-estimator-2.4.0 termcolor-1.1.0 typing-extensions-3.7.4.3 wrapt-1.12.1

在安装依赖包时,有的包清华源有,安装速度很快。有的包清华源没有,会到默认源去下载,会很慢甚至超时失败。如遇超时失败需要重试。

如果因为速度过慢,安装失败了可以用电脑打开地址用浏览器下载,在用sftp传送到树莓派去安装

按照【AI人工智慧】在Raspberry Pi上安裝NCSDK – CAVEDU教育團隊技術部落格最后的测试指令,我这里是失败了,并且提示

making run
python3 hello_ncs.py;
Traceback (most recent call last):
  File "hello_ncs.py", line 19, in <module>
    import mvnc.mvncapi as fx
ModuleNotFoundError: No module named 'mvnc'
make: *** [Makefile:11:run] 错误 1

之前的教程缺了一个步骤,根据使用Movidius NCS获取你的TensorFlow

在ncsdk中make install之后,还需要make examples,它会安装opencv。

一个小时后出错了

make[2]: *** [modules/videoio/CMakeFiles/opencv_videoio.dir/build.make:128:modules/videoio/CMakeFiles/opencv_videoio.dir/src/cap_ffmpeg.cpp.o] 错误 1
make[1]: *** [CMakeFiles/Makefile2:7878:modules/videoio/CMakeFiles/opencv_videoio.dir/all] 错误 2
make: *** [Makefile:163:all] 错误 2

make examples starting.
(cd examples; make)
make[1]: 进入目录“/home/pi/Downloads/ncsdk/examples”
make -C apps/. 
make[2]: 进入目录“/home/pi/Downloads/ncsdk/examples/apps”
make -C hello_ncs_py/. 
make[3]: 进入目录“/home/pi/Downloads/ncsdk/examples/apps/hello_ncs_py”
nothing to make, use 'make run' to run.
make[3]: 离开目录“/home/pi/Downloads/ncsdk/examples/apps/hello_ncs_py”
make -C multistick_cpp/. 
make[3]: 进入目录“/home/pi/Downloads/ncsdk/examples/apps/multistick_cpp”

making googlenet
(cd ../../caffe/GoogLeNet; make compile; cd ../../apps/multistick_cpp; cp ../../caffe/GoogLeNet/graph ./googlenet.graph;)
make[4]: 进入目录“/home/pi/Downloads/ncsdk/examples/caffe/GoogLeNet”

making prereqs
(cd ../../data/ilsvrc12; make)
make[5]: 进入目录“/home/pi/Downloads/ncsdk/examples/data/ilsvrc12”
--2021-11-28 17:13:07--  https://raw.githubusercontent.com/BVLC/caffe/master/data/ilsvrc12/get_ilsvrc_aux.sh
正在解析主机 raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...
正在连接 raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... 已连接。
GnuTLS: The TLS connection was non-properly terminated.
无法建立 SSL 连接。
chmod: 无法访问'get_ilsvrc_aux.sh': 没有那个文件或目录
/bin/sh: 1: ./get_ilsvrc_aux.sh: not found
make[5]: *** [Makefile:9:all] 错误 127
make[5]: 离开目录“/home/pi/Downloads/ncsdk/examples/data/ilsvrc12”
make[4]: *** [Makefile:24:prereqs] 错误 2
make[4]: 离开目录“/home/pi/Downloads/ncsdk/examples/caffe/GoogLeNet”
cp: 无法获取'../../caffe/GoogLeNet/graph' 的文件状态(stat): 没有那个文件或目录
make[3]: *** [Makefile:10:googlenet] 错误 1
make[3]: 离开目录“/home/pi/Downloads/ncsdk/examples/apps/multistick_cpp”
make[2]: *** [Makefile:12:multistick_cpp/.] 错误 2
make[2]: 离开目录“/home/pi/Downloads/ncsdk/examples/apps”
make[1]: *** [Makefile:12:apps/.] 错误 2
make[1]: 离开目录“/home/pi/Downloads/ncsdk/examples”
make: *** [Makefile:58:examples] 错误 2

暂时先不弄了

保存一些教程

Install OpenVINO™ toolkit for Raspbian* OS — OpenVINO™ documentation

按照这个又试了一下,没有成功

【AI人工智慧】在Raspberry Pi上安裝NCSDK – CAVEDU教育團隊技術部落格下载了装好环境的镜像,买了新的存储卡,可以下次刷进去试试看

⚠️ **GitHub.com Fallback** ⚠️