一 树莓派监控推流

前面已经搭建好了流媒体服务器,并且利用OBS成功的进行了推流,VLC拉流成功看到了直播。但是对于树莓派来说没有OBS。所以只能使用其他的方式。

间接推流

第一篇文章中我们使用VLC成功的把树莓派监控的视频传送到指定端口,然后PC上也使用VLC进行播放。所以第一个想到的最简单的办法就是PC从树莓派获取视频,然后通过PC推送到服务器。

  1. 树莓派捕获视频
sudo raspivid -o - -t 0 -w 640 -h 360 -fps 25 | cvlc -vvv stream:///dev/stdin --sout '#standard{access=http,mux=ts,dst=:8090}' :demux=h264

这是第一片文章的方法,树莓派使用raspivid捕获视频,然后利用cvlc发送到指定的端口。

  1. PC端推流

    前面是通过VLC进行播放,我们知道VLC本身也可以推流,所以先尝试使用VLC推送RTMP到服务器。

继续阅读

一 网络直播

对于视频监控来说,以前主要是局域网监控,随着网络技术发展,网络摄像头出现,使得监控从局域网大量的扩展到了互联网上。买一个网络摄像头,进行简单的设置就可以随时随地使用手机来查看家里的情况。 这个和互联网直播其实也是一个道理,以前的直播主要是在PC端,而现在也是扩展到了手机端。所以监控和直播本质上是一样的,都是视频采集、推送到服务端、客户端从服务端获取视频播放的过程。所以在使用树莓派搭建监控的时候,正好可以学习了解一下直播相关的一些知识。

上图显示了一个直播平台大致的样子,主要有几个步骤:
1. 音视频采集、编码、封装
2. 视频流传送到服务器(推流)
3. 服务器对视频流进行相应的处理,比如转码、存储等,也可以进行一些高级的处理。
4. 服务器把视频流进行分片,然后发送到CDN
5. 客户端从CDN拉取视频流进行播放

继续阅读

一 摄像头

最近想监控一下家里的猫在我上班时候干什么,本来打算买个小米或360的监控摄像头,价格也不贵。 想到树莓派吃灰了一段时间了,就想利用树莓派来做监控。树莓派官方发布了2款CSI接口的摄像头,当然树莓派有USB接口也可以使用USB摄像头。

树莓派摄像头

以上是官方摄像头的2个版本对比。型号是OV5647和IMX219,参考: Camera Module

继续阅读

一 DHT22传感器

 

目前树莓派可以使用的温度传感器还是比较多,主要有DHT11、DHT22和DS18B20。其中DS18B20只能测量温度,而DHT11精度和范围都比HDT22要差,量程湿度20-90%RH, 温度0~50℃, 所以我选择了DHT22,价格上DHT115,6块钱。而DHT22大概在15-18块左右。 温湿度传感器在空调、除湿机、汽车等很多地方都有使用。

DHT22样子是这样。上面写着ASAIR AM2302,表示使用的奥松的AM2302型温湿度传感器。每次使用一个设备之前都必须要了解这个设备的信息,奥松官网有详细的AM2303手册参考。

 

继续阅读

前面成功的使用RPi.GPIO库,设置高低电平完成了LED灯和蜂鸣器的状态控制,因为RPi.GPIO没有提供对TM1637的支持,所以借助了已有的库完成了四位数码管的显示。从tm1637.py源码看,他实际也是使用了RPi.GPIO库。 虽然PRi.GPIO库只提供了简单的设置GPIO高低电平的功能,但是我们前面说过这是所有通信的基础,你可以自己通过设置高低电平来实现所有的协议通信。这么一说和我们只用0和1来编程有点象了。只要有0和1,你可以编写任何代码。而这里有高低电平你可以控制任何设备。所以这一篇打算简单分析一下TM1637的源码。

 

一 TM1637

 

先从高层次的TM1637开始分析。在控制LED和蜂鸣器时,我们使用一个高低电平就能控制设备,因为对于这样的设备来说,他们的通信协议非常简单。 高电平发光、低电平不发光。相比而言,TM1637数码的协议就负责很多。要想知道一个设备的通信协议就需要有设备的资料。

我们在网上买到的TM1637一般是下面这个样子。这是由CATALEX公司出的4-Digit Display。而一般称他为TM1637是指它背后的拿颗20针的控制芯片。整个数码管子是由TM1637芯片(U1)、4位数码管(U2)和4针接口(J1)组成的。

继续阅读

前面已经学习了一些树莓派系统和GPIO的基本知识了,现在可以开始动手做一些简单的东西了。因为一些外设的连接会涉及到一些电路的知识,如果操作不当可能会损坏外设或者是树莓派。所以在哦动手之前最好还是补充点电路相关的知识。我是花了点时间又把初中电路稍微复习了下,然后又乱七八糟看了点模拟电路、数字电路。所以最终应该也没有太多用处。

