找到
12
篇与
树莓派
相关的结果
-
树莓派安装AIC8800d80驱动 环境信息 系统版本:6.6.51+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.6.51-1+rpt2 (2024-10-01) aarch64 GNU/Linux USB WIFI设备:TL-XDN7000H 设备芯片:aic8800d80 查看设备连接状态 lsusb如果在usb设备列表中看到类似 ID a69c:5721 aicsemi AIC Wlan 的输出,是将设备识别为了存储模式,需要将存储模式修改为wlan模式 切换模式(非必须) 使用命令 sudo usb_modeswitch -KQ -v a69c -p 5721将存储模式修改为wlan模式 命令模式需要在每次启动都需要输入,比较麻烦,可以使用udev来管理设备 sudo vim /etc/udev/rules.d/70-usb-modeswitch.rules粘贴以下内容 ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="a69c", ATTR{idProduct}=="5721", RUN+="/usr/sbin/usb_modeswitch -v a69c -p 5721 -K"重新加载规则 sudo udevadm control --reload-rules sudo udevadm triggerimage-20241009142645898图片 安装驱动 我的TP-Link官方驱动在arm架构中安装失败,很可能是因为我的内核版本比较高,导致很多库不支持。 这里找到了绿联的AIC8800D80驱动,和我使用的TL-XDN7000H芯片一致 驱动下载地址: {% link 绿联,驱动下载,绿联WiFi6 USB无线网卡AIC8800D80驱动,https://www.lulian.cn/download/135.html %} 驱动下载链接:绿联WiFi6 USB无线网卡AIC8800D80驱动 文件中有详细安装教程,这里不再赘述 我这里直接安装了里面的aic8800d80fdrvpackage_2024_0606.deb文件 image-20241009143713835图片 成功驱动TL-XDN7000H image-20241009143856932图片 -
树莓派+EC20模块实现连接蜂窝网和短信收发 软硬件 树莓派 ec20 wvdial gammu SIM卡 EC20模块 概述 EC20-CE是移远通信最近推出的LTE Cat 4无线通信模块,采用LTE 3GPP Release 11 技术,支持最大下行速率 150 Mbps和最大上行速率50 Mbps;同时在封装上兼容移远通信多网络制式LTE EC21系列、EC25系列和EG25-G 模块,实现了3G网络与4G网络之间的无缝切换。 EC20-CE采用镭雕工艺,镭雕工艺具有外观更漂亮、金属质感强、散热更好、信息不容易被抹除、更能适应自动化需求等优点。 EC20-CE内置多星座高精度定位GNSS(GPS/GLONASS/BDS/Galileo/QZSS)接收机;在简化产品设计的同时,还大大提升了定位速度及精度。 EC20-CE内置丰富的网络协议,集成多个工业标准接口,并支持多种驱动和软件功能(适用于Windows 7/8/8.1/10/11、Linux、Android等操作系统下的USB驱动等),极大地拓展了EC20-CE在M2M领域的应用范围,如CPE、路由器、数据卡、平板电脑、车载、智能安全以及工业级PDA等。 产品特性 更多详情可到官网查看 {%link LTE EC20-CE,QUECTEL,https://www.quectel.com.cn/product/lte-ec20-ce %} 产品手册 Quectel_Product_Brochure_CN_V7.8) 查看设备是否挂载成功 使用命令 sudo ls /dev |grep ttyUSB挂载成功会有如图输出 要是没有看到设备则检查设备是否稳定插入、更换USB口或者重启设备之后再重新使用命令查看 拨号上网 wvdial 安装 wvdial是一个方便使用的PPP拨号模块,它能调用调制调节器,并通过PPP上网,无需像手动拨号一样配置繁琐的文件 sudo apt update sudo apt install wvdial 配置 修改配置文件 sudo vim /etc/wvdial.conf 可以继续使用 [Dialer Defaults]也可以重新根据自己需要添加,我这里为了没有多余手机卡,也为了方便输入命令,就直接使用 电信/移动SIM卡使用以下配置 [Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Modem Type = Analog Modem Modem = /dev/ttyUSB3 Baud = 115200 New PPPD = yes ISDN = 0 Phone = *99# Username = card Password = card联通卡使用以下配置 [Dialer Defaults] Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = at+cgdcont=1,"ip","uninet" Modem Type = Analog Modem Modem = /dev/ttyUSB3 Baud = 115200 New PPPD = yes ISDN = 0 Phone = *99# Password = card Username = card配置来源于 Quectel EC20 在 Linux 上的使用 在配置文件中大部分都不需要自己调整,只有Modem和Baud需要根据自己设备情况进行调整 Modem:根据情况选择合适的设备我的这个ttyUSB2和ttyUSB3都能正常使用 Baud:根据情况选择合适的波特率,对于ec20来说9600-115200都可以 启动wvdial sudo wvdial 查看网络设备 ifconfig 可以看到多了ppp0和wwan0两个设备 正常情况还无法访问网络,因为默认路由在其他网络设备中,需要重新配置路由 配置路由 查看路由 sudo route配置路由的方式有很多种,我这里的方法比较简单粗暴,需要具体配置的可自己查找方法 sudo route add default dev ppp0该命令会在路由表中添加一条新的默认路由 在每次重启后都会刷新路由,可以将命令加到/etc/rc.local中,每次开机都执行添加方法 sudo vim /etc/rc.local在exit 0前添加 su - root -c `route add default dev ppp0`通过systemctl来管理wvdial 开机自启wvdial的方法有很多种,并不一定要使用systemctl 最简单的就是和添加路由一样,在/etc/rc.local中添加启动命令 sudo vim /etc/rc.local # 添加 wvdial & 编写控制wvdial启动和检测wvdial运行脚本 新建sh脚本文件,可以放到你想存放的地方 我这里在root用户下/root/shell中 sudo mkdir /root/shell && cd shell # 名字可以任起 sudo vim onwvdial.shwvdial控制脚本内容 #!/bin/bash DEVICE_NAME="/dev/ttyUSB3" # 和wvdial配置设备一致 LOG_FILE="/var/log/wvdial_on.log" # 日志文件存储位置 PROCESS_NAME=(wvdial pppd) # 需检查占用软件 # 定义函数检查进程是否占用设备 check_device_usage() { local process_name=$1 local device=$2 local pids=$(pgrep -f "$process_name") if [ -z "$pids" ]; then return fi for pid in $pids; do echo "pid:$pid" local device_count=$(lsof -p "$pid" 2>/dev/null | grep -e "$device" | wc -l) if [ "$device_count" -gt 0 ]; then echo "占用设备:$device" kill $pid fi done return } function check_wvdial() { if pgrep -x "wvdial" >/dev/null; then return 0 # wvdial 进程在运行 else return 1 # wvdial 进程未运行 fi } for process in $PROCESS_NAME; do echo "进程名: $process" check_device_usage $process $DEVICE_NAME done wvdial >> "$LOG_FILE" 2>&1 & route add default dev ppp0 while true;do if ! check_wvdial;then echo "$(date +"%Y-%m-%d %H:%M:%S") - wvdial 进程未运行,正在重新启动..." >> "$LOG_FILE" wvdial >> "$LOG_FILE" 2>&1 & fi sleep 120 done该脚本包含功能: 停止wvdial启动前所需设备的占用 启动wvdial 添加ppp0默认路由 每120秒检测wvdial是否运行 记录启动、错误日志 设置可执行权限 sudo chmod u+x /root/shell/onwvdial.sh 编写systemctl控制文件 sudo vim /etc/systemd/system/wvdial_on.service配置文件内容如下: [Unit] Description=Safe Start Wvadil After=dev-ttyUSB3.device Requires=dev-ttyUSB3.device [Service] User=root Group=root ExecStart=/root/shell/onwvdial.sh # 路径根据自己配置修改 [Install] WantedBy=multi-user.target 启动服务 systemctl daemon-reload systemctl start wvdial_on.service systemctl enable wvdial_on.service设置自启动后就不需要在/etc/rc.local中添加修改路由和启动wvdial命令了 配置防火墙 如果在ec20模块连接4G网络后还需要使用wifi则需要配置防火墙,不需要则不用配置 sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE sudo iptables -A FORWARD -i ppp0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o ppp0 -j ACCEPT 将防火墙规则写入文件 sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"顺序执行命令即可 收发短信 安装软件gammu sudo apt install gammu gammu-smsd 配置gammu 使用命令 sudo gammu-config配置可参考我的 或者直接修改/root/.gammurc,效果是一样的 如果没有/root/.gammurc文件就使用命令 [gammu] port = /dev/ttyUSB2 model = connection = at19200 synchronizetime = yes logfile = logformat = nothing use_locking = no gammuloc =修改 /etc/gammu-smsdrc [gammu] # Please configure this! port = /dev/ttyUSB2 connection = at19200 # Debugging #logformat = textall # SMSD configuration, see gammu-smsdrc(5) [smsd] service = files logfile = syslog RunOnReceive = /root/msmtp/sh/send-smsd.sh # 发送邮件脚本 # Increase for debugging information debug = yes #debuglevel = 0 # Paths where messages are stored inboxpath = /var/spool/gammu/inbox/ outboxpath = /var/spool/gammu/outbox/ sentsmspath = /var/spool/gammu/sent/ errorsmspath = /var/spool/gammu/error/ 编辑收到短信后自动发送邮件脚本 树莓派配置邮件这里不再赘述,可以自行搜索,或者参考我之前的一篇博客 {% link 树莓派开机自动发送邮件,TeohZY,https://blog.teohzy.com/posts/smpxjfsyj/ %} 编辑脚本 vim /root/msmtp/sh/send-smsd.sh文件路径根据自己需要修改 #!/bin/bash for i in `seq $SMS_MESSAGES` ; do if [ $i -eq 1 ]; then phone="$SMS_1_NUMBER" fi tmp="$(eval echo '$'SMS_${i}_TEXT)" message="$text$tmp" done echo "$message" |mutt -s "树莓派短信转发" xxx@163.com 重启gammu systemctl restart gammu-smsd.service 短信测试 向目标号码发送短信后邮箱能收到短信 通过终端向其他号码发送短信 gammu-smsd-inject TEXT 目标号码 -text '短信内容' -unicode如果收到短信说明配置成功 短信发送失败踩坑 查看端口占用 sudo lsof /dev/ttyUSB2如果有其他进程和gammu-sms占用设备,可以使用kill命令结束非必须进程 设备波特率和wvdial重复 检查wvdial配置和gammu配置,如果wvdial已经使用了ttyUSB3和波特率115200则gammu配置中就不要再使用相同设备和波特率,可以使用ttyUSB2和波特率at19200 ModemManager占用设备 查看设备后发现有进程ModemMnana在使用设备,可以停用ModemManager 需要考虑实际使用情况来判断,在确认ModemManager确实不是必要软件后再进行操作 sudo systemctl disable ModemManager.service sudo systemctl stop ModemManager.service -
树莓派访客拍照C语言版 前引 不知道因为什么原因Picamera2包调用摄像头拍照,在一个程序中达到一定次数之后就会导致系统的内存泄漏,除了重启软件没有什么好的方法来解决,但作为一个监控性质的软件,经常发生这种错误还是比较无法接受的事情。 因此决定看看能不能直接使用C语言来完成监控人员到访和录像这一系列动作 代码 代码部分十分简单 #include <pigpio.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/wait.h> #include <time.h> int pinNumber = 18; int getVideo(){ time_t timep; struct tm *p; char filePath[28]; time (&timep); p=gmtime(&timep); int hour = 8+p->tm_hour; sprintf(filePath,"%s%d%02d%02d%02d%02d%02d%s","/Disk/MyCloud/Stream/Safe/",1900+p->tm_year,1+p->tm_mon,p->tm_mday,(hour>=24)?(hour-24):hour,p->tm_min,p->tm_sec,".mp4"); char command[1000]; sprintf(command,"%s%s%s%s", "libcamera-vid -t 5000 --width 1280 --height 720 --codec libav -o ",filePath," && sudo chown www-data ",filePath); return system(command); } int main() { int value = 0; if (gpioInitialise() < 0) { printf("pigpio initialization failed\n"); return 1; } gpioSetMode(pinNumber, PI_INPUT); while(1){ value = gpioRead(pinNumber); if(value==1){ getVideo(); } time_sleep(1.0); } gpioTerminate(); return 0; }由于在之前 使用的GPIO库wiringPi.h已经暂停维护,在新版的树莓派系统中不在默认安装,这里使用了pigpio.h库 如果没有安装 sudo apt update sudo apt install pigpio 编译 gcc monitor.c -o monitor -lpigpio -lrt -lpthread 引脚编号 默认为BCM编号 主要拍照代码 system(command)实际是为了调用系统的libcamera-vid 即 sprintf(command,"%s%s%s%s", "libcamera-vid -t 5000 --codec libav -o ",filePath," && sudo chown www-data ",filePath);这部分代码为录一个5秒的视频并保存到filePath目录下,同时修改视频权限方便给Nextcloud修改查看 人体红外代码 int value = 0; if (gpioInitialise() < 0) { printf("pigpio initialization failed\n"); return 1; } gpioSetMode(pinNumber, PI_INPUT); while(1){ value = gpioRead(pinNumber); if(value==1){ getVideo(); } time_sleep(1.0); } gpioTerminate();当有人到访时输出高电平,检测到高电平时触发录像 -
树莓派开启个人热点(二)解决网速慢问题 前言 为了在方便树莓派联网的同时让其他设备也能上网,就有了将树莓派作为软路由的想法,经过在网上各种搜索后不断折腾,最终也实现了这一目的。有同样需求的可参照下文 {% link 树莓派开启个人热点,Mstzf,https://blog.teohzy.com/post/startAP/index.html %} 一番配置下来确实成功开启了个人热点,但是网速和稳定性一直不是很理想 问题原因 hostapd配置文件网络协议没有设置正确 hostapd v2.9 和 树莓派4B都已经可以支持WIFI5,而我之前的配置还在使用上个世纪的iee802.11a协议 解决办法 修改以下hostapd配置文件即可 # vim /etc/hostapd/hostapd.conf将原配置文件删除,替换为新的 interface=wlan0 driver=nl80211 ssid=AP-Pi4 hw_mode=a channel=0 ieee80211n=1 ieee80211ac=1 ieee80211ax=1 ieee80211d=1 ieee80211h=1 country_code=CN auth_algs=1 wpa=2 wpa_passphrase=123456789 wpa_key_mgmt=WPA-PSK WPA-PSK-SHA256 rsn_pairwise=CCMP macaddr_acl=0 wmm_enabled=1 wmm_ac_bk_cwmin=4 wmm_ac_bk_cwmax=10 wmm_ac_bk_aifs=7 wmm_ac_bk_txop_limit=0 wmm_ac_bk_acm=0 wmm_ac_be_aifs=3 wmm_ac_be_cwmin=4 wmm_ac_be_cwmax=10 wmm_ac_be_txop_limit=0 wmm_ac_be_acm=0 wmm_ac_vi_aifs=2 wmm_ac_vi_cwmin=3 wmm_ac_vi_cwmax=4 wmm_ac_vi_txop_limit=94 wmm_ac_vi_acm=0 wmm_ac_vo_aifs=2 wmm_ac_vo_cwmin=2 wmm_ac_vo_cwmax=3 wmm_ac_vo_txop_limit=47 wmm_ac_vo_acm=0 he_su_beamformer=1 he_su_beamformee=1 he_mu_beamformer=1 he_bss_color=5 he_default_pe_duration=0 he_basic_mcs_nss_set=2 he_oper_centr_freq_seg0_idx=0 require_ht=1 he_su_beamformee=1 he_su_beamformer=1 he_bss_color=3 he_twt_required=1 vht_capab=[SHORT-GI-80][RX-STBC1][TX-STBC][SU-BEAMFORMER][SU-BEAMFORMEE]重启hostapd # sudo systemctl start hostapd -
远程访问本地搭建的NextCloud(反向代理网页) 前言 在没有公网IP的情况下,很难从其他网络环境中直接访问到部署在本地的web服务,这时候就需要通过内网穿透的方式来实现。而对于内网穿透,有着很多的实现方式,最为常见的就是通过云服务器搭建和使用别人提供的服务 自建内网穿透服务 需要有自己的云服务器 服务端和客户端都需要下载frp,下载地址 => Releases · fatedier/frp (github.com) 服务端配置 编辑frps.ini文件 [common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 授权码,需要与客户端一致,请改为更复杂的 token = aaaaaa # frp管理后台端口,请按自己需求更改 dashboard_port = 7500 # frp管理后台用户名和密码,请改成自己的 dashboard_user = Mango dashboard_pwd = 12345678 enable_prometheus = true # http 端口可更改 vhost_http_port = 8090 # https 端口可更改 vhost_https_port= 8081 #vhost_https_port = 8080 # frp日志配置 路径根据自己需求更改 log_file = /root/frp/.frps.log log_level = error log_max_days = 3 配置systemd守护进程便于管理 vim /etc/systemd/system/frps.service输入以下内容并保存 [Unit] Description=fraps service After=network.target syslog.target Wants=network.target [Service] Type=simple #启动服务的命令(此处写你的frps的实际安装目录) ExecStart=/root/frp/frps -c /root/frp/frps.ini [Install] WantedBy=multi-user.target启动frps并设置开机自启 systemctl daemon-reload systemctl start frps systemctl enable frps 配置nginx 如果没有nginx先安装 apt update apt install nginx编辑配置文件 vim /etc/nginx/sites-enabled/nextcloud # 也可以不新建nextcloud文件,直接配置默认文件 vim /etc/nginx/sites-enabled/defaultnginx代理frps配置文件参考 可配置SSL开启https server{ listen 80; listen 443 ssl; #对应你的域名 server_name xxx.xxx.cn; # https 域名证书相关配置 # ssl证书存储路径,根据个人存储路径设置,我的被存在了 /etc/nginx/ssl/ 文件夹下面 ssl_certificate /etc/nginx/ssl/xxx.mstzf.cn.pem; ssl_certificate_key /etc/nginx/ssl/xxx.mstzf.cn.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:8090; # 映射的frp服务端frps.ini的 vhost_http_port端口 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_max_temp_file_size 0; proxy_redirect off; proxy_read_timeout 240s; client_max_body_size 0; } } }重启nginx服务 systemctl restart nginx 客户端配置 编辑frpc.ini文件 [common] # 远程服务器地址 # 替换为自己的域名 server_addr = 0.0.0.0 # 远程服务器监听端口 # 和服务端 bind_port 相同 server_port = 7000 # 连接密钥 # 必须和服务端配置相同 token = aaaaaa # 配置日志文件 # 日志级别:trace, debug, info, warn, error # 日志保存路径根据需求修改 log_file = /home/zh/frp/log/.log log_level = error log_max_days = 3 # 客户端管理配置 admin_addr = 127.0.0.1 admin_port = 7500 admin_user = Mango admin_pwd = 12345678 # 代理端口配置 模板 # [内容随意 如ssh] # type = 连接类型 如 tcp # local_ip = 127.0.0.1 # local_port = 22 本地需要代理的端口 # remote_port = 2222 将本地22端口代理为远程的2222端口 # 该配置下,可用远程 ip 的 2222 端口访问到本地的 22 端口服务 [ssh] type = tcp local_ip = 127.0.0.1 local_port = 22 remote_port = 2222 [rdp] type=tcp local_ip = 127.0.0.1 local_port=3389 remote_port=3389 [nx] type=tcp local_ip=127.0.0.1 local_port=4000 remote_port=4000 [web] type = http local_ip = 127.0.0.1 local_port = 80 #subdomain = root # 绑定的域名 和nginx配置下的 server_name 相同 custom_domains = xxx.mstzf.cn 为frpc配置systemd守护进程便于管理 编辑文件 vim /etc/systemd/system/frpc.service输入以下内容 [Unit] Description=Frp Client Service After=network.target [Service] Type=simple User=root Restart=on-failure RestartSec=5s # 根据frp所在位置设置 ExecStart=/home/zh/frp/frpc -c /home/zh/frp/frpc.ini LimitNOFILE=1048576 [Install] WantedBy=multi-user.target启动frpc并配置开机自启 systemctl daemon-reload systemctl start frpc systemctl enable frpc 使用第三方服务 我个人使用的是Sakura Frp,有能够满足基本需求的免费套餐,vip套餐也很划算,已经能够满足我的基本需求 {% link SakuraFrp,SakuraFrp,https://www.natfrp.com/ %} 注册账号 完善个人信息 如果有建站需求想要使用国内站点,需要完成实名认证和有备案域名,否则只能使用国外的站点来搭建 在客户端安装frp软件 这一部分官网中已经介绍得十分的详细,这里只有几个关键命令,具体可到官网查看 {% link frpc 基本使用指南,SakuraFrp 帮助文档,https://doc.natfrp.com/frpc/usage.html %} 确认系统架构 uname -m获取软件链接 {% link 软件下载,SakuraFrp,https://www.natfrp.com/tunnel/download %} 安装 cd /usr/local/bin wget -O frpc <下载地址> chmod 755 frpc 配置守护进程(systemd) 具体操作可去指导文档查看 {% link Systemd配置frpc服务,SakuraFrp帮助文档,https://doc.natfrp.com/frpc/service/systemd.html %} 添加工作目录 mkdir -p /usr/local/etc/natfrp编辑配置文件 vim /etc/systemd/system/frpc@.service输入配置内容 [Unit] Description=SakuraFrp Service After=network.target [Service] Type=idle #DynamicUser=yes Restart=on-failure RestartSec=60s ExecStart=/usr/local/bin/frpc -f %i WorkingDirectory=/usr/local/etc/natfrp [Install] WantedBy=multi-user.target重载systemd systemctl daemon-reload 新建隧道 对于远程访问网页的,需要选择可建站的节点;至于选择国内还是国外要先看自己的域名是否已经备过案,备案过的域名可以使用国内节点,国内节点在各方面都要优于国外。如果没有备案域名,就只能使用国外节点。 image-20231114121753361图片 image-20231114121907030图片 端口根据本地网页端口配置 在绑定域名和自动HTTPS中一定要输入自己需要使用的域名 配置DSN解析 动画图片 复制节点域名,到域名服务商处配置DNS解析,将自己的域名CNAME到复制的节点域名上 记录类型选择CNAME 记录值选择选择节点所绑定域名 配置SSL证书 {% link 配置frpc使用的SSL证书,SakuraFrp帮助文档,https://doc.natfrp.com/frpc/ssl.html %} 从服务商下载域名SSL证书选择Nginx,将证书重命名为 将其中 扩展名为pem的直接将扩展名修改为crt 并只保留域名和扩展名 即 如 nextcloud.mstzf.cn.key 的形式 将证书移动到之前配置的工作目录中 /usr/local/etc/natfrp 启动隧道 systemctl <start|stop> <Unit名称> # <Unit名称> 即下图 -f 之后 红色框部分 -
树莓派访客抓拍视频版 前引 由于在对移动的人体进行拍照的效果并不好,所以对抓拍图片版进行了升级,通过人体红外感应器在来访人员进入房间后录制视频,视频能比较好的看清来访人员起到看家的作用。 拍照版 {% link 树莓派64位系统实现对访客抓拍,Mstzf,https://mstzf.cn/posts/hc-rsAndcamera/index.html %} 代码 import RPi.GPIO as GPIO ##引入GPIO模块 import time from picamera2 import Picamera2, Preview from picamera2.encoders import H264Encoder from picamera2.outputs import FfmpegOutput def video(): now = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time())) file_name="/Disk/MyCloud/Safe/"+now+".mp4" picam2 = Picamera2() video_config = picam2.create_video_configuration() picam2.configure(video_config) encoder = H264Encoder(10000000) output = FfmpegOutput(file_name) picam2.start_recording(encoder, output) time.sleep(5) picam2.stop_recording() picam2.close() HC_Pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(HC_Pin, GPIO.IN) while True: if(GPIO.input(HC_Pin)): now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) f = open('/home/zh/code/.log','a',encoding='utf-8') try: video() except: str=now+' 相机调用失败\n' f.writelines(str) finally: str=now+" 有人来访\n" f.writelines(str) f.close() time.sleep(1) -
树莓派64位系统实现对访客抓拍 前引 最近由于一些原因,一个人在外面租房住,老是担心会有人进到出租屋里面来(被害妄想症吧 (~ ̄▽ ̄)~),也刚好有些小模块可以实现对访客监控的功能,就做了这个 环境 树莓派4B 人体红外传感器HC-RC501 SCI摄像头(感光芯片OV5647) 树莓派操作系统 aarch64 摄像头安装 连接摄像头 系统启用摄像头 运行命令sudo spari-config进入选择界面,Interface Options->Legacy Camera-><Yes>,设置完后会重启设备,这时候还无法正常使用摄像头 配置系统 编辑/boot/config.txt文件 # 编辑/boot/config.txt sudo vim /boot/config.txt # 添加dtoverlay # 将其修改为自己芯片对于的值,添加在文件最后 # ov5647是我自己摄像头的感光芯片号,根据个人情况进行修改 gpu_mem=128 dtoverlay=ov5647配置好后重启系统 输入命令libcamera-hello如果没有报错,说明配置成功 image-20230709124304611图片 python包安装 由于64位版本的系统中已经无法使用raspistill来调用摄像头,Python包PiCamera也已经无法使用,所以之前32位的代码在这里已经无法使用;但好在已经推出了PiCamera2,可以在64位中使用。 pip3 install numpy --upgrade pip3 install picamera2关于PiCamera2的更多相关内容可以看下面链接 {% link picamera2,github,https://github.com/raspberrypi/picamera2 %} 详细代码 人体红外模块的数据脚可以根据自己需求选择树莓派GPIO口 import RPi.GPIO as GPIO ##引入GPIO模块 import time from picamera2 import Picamera2, Preview def photograph(): picam2 = Picamera2() preview_config = picam2.create_preview_configuration(main={"size": (800, 600)}) picam2.configure(preview_config) picam2.start() now = time.strftime("%Y%m%d%H%M%S",time.localtime(time.time())) file_name="/Disk/MyCloud/Safe/"+now+".jpg" time.sleep(2) metadata = picam2.capture_file(file_name) picam2.close() HC_Pin = 18 GPIO.setmode(GPIO.BCM) GPIO.setup(HC_Pin, GPIO.IN) while True: if(GPIO.input(HC_Pin)): try: photograph() time.sleep(1) f = open('.log','a',encoding='utf-8'); now = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) except: str=now+'/t相机调用失败' f.write(str) finally: str=now+"/t有人来访" f.write(str) f.close() time.sleep(2)不太会Python,代码不规范或者错误的地方欢迎批评指正🤞 -
树莓派烧录系统不再折腾 把树莓派作为路由器之后,很长一段时间都没有再折腾树莓派上的东西。最近准备用树莓派做一个人脸识别的系统,就去树莓派官网 准备下载个新的系统,树莓派的官方烧录软件居然更新了。 在之前的版本中,界面是英文的、而且只能对TF卡格式化和烧录系统,在没有桌面显示器的情况下安装新系统有很多地方要折腾,开启SSH,添加默认WiFi链接... image-20220614193852774图片 在1.7版本中,界面已经可以支持中文,最主要的还是在系统烧录时可以配置wifi、用户名、是否开启SSH、语言... image-20220614195504459图片 右下加的设置图片可以对烧录后的系统进行设置 image-20220614201506953图片 虽然烧录系统很简单,配置起来也可以直接在网上找到很多教程,但是谁能拒绝如此方便的配置过程呢 -
树莓派搭建文件共享系统(samba) 前引 在不久之前,为了不让{% label 昂贵 red %}的树莓派不吃灰,尝试了一次将树莓派作为云盘服务器的文章 {% link 搭建个人云盘,,https://www.mstzf.cn/posts/private_cloud_disk/ %} 在试用了一段时间后,使用感受并不是很好。 首先,nextcloud修改默认存储位置比较麻烦,云盘的主要目的就是要将资料存储在便于移动、扩展的U盘、硬盘上,而不是直接利用插入的TF卡或者是树莓派自身的内存空间内,这样不仅存储空间比较小而且对自身存储器也是一种损耗。 其次,云盘以网页的方式发布 ,内网穿透比较麻烦。 设备清单 树莓派 移动硬盘(U盘也可) 网络环境 挂载硬盘 查看硬盘 $sudo fdisk -l 如果设备被识别成功,在执行命令后可以查看到类似如下的结果image-20220409211212249图片 不同设备会有不同,类似/dev/hda, /dev/hdb, /dev/sda, /dev/sdb,这些不同的代号,而这些不同的代号又代表着什么?hda一般是指IDE接口的硬盘,hda指第一块硬盘,hdb指第二块硬盘,等等;sda一般是指SATA接口的硬盘,sda指第一块硬盘,sdb指第二块硬盘,等等。 挂载硬盘 {% tabs %} 临时挂载非常简单,只需要一个mount 命令即可 $ sudo mount [参数] [挂载对象(/dev/sda)] [挂载点(新建文件夹来挂载)] # 新建文件夹(挂载点) $ sudo mkdir Disk取消挂载 $ sudo umount [挂载对象] [挂载点]对于mount的参数可以省略,如果又特殊需求可以通过百度来查找mount 参数 所谓的永久挂载其实也就是开机自动挂载,开机自动挂载硬盘不需要在每次开机后都通过命令的方式去挂载硬盘,相对来说比较方便,但是这种方法挂载硬盘后如果没有插入硬盘可能会出现不能引导开机的问题,解决方法这里就不细说了,网上的教程还是比较丰富的。 查看硬盘的UUID $ sudo blkidimage-20220409214826591图片 将获取的UUID复制下来,待会要用 # 新建挂载点(在当前目录下) $ sudo mkdir Disk #编辑fstab加入硬盘信息 $ sudo vim /etc/fstab #在文件最后输入硬盘信息 UUID="刚刚复制的UUID" /home/pi/Disk ext4 defaults 0 1image-20220409215353270图片 测试: # 重启树莓派 $ sudo reboot # 查看挂载情况 $ sudo df -limage-20220409215732729图片 {% endtabs %} 配置samba 按照惯例安装软件之前先update和upgrade一波 # 凑个字数 $ sudo apt update $ sudo apt upgrade # 安装samba sudo apt install samba samba-common-bin -y 配置samba控制文件,指定共享的文件 # 通过vim打开控制文件 $ sudo vim /etc/samba/smb.conf添加文件目录和控制信息,在最后面添加如下内容 [NAS] comment = NAS Storage path = /home/pi/Disk/ browseable = yes read only = no writable = yes valid users = pi create mask = 0775 directory mask= 0775 guest ok = yes{% label path后面的文件路径根据自己的需要来修改,我的路径就是硬盘的挂载地址 blue %} 如果不想共享home下的文件目录,可以找到文件中[home]的部分,将那部分全部注释掉 image-20220409221417876图片 重启samba服务 $ sudo /etc/init.d/samba restart $ sudo systemctl restart samba $ sudo samba restart # 这三个都试试看吧,都是重启服务的命令,我只成功了最后那个 添加默认用户到samba $ sudo smbpasswd -a pi # 输入密码确认即可image-20220409223723986图片 本地连接共享测试 之前将树莓派作为一个软路由来使用,现在电脑和手机都有连接着树莓派的WIFI,所以只需要直接访问树莓派的固定IP就能实现对树莓派共享文件的访问。开热点方法可以参考我之前写的这篇文章。 {% flink %} class_name: class_desc: link_list: name: 树莓派开启个人热点 link: https://www.mstzf.cn/02-09/startAP/ avatar: https://pic.teohzy.com/blog/202202091916889.png descr: {% endflink %} Windows 测试访问共享文件 在文件资源管理器中直接输入\\IP地址 即可访问共享文件 image-20220409223310023图片 还可以映射为本地驱动器,在Network右键->映射网络驱动器 image-20220409223950512图片 Android 如果默认文件管理器可以访问网络存储的话就按照官方教程来使用,如过默认文件管理器不能访问,则要下载其他文件管理器 我目前使用的是文件管理器(File Manager Plus) image-20220409224651643图片 使用体验还是比较不错的 image-20220409224741807图片 内网穿透 这里推荐一个很好用,还免费的内网穿透平台{% label (非广告) red %}。 {% flink %} class_name: class_desc: link_list: name: SAKURA FRP link: https://www.natfrp.com/ avatar: https://nyat-static.globalslb.net/natfrp/index/bg2.jpg descr: " " {% endflink %} 如果需要远程访问到共享文件,就需要内网穿透,安装配置文档已经非常完善,可自行到官网查看安装配置方法。samba占用的是139端口,在创建隧道的时候端口选择139就行。 {% label 如果选择了内网穿透了,一定要设置好密码和保护好隧道信息...不让很容易信息泄露 red %} -
搭建私人云盘 准备 硬件: 树莓派4B 机械硬盘 软件: Nginx PHP MySql nextcloud 选用树莓派是由于手头上刚好有一块树莓派,为了不让他吃灰;实际上可以选择旧电脑,或者云服务器。 软件安装 安装nginx $sudo apt install nginx -y安装完成后在浏览器中输入树莓派的IP地址,可以看到如下界面 image-20220219132349742图片 安装PHP7.4 目前最新的PHP版本好像是7.4版本,也可以选择其他版本,将php7.4后面的7.4改成对应的版本哈就可以安装其他版本的PHP sudo apt install php7.4 php7.4-fpm php7.4-cli php7.4-curl php7.4-gd php7.4-cgi php7.4-xml php7.4-dom php7.4-zip php7.4-intl php7.4-mbstring php7.4-mysql -y安装并配置MySql $sudo apt install mariadb-server $sudo mysql_secure_installation此时系统会询问你:Enter current password for root (enter for none): ,按回车(enter)键,因为第一次登陆是没有密码的。 然后会询问你: Set root password? —— 按 y ,进行root帐号的密码设置 此时,会提示 New password ,在此输入你的MySQL密码,请牢记这个密码,输入完成按回车,会提示re-enter new password此时再重复输入密码,回车即可。 然后,询问你 Remove anonymous users ,按 y 。 然后,询问你 Disallow root login remotely ,按 y 。 然后,询问你 Remove test database and access to it ,按 y 。 然后,询问你 Reload privilege tables now ,按 y 。 最后,您将看到消息 All done! 和 Thanks for using MariaDB! 。表示已经设置完成了。 sudo mysql -u root -p #输入密码后: # 创建数据库 CREATE DATABASE IF NOT EXISTS nextcloud DEFAULT CHARACTER SET UTF8 COLLATE utf8_general_ci; # 创建用户 GRANT ALL PRIVILEGES ON nextcloud.* to '用户名'@'127.0.0.1' identified by '密码'; # 刷新数据库 FLUSH PRIVILEGES; 配置软件 配置Nginx $sudo vim /etc/nginx/sites-available/defaultnginx默认的网站代理地址是在var/www/html下,可以保留使用原来的,也可以修改到自己新建的地址下。如果选择新建不要忘记去确保指定的路径下的文件夹要存在。像我的就要在/var下新建owncloud文件夹。sudo mkdir /var/owncloud image-20220219194922636图片 location / { index index.html index.htm index.php default.html default.htm default.php; if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; } }去掉location ~ \ .php上的注释 image-20220219195040903图片 给根目录权限 # 给权限 sudo chmod -R 755 /var/owncloud sudo chown -R www-data:www-data /var/owncloud #重启nginx sudo systemctl restart nginx在刚刚网站指定的目录下新建PHP测试文件 $sudo vim /var/owncloud/index.php #输入以下代码 <?php phpinfo(); ?>重新启动Nginx:$sudo systemctl restart nginx 可能报错: “Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.” 多检查修改过的地方,是否有单词错误,或者是否有分号,括号是否对应... Nginx代理php成功后,在浏览器输入树莓派IP地址后能看到如下界面说明配置成功。 image-20220219141927075图片 安装nextCloud 进入刚刚配置的代理目录:cd /var/nextcloud 将刚刚的测试文件删除: sudo rm * 下载nextcloud) sudo wget https://download.nextcloud.com/server/releases/nextcloud-23.0.2.tar.bz2这是目前最新版本,请自己到官网查看版本 image-20220219192510883图片 # 解压缩: sudo tar -jxvf nextcloud-23.0.2.tar.bz2 nextcloud # 复制出来 sudo cp -rf nextcloud/* /var/owncloud再访问IP地址就可以看到NextCloud的运行界面了 image-20220219200624789图片