树莓派 Zero做飞控图传

前言

原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。

本文使用Markdown写成,为获得更好的阅读体验和正常的链接、图片显示,请访问我的博客原文:

http://www.cnblogs.com/sjqlwy/p/zero_fpv.html

虽然可以买到商品成品,且会比我们做出来的东西更美观,性能指标更强,但是在折腾中学习,按照自己的需求进行优化改动,享受创造的喜悦,不正是创客精神嘛。

本项目使用手头现有的硬件,旨在将树莓派Zero作为飞控图传使用,本以为会很简单,但是软件适配方面遇到一些问题,困扰了很久。

1. 硬件部分

我们首先来看看硬件列表:

  • Raspberry Pi Zero v1.3
  • otg table & usb wifi dongle (Xiaomi wifi)
  • Raspberry Pi Camera Module v1.3
  • LattePanda With LCD Display

1.1 RPi Zero介绍

Zero体积小巧 (可以当钥匙扣),性能足够,兼容树莓派软硬件资源,这几点让它非常适合做一些硬件相关的创意项目。如果把它当做一个小号的树莓派使用,那真是买椟还珠?我们看看它的相关配置:

  • 1GHz单核CPU
  • 512MB 内存
  • Micro-USB OTG 接口(可用于供电)
  • Micro-USB 电源接口
  • 树莓派 40-pin GPIO引脚
  • CSI 摄像头接口 (仅支持 v1.3)

这里我们准备通过GPIO接口供电,OTG接口连接USB无线网卡与胖哒通讯,搭建Web服务器向LattePanda传输视频流。写这篇文章的时候新版的RPi Zero W(ireless)已经发布,增加了蓝牙无线模块,更加方便,但是我没有,而且很难买T_T

1.2 Zero 供电

“要有电——《创世纪》”

虽然官方仅说明使用Micro USB PWR接口供电,但是使用过程中可以发现OTG接口和GPIO引脚也可以但是不推荐(缺少保护电路)。OTG供电可以参考我之前写的文章《一根数据线玩转树莓派Zero》,不再赘述。因为飞控上不能搞个充电宝弄根数据线,所以准备通过杜邦线连接GPIO接口进行反向供电,这里需要稳定的5v电压,否则可能有损害zero的风险!

如图所示,引脚2接+5v,引脚6接地。

更多讨论与电路原理图等请移步:

当然也可以使用专门的供电拓展模块,比如Pimoroni Zero LiPo

1.3 RPi Camera Module

Zero仅支持RPi Camera v1.3,彼时zero发布时并没有v2的摄像头模块。关于RPi摄像头模块的详细信息务必阅读eLinux的页面

v1.3采用OmniVision OV5647摄像头组件,支持500万像素,实测效果还不错,比较清晰。

需要注意的是,RPi和RPi Zero CSI摄像头接口大小是不一样的,v1.3默认只有适用尺寸较大的RPi接口排线,相用在Zero上的话需要额外购买排线。我是在阿里巴巴上购买的,¥7.5供参考,并额外购买了亚克力支架。

 

1.4 Wireless Communication

因为在室外操作,信号衰减较小,这里我们的方案是otg线+小米随身wifi(采用mt7601u芯片)进行无线传输。使用小米wifi的原因是因为mt7601u功耗很小,稳定性/发热/传输速度距离都可以接受,后期可能会换用模块或者加装天线。

当然也可以选用现成的模块,比如Red Bear IoT pHAT

2. 软件部分

2.1 Zero操作系统选择

操作系统是相当于开车的司机,为zero选择一个合适、方便的系统如虎添翼。由于项目需要,我们选择headless模式进行操作,不需要图形界面,这里讲两个系统:Raspbian和DietPi。

2.1.1 DietPi

一直以来使用的且十分推崇的树莓派操作系统,有些过相关介绍,很久没更新了,现在又增加了很多新特性。其特色包括性能优化,可以快速方便地自动安装配置各种软件,无痛学习上手树莓派,另外作者的脚本写的很棒,可以学到很多东西。

虽然DietPi支持Zero,但是对OTG 虚拟网卡支持并不好,所以最近一直在尝试进行适配,也遇到了很多问题,卡在这里很久,记录如下。

按照《一根数据线玩转树莓派Zero》的方法,分别更改boot分区下cmdline.txtconfig.txt文件,启用usb gadget ether功能,并在/etc/network/interfaces里预增加usb0虚拟网卡相关设置文件。使用MicroUSB连接Host后,正常上电可以识别到LAN连接,但是

  • 使用ssh登录zero,即使开启了网络共享zero也无法上网;
  • windows可以ping通zero,反向ping则无响应。