网上对于树莓派第一个项目基本就是接LED,然后控制。所以我第一个程序也使用LED,只不过想做的稍微复杂一点。 结合数码管和蜂鸣器来模拟十字路口的交通信号灯。使用的材料主要有:

  • 3个不同颜色的LED灯
  • TM1637四位数码管
  • 有源蜂鸣器
  • 若干100欧以上的电阻
  • 面包板和面包板连接线
  • 若干杜邦线

 

继续阅读

树莓派基本环境搭建好之后就可以在上面安装各种应用了。这样对树莓派来说就是一台小型电脑,基本电脑、服务器能做的事情她也都能做。只不过内存比较小。1G的内存多跑2个服务内存就吃不消了。最近VPS也是,apache和tomcat一跑,差不多吃了500M内存,也不知道能怎么优化了。而且家里光猫无法破解成桥接模式,外网穿透还没有做,所以就没装什么服务。 所以还是玩一玩树莓派相比电脑特有的东西吧。

 

一 GPIO

 

GPIO全称是General Purpose Input Output (通用输入/输出)。广义上来说它并不是类似USB、DVI、HDMI这样一种特定协议的接口,而是通用接口的总称。对于了解单片机的人来说应该非常熟悉,而对于我们这些纯软件开发,没有接触过单片机的人来说,并不是很好弄清楚到底是个什么东西。 下面是维基百科的定义:

general-purpose input/output (GPIO) is an uncommitted digital signal pin on an integrated circuit or electronic circuit board whose behavior—including whether it acts an input or output—is controllable by the user at run time.

从上面总结出几点:

    1. 数字针脚(可以是集成电路上的针脚,比如CPU或位处理器的针脚;也可以是开发板比如树莓派、Arduino上提供的GIPO接口)
    2. 可以用来输入或输出
    3. 运行时可控

继续阅读

一 安装开发必备软件

 

 

build-essential

 

最基本的,系统已经装好了,里面主要包括gcc, libc, make

pi@raspberrypi-cc:~ $ sudo apt install build-essential
Reading package lists... Done
Building dependency tree
Reading state information... Done
build-essential is already the newest version (12.3).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

 

gcc/g++

 

build-essential系统已经装好了,那么gcc自然也好了

pi@raspberrypi-cc:~/source $ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-linux-gnueabihf/6/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: ../src/configure -v --with-pkgversion='Raspbian 6.3.0-18+rpi1+deb9u1' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-6 --program-prefix=arm-linux-gnueabihf- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libitm --disable-libquadmath --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-armhf/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-armhf --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-armhf --with-arch-directory=arm --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-sjlj-exceptions --with-arch=armv6 --with-fpu=vfp --with-float=hard --enable-checking=release --build=arm-linux-gnueabihf --host=arm-linux-gnueabihf --target=arm-linux-gnueabihf
Thread model: posix
gcc version 6.3.0 20170516 (Raspbian 6.3.0-18+rpi1+deb9u1)

好像从Android 7.0开始的source编译默认编译器已经使用clang,不过目前也没编译源码的需求,关键这机器得编译一天吧。。。哈哈,先不装了

继续阅读

目前除了官方系统和其他基于Linux的系统外,树莓派还可以使用Windows IoT系统,当然也有然把Windows10 ARM移植到了树莓派上。不过Windows IoT是官方系统。 微软目前有一整套物联网相关的解决方案,主要包括Azure IoT 和 Windows10 IoT,应该分别对应的了云端和设备端。 对于云端来说可以利用微软的Azure云平台,提供大数据存储和处理,人工智能,机器学习等功能,然后和安装了Windows10 IoT的设备进行联通控制。 有兴趣的话可以看一下微软的网站:https://www.microsoft.com/zh-cn/internet-of-things/products

 

Windows10 IoT

 

Windows 10 IoT powers the intelligent edge

Simplify the Internet of Things with a rich device platform, world class developer tools, enterprise grade support and a global partner ecosystem. Do more at the edge with machine learning capabilities and scale with the power of Azure IoT.

通过利用 Windows 10 IoT 将你的资产转变为智能设备,以实现边缘和云智能的出色平衡,从而拓展深度学习,完成更多事项。

这是微软对Windows10 IoT的解释。利用Windows10 IoT可以实现跨平台,在不同平台上有相同的表现。IoT系统主要有两种:

  • Windows IoT Core

    Built for small, secure, smart devices. Our smallest Windows 10 operating system can run on both Intel or ARM hardware.

  • Windows IoT Enterprise

    Bringing the full power of Windows to smart devices, Windows 10 IoT Enterprise has specialized lockdown features for creating dedicated devices.

对于树莓派来说安装的是Windows10 IoT Core。

 

继续阅读

最近业余有点空闲时间,入手了一台树莓派3B+,想业余时间架点服务,另外尝试一下连接一些外设玩玩。第一次玩,很多不清楚的,所以边玩边写下来。

 

一 硬件

 

目前最新的树莓派版本是3B+,今年3月发布,上一代是16年发布的。主要区别在于CPU 频率提升到了1.4G, 网卡升级到了1000M,支持5GWIFI, 蓝牙升级到4.2。

其他树莓派型号如下:

继续阅读