以上问题在使用Raspbian Lite时并不存在,经群里枫大的提醒,使用Wireshark软件进行局域网抓包分析和USB2TTL串口模块直接调试的方式寻找分析问题。结果如下:Wireshark可以捕获主机ping zero的ICMP协议包,反向无任何响应。最后尝试关闭Windows防火墙解决,怀疑是Raspbian正常使用,没有测试ping命令,所以默认为无需关闭防火墙,这里绕了很大弯路。

注意,开启网卡混淆模式进行监听数据包时,ping命令会返回(DUP!),提示数据包重复。

此时仍然无法上网,ping www.baidu.com提示unknown host,直接ping IP地址ok,cat /etc/resolv.conf没有发现正确的DNS服务器地址。手动在interfaces文件增加dns-nameservers 114.114.114.114后解决,可以正常联网并更新系统。

注意,插拔zero后可能会无法联网,此时关闭|重新开启主机网卡网络共享稍等即可。

完成以上设置之后,安装Lighttpd网页服务器、php等之后,重启失败,串口无任何输出。如此这般,屡试不爽。长久的沉默与崩溃,遂放弃。经历阅读DietPi脚本源码,完善修改相关设置,查看了很多Gadget相关驱动说明和其他文档资料,都准备向github上提交commit了,然后又回到原点,个中滋味,百般无奈,于是怒打了几把王者荣耀平复心情。。。话说之前玩DOTA的,对王者荣耀这种小学生游戏嗤之以鼻,某日和师弟们玩了下,发现我凑上瘾了—

注意,使用otg时推荐使用Raspbian,在正式环境(GPIO供电+USB无线网卡),DietPi是没问题的。

2.1.2 Raspbian Jessie Lite

平复一下心情之后,我们回到树莓派基金会官方推荐的Raspbian Lite,无图形界面,没有预装各种Bloatware。之前的文章是以此为基础进行演示的,各方面比较完善。安装使用过程中比较顺利,这次没有出什么幺蛾子了,泪目。。。

2.2 RPi Cam Web Interface

Camera 图像传输与控制首先想到的是使用RPi Cam Web Interface来管理Camera和传输图像:

Web based interface for controlling the Raspberry Pi Camera, includes motion detection, time lapse, and image and video recording。控制树莓派摄像头的网页前端,支持motion运动检测、定时拍摄以及图像、视频录制。

项目架构如下,主要包括motion——负责运动检测、raspimjpeg——图像捕获与视频流传输、Web Server (Apcahe|Ngnix|Lighttpd)——网页控制界面。受限于zero的性能,以及并不需要多少高级特性,这里Web Server选用更轻量的Lighttpd。

原本执着于DietPi就是因为可以一键安装配置好各种软件,RPi-Cam-Web-Interface也在其中。因为存在问题没解决,所以按照Daniel Knight的脚本手动操作,仍然失败。。。最终在Raspbian上按照官网的方法安装成功。

  1. 启用RPi Camera:sudo raspi-config命令
  2. 正确连接Camera:金手指朝下(LattePanda也是如此)
  3. 安装RCWI:
# 更新系统并安装git 
sudo apt update && sudo apt dist-upgrade && sudo apt install git 
# 下载源码并进行安装 
git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git 
cd RPi_Cam_Web_Interface 
chmod u+x *.sh sudo 
./install.sh

期间会跳出一个命令行对话框:

使用Backspace键删除,无法使用Del。如图所示,则可以通过在浏览器里输入[pi_ip]:80/rcam访问Web Interface,且开机自动运行。这里[pi_ip]填入树莓派的ip地址,我这里是192.168.137.2

注意:

  • 关闭camera上的红色led可以在/boot/config.txt文件增加disable_camera_led=1
  • 只想要最简洁的图像界面可以访问[pi_ip]/rcam/min.php

Zero 图像传输部分

分别是a. OTG线+USB无线网卡(RT3070为例,小米WIFI没找着); b. Zero本体; c. RPi Camera + 排线; d. CH340G TTL转USB模块,可以进行调试同时通过GPIO引脚为树莓派提供5v供电。正式版仅需要两根线为Zero供电即可。

LattePanda 获取Zero实时图像(网页)

帧率和清晰度都相当可以,拍得比较糊,大家凑合着看,看不清的想象一下。只需要在LattePanda里打开网页,地址填[pi_ip/dietpicam]即可。注意在System里设置为Default Steam比MJPEG Steam流畅。

移动设备获取Zero实时图像(网页)

和PC版基本相同,注意似乎同时只支持串流到一个设备。

移动设备获取Zero实时图像(APP)

这里可以使用免费版的IP Cam Viewer Lite(支持Android和iPhone),当然你也可以购买Pro版,不过Lite版足够使用了。ICVL内置支持RPi-Cam-Web-Interface,如图添加摄像头,修改相关参数。

PC软件获取Zero实时图像(待补充)

因为RPi-Cam-Web-Interface支持视频串流,我们可以使用VLC或者自己写软件(比如QT编写的图形界面程序)直接播放视频流,由于遇到一些问题,后面再完善相关内容。

总结

以上通过多种方式获得树莓派Zero传输过来的实时图像,并且清晰度和帧率都相当不错,符合我们的项目预期。在室外可以让树莓派或者LattePanda建立无线热点,提供两者通讯的手段,当然,WiFiDirect也可以,待求证。

进一步阅读

  • 模块成品化比较高的Pi Cam by WMAGNER|hackmypi.com
  • 给大家讲讲什么是FPV|tieba

树莓派运行TensorFlow-hotgarlic

来自52Pi社区的热人投稿~欢迎广大网友投稿至管理员

创客们,今天我来分享一下我在pi上运行tensorflow的经历。这篇帖子比较适合对深度学习有一点点了解的创客,最好用过这类开发包,比如keras,tensorflow等等。如果你是pi 的玩家,并且想做一些时髦的玩意,那可以从这里开始。

首先要感谢将谷歌正式发布的tensorflow1.0进行编译的作者Sam Abrahams,光编译就要花上10多个小时,更不用说编译之前的艰苦摸索,如果喜欢这个可以向他捐赠来维护这个平台。

 

Tensorflow的安装:

  1. 准备工作设备:pi3B

    操作系统:Raspbian Jessie with PIXEL(2017-03-02

  2. 登录编译者的GitHub,按照方法1来进行操作,只要网速稳定,半个小时就可以将tensorflow安装到pi上,如果下载太慢,可以下载我的例子,里面有安装包(后缀whl),放到合适的文件夹里面,然后pip install就可以了。图片2图片3
  3. 运行例子下载解压到pi上,然后进入pi的terminal,cd进入例子的文件夹,再运行digits_recog. Py。约十几秒后,在terminal上应该显示0.97,说明tensorflow已经可以在pi上使用了。

例子的制作:

可能看到这篇帖子的朋友大多是pi的玩家,对深度学习不是太了解,所以我就讲解一下例子,也当是深度学习技术的入门知识。

digits_recog. py是一个采用CNN方法,来识别手写数字的脚本。有3个主要部分。

  • 建立一个空的CNN模型(CNN是一种在机器视觉方面相当好的模型)
  • 载入这个模型需要的参数(model文件夹),这些参数是我在速度更快的主机上计算(训练)出来的
  • 运用完整的CNN模型,去识别手写的数字(pkl文件),然后再评估识别率(0.97代表识别正确率为97%)

具体可以看文件里面的comment。

训练的过程也需要先建立模型,并且和digits_recog. py中的模型一样,我的例子文件夹里有个train.py文件,你下载下来的model文件夹就是运行这个训练程序后产生的,你可以在你的台式机上跑一下train.py,当然也可以在pi上运行,只不过速度比较慢。还有,脚本运行时会载入tensorflow自带的训练集mnist,里面的东西是50000个手写数字的像素图片,以及这些图片的答案(对应的数字)。如果减少训练集,会导致模型的训练不充分,造成识别率降低。

图片5

Mnist还包含了测试用的数据,这些数据当然是训练集所不包含的,但是训练集也很大,所以我精简了一下。做成实际的项目后,也不会一下子运行几万个图片。

建模,训练,识别的整个过程,是用tensorflow这个开发工具来完成的,它就相当于一个python的library。

最后你可以自己写几个数字,然后用picamera录到pi上,运行digits_recog. py,看看准不准。

 

期间还遇到了一个坑,那就是用jupyter notebook调试代码,会出现莫名的错误,但是在terminal运行.py就没问题。查看了报错,是在加载参数时发生的,各位喜欢用jupyter的朋友要当心了。

在识别的过程中,也可能提示GPU不能使用等等问题,不用去管,等着输出结果就行。

GPU模式是在训练参数的过程中才起作用的,训练的过程非常消耗硬件资源,所以现在都采用了GPU来加速,将来的项目我打算在云服务器上进行训练,如果有兴趣可以去看看这个网站

 

类似的项目:

这个自动驾驶玩具车的项目,识别的过程不是在pi上运行的,而是其他主机上运行,再去控制小车,我猜一个是当时还没法在pi上装tensorflow,另一个就是担心pi的性能跟不上。

另一个识别物体的小车项目,是谷歌的工程师发布的,我的这次实验的思路也和他一样,就是将参数文件加载到pi上,然后让pi在当地运行识别程序,不过这个项目的模型和参数都是现成的。类似的还有这个项目,可惜这个项目的参数现在似乎下载不到了。所以我打算自己建立模型和训练,这样也可以根据自己设定的任务灵活调整参数和训练数据。

 

一些感想:

大家也不必太担心pi的性能不行,因为64位的系统,52pi的牛人们已经试过了,性能提高很多,官方可能不久就要发布。更值得一提的是谷歌这个tensorflow的开发者,也打算为pi定制人工智能的开发工具,到时候软件更容易装,使用更方便。你可以说他们是双赢互利,因为pi的社区聚集了人气和强烈的创造激情,而谷歌则可以提供强大的技术支持。所以,各位追求新奇的创客,又会有很多好玩的东西等着你们。

 

本人才刚刚开始玩pi,有些讲的不对的地方还请包涵。最后也要感谢52pi社区的牛人们,帮我这个新手解决了一些硬件方面的问题。

 

树莓派64位系统来袭,速度最快提升30倍!

今天,我们团队感受了一下在树莓派3B的主板上运行64bit系统的感觉!那种感觉您如果有幸感受的话,您一定会说:这才是我要的树莓派3B!

体验Debian 9 arm64版本的感觉总结如下:

作为一个专业的用户,我们必须从专业的角度来做一次真实的评测。

硬件测试环境:

  • RaspberryPi 3 Model B
  • 16GB Class 10 TF卡
  • 5v2.5A电源
  • 以太网网线及能连外网路由设备

软件测试环境:

  • GEEEKPI-64bit-beta(内核移植版)

操作系统是基于Debian 9的arm64位源码,Debian 9目前还没发布,目前属于beta版,RaspberryPi 官方也没有发布64bit操作系统的计划,但是我们迫切需要64bit的性能!

另外,只有pi364bitCPU,所以只有Raspberry Pi 3B可以跑这个系统。

 

评测参照组硬件环境与之前提到的环境一致,软件环境为:

Raspbian-2017-03-02        
该系统为32bit

此次评测的关键是看64位系统对树莓派速度的提升,同时关注树莓派的温度,开机速度,CPU性能,数据库性能,网络性能,内存性能和多线程性能。

  1. 首先开机后联网,两台设备全部进入字符界面(console)模式,外部不连接任何外设,通过ssh远程登录到两台主机上,然后安装sysbench软件进行压力测试,并通过htop简单的进行观察。
  2. 执行命令为:
    sudo apt-get update && sudo apt-get –y install sysbench htop iperf3

    1

  3. 首先我们进行对照组的评测

进入系统检查系统版本及硬件架构信息:

1

系统仍然保留了ext4文件系统,同时看到shell环境bash的软件结构为32bit。

3.1测试CPU性能:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=1 —max-requests=10000 run

结果:

2

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=1 —max-requests=10000 run

结果:

3

总结:

367.2971/25.1195=14.622倍

4 线程测试:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=4 —max-requests=100000 run

结果:

4

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=4 —max-requests=100000 run

结果:

5

总结结果:

测试4线程的结果是:1017/62=16.40 倍,64位系统仍然占据领先优势

 

8线程测试:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=8 —max-requests=100000 run

结果:

6

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=8 —max-requests=100000 run

结果:

7

3.2 测试内存性能

内存随机测试:

Raspbian-2017-03-02-jessie

sysbench —test=memory --memory-block-size=1K –memory-total-size=1G --memory-access-mode=rnd  run

结果:

8

Debian-9-arm64bit-beta

sysbench --test=memory --memory-block-size=1K --memory-total-size=1G --memory-access-mode=rnd run

结果:

9

内存连续测试:

Raspbian-2017-03-02-jessie

sysbench —test=memory --memory-block-size=1K –memory-total-size=1G --memory-access-mode=seq  run

结果:

10

Debian-9-arm64bit-beta

sysbench --test=memory --memory-block-size=1K --memory-total-size=1G --memory-access-mode=seq  run

结果:

11

3.3 测试网络性能:

Raspbian-2017-03-02-jessie

12

Debian-9-arm64bit-beta

13

3.4 八线程测试:

Raspbian-2017-03-02-jessie

sysbench --test=threads --num-threads=1000 --thread-yields=1000 --thread-locks=8 run

结果:

14

Debian-9-arm64bit-beta

sysbench --test=threads --num-threads=1000 --thread-yields=1000 --thread-locks=8 run

结果:

15

在进行多线程测试的时候,我选择了1000线程共享8个锁。

3.5 互斥锁测试

Raspbian-2017-03-02-jessie

sysbench --test=mutex --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000  run

结果:

16

Debian-9-arm64bit-beta

sysbench --test=mutex --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000  run

结果:

17

 

3.6 文件连续读写:

Raspbian-2017-03-02-jessie

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=seqrewr run

结果:

18

Debian-9-arm64bit-beta

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=seqrewr run

结果:

19

随机文件读写:

Raspbian-2017-03-02-jessie

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=rndwr run

结果:

20

失败了,不支持随机读写。

Debian-9-arm64bit-beta

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=rndwr run

结果:

21

4.进入系统检查系统版本信息及硬件架构平台信息22

 

发现架构已经是64bit,并且新增了一款f2fs文件系统,F2FS是三星与华为一起开发的针对TF卡,SSD,EMMC等等闪存优化的文件系统,对延长设备使用寿命,提升设备性能有很大的帮助,同时支持传统的ext4文件系统。

 

总结:

下面通过一张表来进行对比:

测试项目 Raspbian

2017-03-03

Debian 9 Arm64bit 提升倍数
系统信息 Arm 32bit/ext4文件系统 Aarm64bit/f2fs文件系统 见文件系统测试
CPU单线程 367.2971 25.1195 14.62倍

 

 

四线程 1017.6742 62.6079 16.40倍
八线程 1920.0601 62.6711 30.64倍
内存随机 5.7678 2.1925 2.63倍
内存连续 6.3309 2.9392 2.15倍
网络性能 74.6Mbps 94.3Mbps 1.26倍
文件连续读写 5.7655 7.1506 见下文说明
文件随机读写 不支持 21.8336
互斥锁性能 0.0231s 0.0186s 1.24倍

 

最后总结:

文件系统采用了三星与华为合力开发的f2fs,针对mmc和emmc还有tf存储进行了优化,除了大大提升了性能之外,还增加了TF卡的使用寿命,提供了意外断电文件系统的保护,大大避免意外断电导致的文件系统崩溃的情况。

其中由于TF卡的细微差异,导致文件连续读写出现了反转,实际上通过测试文件连续读写的性能方面,f2fs更加优化,超越ext4很多倍。

总体上,64位的系统提供了更好的使用体验,我身边曾经抱怨树莓派跑opencv性能不能够够超越nanopi的小伙伴也逐渐改变了他们的看法,很多朋友表示,曾经在家吃灰的树莓派终于等到了扬眉吐气的这一天!

我个人觉得这次的树莓派性能提升虽然不是硬件层面的提升,但是带来的体验已经超越了以前的各种开发板平台,从树莓派官方的表现来看,今年树莓派官方没有发布新款树莓派设备,而是努力完善了操作系统,在另一个层面上也展示了其对树莓派生态的关注,软件系统的提升将会让树莓派的运行性能和效率上升到一个新的层次,虽然目前的Debian 9 Arm64bit的beta版未能提供图形界面的环境,但是作为服务器端的应用更加明显了,感谢这次提供测试系统的GEEEKPI团队所有成员,为树莓派3B的测试提供了非常好的测试环境和测试硬件!相信未来的树莓派3B上会有更多更好的应用展现出来!让我们拭目以待!

Raspberry Turk:基于树莓派的国际象棋对战机器人开源项目

国际象棋是备受推崇的棋盘游戏,而它同时也能成为非常优秀的编程教材。Raspberry Turk 就是由开发者 Joey Meyer 开发的国际象棋机器人,能够帮助感兴趣的人们学习计算机图形、机器人和人工智能方面的各种知识。

访问:Raspberry Turk

简单来说,Raspberry Turk 就是一款能够跟你下国际象棋的机器人。18 世纪末,出现了名为 Turk 的虚假国际象棋机器人,就是由人类藏在盒子内同其他人对战。不过同原版 Turk 不同的是,现在的 Raspberry Turk 基于树莓派主板,能够进行真正的人机对战,它不仅能够识别棋盘上的棋子,而且能够移动它们进行对战。

这是非常酷炫的 DIY 项目,但是最吸引人的部分是 Raspberry Turk 具备良好的文档支持,Meyer 提供了详实的 Raspberry Turk 开发细节,感兴趣的用户能够进行自己创建。

视频地址:http://www.tudou.com/v/enBrZD0wUqU/&resourceId=0_04_02_99/v.swf

本文转自https://news.cnblogs.com/n/565712

使用树莓派打造面部识别安全设备

清单

硬件部分

Raspberry Pi 2 Model B

PIR运动传感器(通用)

Microsoft LifeCam 3000 HD摄像头

伺服马达FS5103R

5V电源

电阻器 1k欧姆

软件应用程序及在线服务

Microsoft Windows 10 IoT Core

Microsoft Visual Studio 2015

Microsoft Project Oxford

Microsoft Azure

Microsoft Azure云存储服务

动手实践

关于项目:

该设备使用Microsoft Project Oxford面部识别方案,检测访问者是否为房子的所有者,通过验证之后会立马打开房门,否则系统将向房屋所有者绑定的移动设备推送一条警告信息,并询问是否给该访问者开门。

使用/集成的服务

Azure storage云存储服务

Microsoft Project Oxford: 面部识别API

使用ASP.Net SignalR将所有者的行为发送给树莓派

使用WNS向移动设备发送通知信息

组件

Raspberry Pi 2 Model B x1

RIP传感器 x1

微软LifeCam 3000 HD x1

伺服马达 FS5103R x1

电池组 x1

1kΩ电阻 x1

电路图以及线路图

14817893813869

14817893927566

Pin分配

14817894206623

 

移动侦测,捕捉图像以及访问者分析

首次运行该应用程序,默认会创建一个IsActive属性为真的PIRProximitySensor类实例。
该实例用于RIP传感器与应用程序之间的连接。如果IsActive属性设置为真,当传感器检测到一个动作发生时会触发MotionDetected事件,然后要求连接到传感器的GPIO pin number执行对应的操作。移动侦测的捕捉影片命令会将获取到的访问者面部图像,发送到Project Oxford服务器进行识别。如果确认为该房屋的所有者,伺服马达将打开房门;否则将获取到的访问者面部图像发送到绑定的移动设备。如果房屋所有者选择打开房门,命令将通过后端服务的SignalR推送给树莓派,然后打开房门。
当在识别访问者过程以及传感器进行必要操作期间,IsActive属性不能被设置为假。关闭房门之后该属性重新设置回真,激活识别系统。

芝麻开门

我们使用伺服马达控制房门。向马达发送2毫秒脉冲时,马达会旋转180°门就打开了;向马达发送1毫秒脉冲时,马达会旋转回0°,门再次关闭。 伺服马达的位置是由脉冲长度决定。转动系统预期至少每隔20毫秒收到一个脉冲,如果脉冲超过1毫秒,伺服马达将转到0°;如果为1.5毫秒脉冲,其转到90°位置;如果是2毫秒,将会转到180°位置。

14817894345998

Project Oxford: Face API

Face API是一个基于云计算的API,其提供了当前最先进的人脸检测识别的算法。Face API的主要功能可以分为两类:其一对人脸进行检测提取其特征提取,其二便是人脸识别 戳这里访问该项目主页。

如何部署以及工作

按照上面图表连接好电路之后,从HomeVisitsManager.VisitsController项目的方案平台选择ARM,之后从模拟器列表选择远程机器并输入你的树莓派IP和凭证,最后运行该方案;多个项目同时运行(所有者的windows phone应用,后端服务以及物联网设备)

引用:

伺服马达:http://razzpisampler.oreilly.com/ch05.html

人脸检测和识别:https://www.projectoxford.ai/doc/face/How-To/identifyperson

项目代码

https://github.com/IslamKHALIL/Home-Visits-Manager

参考来源:hackster,FB小编鸢尾编译,转载请注明来自FreeBuf(FreeBuf.COM)

 

 

 

 

 

 

 

 

 

 

 

 

树莓派完美运行安卓牛轧糖,DIY一部手机吧

20170104150135787-0

GitHub(世界最大程序员社区) 网红 Peter Yoon 已经成功地将 Android 7.0 Nougat 刷入了 树莓派3(Raspberry Pi 3)了!一起来看看树莓派运行的 Android 7.0 的样子吧:

20170104150135832-0

屏幕正脸

20170104150135723-0

下拉通知栏

20170104150135512-0

设置选项

20170104150135381-0

Peter Yoon常用的 ID 是 pero-hd,是一个超级树莓派达人,曾经也成功地给树莓派灌入过 Android TV 的 ROM,他的 GitHub 地址是 https://github.com/peyo-hd 有兴趣的同学也可以一边吃瓜一边围观一下。不过,对于真想上手的同学,需要注意Google 也从未正式发不过针对树莓派的 Android 版本,所以这个 Android 7.0 也只是给大家尝鲜,如果又要用树莓派,又希望稳定性的话,那么可能还是比较推荐多年前的 Android 2.3 Gingerbread 老古董了。

本文来自:树莓派实验室
链接地址:http://shumeipai.nxez.com/2017/01/04/raspberry-pi-runs-perfectly-with-android-nougat.html

黑客演示如何用5美元树莓派攻破一台有密码锁的计算机

 

近日,知名开发者兼黑客Samy Kamkar演示了一项技术。通过5美元的树莓派Zero和某些定制软件,几乎任何人都可以拿它来攻击一台上了密码锁的计算机。在接入电脑之后,这套被称作PoisonTap的设备,会将自己模拟成一个USB-以太网适配器。计算机会被它欺骗,以为有线网络连接已经建立,然后向其发送DCHP请求,以获取IP地址等信息。

Kamkar解释称,尽管它看起来像是个二级网络接口,但PoisonTap会对DHCP做手脚,让机器以为网络已联通,然后通过它(而不是真实的网络连接)来传递所有互联网流量。

cc6691ee52ae86f

视频需要翻墙: YouTube

具体项目可看:PoisonTap – exploiting locked machines w_Raspberry Pi Zero

虽然这种攻击需要直接接触到一台计算机才能实施,但我们还是可以降低它的威胁,比如尽量使用Https加密连接访问网站,或者更暴力一些 —— 堵上所有用不到的USB接口。

[编译自:TechSpot , 来源:Samy Kamkar]

SexyCyborg的最新力作:3D打印化妆盒黑客套件

 

最近,中国女创客SexyCyborg又创造了一件新作品——3D打印Pi Palette,又名黑客的化妆盒。

Pi Palette是一个有趣的项目,其灵感似乎来自隐蔽的女间谍设备。乍一看,这个盒子类似于一个大一点的化妆盒,上面有一面镜子,下面有一个化妆品托盘。然而,当把托盘移开时,一套黑客工具就显现了出来。

2

Pi Palette由一个3D打印盒子和一个树莓派3单板计算机组成。毫无疑问的是,这套黑客工具非常显眼,并不适合做一个真正的间谍设备。但不可否认的是,它确实十分有趣。事实上,SexyCyborg已经明确指出,3D打印黑客化妆盒并不是一个严肃的信息安全工具。

黑客化妆盒里的树莓派3单板计算机本身运行Kali Linux,但也与Windows 10兼容。

3

4

5

据天工社了解,Pi Palette的其他组件包括一个5000mah的电池,一个RLT3070 WiFi适配器(可换成一个软件无线电),一个5英寸、带触摸屏功能的800×480“智能镜”显示器,一个无线(或有线)键盘,一个化妆品托盘。您可以在SexyCyborg的Thingiverse页面上下载该设备所有的3D打印文件。

3D打印部件(化妆盒,铰链,充电底座,化妆品托盘等)的打印材料应为PLA,打印层厚为0.2mm。虽然在资深3D打印玩家眼中看来,这些打印件都比较初级,但SexyCyborg解释说她自己的CAD水平相对有限,她希望任何水平的创客都能成功复制她的作品。

6 7

能容纳真实的化妆品托盘的Pi Palette可以通过一个3D打印支架里的感应式充电器设置来无线充电。当然,要完成该设备必然涉及到一些接线和仔细的组装,为此,SexyCyborg制作了一个17分钟的视频来一步步地指导创客。

最后,为了炫耀她的新设备,SexyCyborg发布了一张特效照片。照片里,她手拿Pi Palette,身穿黑色皮夹克,身后的灯光经过了特效处理,看起来是不是很酷呢?

8

本文来自:天工社

树莓派上编译畅玩雷神之锤

在树莓派上畅玩CS,感受上个世纪的FPS游戏

6

当时游戏的散弹枪画风

 

5

不输当下游戏的飞弹效果

 

4

还有激光型武器

 

 

3

选择角色的界面

需要的硬件:

树莓派2或B或B+或3
显示器
鼠标
键盘

2

官方有很详细的说明,具体命令如下。

 

  • 更新

sudo apt-get update

sudo apt-get dist-upgrade

sudo rpi-update 192

  • 安装需要用到的软件

sudo apt-get install git gcc build-essential libsdl1.2-dev

 

  • 下载雷神之锤的源码

mkdir ~/src

cd ~/src

git clone https://github.com/raspberrypi/quake3.git

cd quake3

  • 修改build.sh文件
    把第8行改成:

ARM_LIBS=/opt/vc/lib

 

把第16行改成:

INCLUDES=”-I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads”

 

把第19行注释掉:

#CROSS_COMPILE=bcm2708-

 

  • 编译(在B和B+大概一小时,在树莓派2上十分钟以内,性能真的是六倍

./build.sh

 

  • 找到一些文件(应该是素材之类的吧),并把他们放到

build/release-linux-arm/baseq3:

pak0.pk3, pak1.pk3, pak2.pk3, pak3.pk3, pak4.pk3, pak5.pk3, pak6.pk3, pak7.pk3, pak8.pk3
网上有人整理好了,去网盘下载就行。

– 提升pi用户的权限

sudo usermod -a -G video [your_username]

 

  • 运行ioquake3.arm,开始玩耍吧,使用音响或直接接到电视机上,效果更佳哦。

参考:http://ju.outofmemory.cn/entry/3235

全球首款配备电子纸屏幕的抽纸盒~

IMG_1927

用树莓派+电子纸屏做了一个时钟,很偶然的搭配一个抽纸盒作为外壳,虽然并不是第一款电子纸屏的时钟,但绝对是全球甚至宇宙第一款带有电子纸屏幕的抽纸盒。。

先放图:

IMG_1912

内部构造,模块和跳线全部用热熔胶固定

IMG_1916

后视:

IMG_1918

检查一下这款时钟的抽纸盒功能。。

IMG_1919

 

IMG_1920

图就贴到这,下面聊聊我为啥突发奇想做出这么个东西。某天我想在淘宝上买个简单的闹钟,在搜索栏输入 简约 闹钟 俩关键词,出来结果里面有个很合心意,是这样的:

屏幕快照 2016-04-25 下午5.16.14

外观简单,白屏黑字,对比好强烈,好高大上。。于是我又看了一下评论里的买家show

屏幕快照 2016-04-25 下午5.18.47

WTF, 差距也忒大了吧,果断放弃,再找,然后发现基本都是描述里屏幕P的很白,实物就是另一番面貌了。 揍在这个时候,想起了吃灰已久的kindle,如果用kindle的电子纸屏来做个闹钟一定很理想,然后在google找到了下面的图片:

E-Paper-Display-HAT

显示效果符合预期,而且图中时钟是基于树莓派做的,正好我也有两块树莓派,于是很快做了一个决定:自己DIY一块电子纸屏的时钟,这块时钟除了显示基本的日期时间,还可以显示天气和室内的温湿度(如果只能显示日期,优越感何在。。)。果断在淘宝采购了材料:4.3寸串口电子纸屏,DHT22温湿度传感模块,还有一块树莓派3(没错,虽然我是一个拥有了1代和2代的男人,但是还是忍不住购买了3代。。)后面,经过一阵python乱舞,原型很快出来了:

IMG_1879

搞到这里,加个壳子就算完活了。但是如何利用自身现有条件DIY一个即合身又高大上的壳恰恰是个难点。。。

我最开始设想的材料是:超轻粘土。这东西可塑性超高,自己捏捏就OK,不用神马3D打印之类的高科技。但是后面实际操作的结果是:1.  没有耐心,手残,很难把这个东西的表面处理的平整 2. 表面粗糙,没有光泽,体现不出高大上的效果。

经过一番考虑,又想出一个方案:自己淘宝买一个尺寸和样式合适的实木收纳盒,然后自己打个孔,改造一下。实际操作的结果就是:只有这个抽纸盒符合我的心意。。 反正桌子上也是要放抽纸的,就让他们结合吧。。。

IMG_1928

最后,Python脚本已开源,欢迎参观指导:https://github.com/emptyhua/epaper_clock

 

制作方法
所用的硬件
1、树莓派3
2、微雪4.3寸串口电子墨水屏
3、DHT22温湿度传感模块

硬件连接
屏幕\树莓派
DIN\TX(GPIO14)
DOUT\RX(GPIO15)
GND\GND
VCC\3V

DHT22\树莓派
DOUT\1-Wire(BCM4)
GND\GND
VCC\V

DHT22 DOUT引脚也可以接到其他gpio脚上,不过要相应的修改home_air_sensor.py中read_retry第二个参数

准备软件环境
禽兽,放开那个串口。。
树莓派的串口默认是用于linux串口终端登录用的,如果要通过串口控制屏幕,就需要把它解放出来~

树莓派3的串口BUG
在释放串口之前,我们要先解决一下树莓派3的BUG(如果用1,2代请忽略这一步)树莓派3的硬件串口被分配分配给了蓝牙模块,而GPIO14和GPIO15的串口是由内核模拟的,不稳定(可以说基本不能用),所以首先要把GPIO14和GPIO15改成硬件驱动

第一步 确保SD卡刷了最新的raspbian jessie镜像
第二步 系统启动,并连接了网络
第三步 执行

1
2
sudo apt-get update
sudo apt-get upgrade

第四步 编辑 /boot/config.txt 添加一行

1
dtoverlay=pi3-miniuart-bt

最后 禁用自带蓝牙

1
sudo systemctl disable hciuart

释放串口
编辑 /boot/cmdline.txt,默认是下面这样

1
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

或者这样

1
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 kgdboc=serial0,115200 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

把console=ttyAMA0,console=serial0,kgdboc=***这两个参数删掉 变成下面这样

1
dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

之后sudo reboot重启系统 串口就可以正常使用了

安装软件依赖

1
2
3
4
sudo apt-get install python-requests python-lxml python-serial git build-essential python-dev
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python ./setup.py install

准备串口屏幕的图片和字体资源
这个串口屏是通过TF卡加载字体和图片资源的(好坑爹的设计。。),所以你需要准备一张TF卡,格式化为 FAT32 文件系统,分配单元大小选择 4096 字节,然后把tf_card文件夹中的文件全部copy到TF卡根目录,并把TF卡查到屏幕的卡槽里。串口屏的更多资料见:http://www.waveshare.net/w/upload/archive/4/4a/20150408073133!4.3inch-e-Paper-UserManual-CN.pdf

终于可以运行了~~

在运行之前先编辑一下weather_time_render.py,找到下面2行,把注释取消掉,运行时会把屏幕TF卡中的文件加载到屏幕自带的NandFlash中,之后就不需要插TF卡了~~

1
2
# screen.load_pic()
# time.sleep(5)

运行脚本

1
2
3
sudo ./home_air_sensor.py
./weather_fetcher.py
./weather_time_render.py

没有特殊情况,屏幕将和成品显示同样的画面,第一次运行之后就可以把加载图片的2句代码再次注释掉了~