Junction全球黑客大赛获奖证书
证书
CGI KONE Out of the box thinking
记录
简单记录一下我们参加全球黑客大赛的证书,证明我来过。哈哈
树莓派在运行桌面环境的时候,长时间不操作就会自动黑屏,是电源管理的一个节能的功能,有时候挺烦人,可以关闭它。
在终端中输入:
sudo xset s off
sudo xset -dpms
sudo xset s noblank
sudo raspi-config
命令xserver-command=X -s 0 -dpms
保存后退出重启系统。
屡试不爽!
pi@raspberrypi:~ $ sudo apt-get update
Get:1 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB]
Get:2 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
Reading package lists... Done
E: Repository 'http://raspbian.raspberrypi.org/raspbian buster InRelease' changed its 'Suite' value from 'stable' to 'oldstable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
E: Repository 'http://archive.raspberrypi.org/debian buster InRelease' changed its 'Suite' value from 'testing' to 'oldstable'
N: This must be accepted explicitly before updates for this repository can be applied. See apt-secure(8) manpage for details.
sudo apt-get -y update --allow-releaseinfo-change
Get:1 http://archive.raspberrypi.org/debian buster InRelease [32.6 kB]
Get:2 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
Get:3 http://raspbian.raspberrypi.org/raspbian buster/contrib Sources [78.5 kB]
Get:4 http://archive.raspberrypi.org/debian buster/main armhf Packages [393 kB]
Get:5 http://raspbian.raspberrypi.org/raspbian buster/main Sources [11.4 MB]
Ign:5 http://raspbian.raspberrypi.org/raspbian buster/main Sources
Get:6 http://raspbian.raspberrypi.org/raspbian buster/non-free Sources [139 kB]
Get:7 http://raspbian.raspberrypi.org/raspbian buster/rpi Sources [1,132 B]
Get:8 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
21% [8 Packages 443 kB/13.0 MB 3%]
顺利解决~
所谓浪派,其实是我和几个朋友一起搞的一个树莓派小车的项目,其核心内容是想在疫情期间无法面基就只好通过网络交互来实现原先的自由自造的折腾行为.其中涉及到原型设计,芯片选型,PCB设计,打样焊接,程序调试等一系列技术栈,在设计之初为了能够让大家都有参与进来的兴趣,还专门采用了kicad设计软件来进行pcb设计...参与的小伙伴各显神通,但是也遭遇过一些小小的滑铁卢...
sudo apt-get update
sudo apt-get -y install fonts-droid-fallback
sudo reboot
然后你安装的游戏就算是有中文也没有问题了。
今天尝试了一下,好多代码都变化了。
现在用的基本上就是要将树莓派的RPi.GPIO库都丢了。
sudo apt purge -y RPi.GPIO
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
sudo python3 -m pip install --force-reinstall adafruit-blinka
然后就安装这两个库够了。
灯带的5V接树莓派5V,当然,如果灯的数量多,建议额外供电,我就8个灯的灯带,够用。
GND接树莓派GND。
信号口D+接到树莓派物理接口12号,BCM的18号口上。
然后就可以写代码测试了。
import board
from time import sleep
import neopixel
pixels = neopixel.NeoPixel(board.D18, 8)
pixels.fill((0,255,0))
pixels[0] = (255,0,0)
while True:
for x in range(0, 8):
pixels[x] = (255, 0, 0)
sleep(0.1)
pixels.fill((0,255,0))
for x in range(0, 8):
pixels[x] = (255, 0, 0)
sleep(0.1)
pixels.fill((0,255,255))
for x in range(0, 8):
pixels[x] = (255, 0, 0)
sleep(0.1)
pixels.fill((0,0,255))
for x in range(0, 8):
pixels[x] = (0, 255, 0)
sleep(0.1)
pixels.fill((255,255,127))
for x in range(0, 8):
pixels[x] = (0, 255, 0)
sleep(0.1)
pixels.fill((255,255,0))
代码非常简单,不屑注释了。
import board
from time import sleep
import neopixel
pixels = neopixel.NeoPixel(board.D18, 8)
pixels.fill((0,255,0))
这段代码是初始化的部分。
运行以下代码以导入必要的模块,并初始化带有8个LED的NeoPixel灯带,如果你的NeoPixels连接到其他引脚,别忘了更改引脚,如果灯的数量不一样,也要改。
实例化后我用了fill方法来做操作了,有三个方法如下:
pixels[0] = (255,0,0)
就是点亮第一个灯,颜色为红色,(255,0,0) 就是 (R,G,B)三色的定义,每个灯都可以由3种颜色组合成N多种颜色,自己配置。
pixels.fill((0, 255, 0))
就是全部填充绿色。
就这么简单,其他自己琢磨吧。
哦,最后给一张特写图:
简单做个笔记记录一下串口编程的方法。
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringSerial.h>
int main ()
{
int serial_port ;
char dat;
if ((serial_port = serialOpen ("/dev/ttyS0", 9600)) < 0) /* open serial port */
{
fprintf (stderr, "Unable to open serial device: %s\n", strerror (errno)) ;
return 1 ;
}
if (wiringPiSetup () == -1) /* initializes wiringPi setup */
{
fprintf (stdout, "Unable to start wiringPi: %s\n", strerror (errno)) ;
return 1 ;
}
while(1){
if(serialDataAvail (serial_port) )
{
dat = serialGetchar (serial_port); /* receive character serially*/
printf ("%c", dat) ;
fflush (stdout) ;
serialPutchar(serial_port, dat); /* transmit character serially on port */
}
}
}
gcc -o serialtest -lwiringPi serialtest.c
./serialtest
就是传说中的Ultrasonic传感器,学名:HC-SR04 , 某宝上非常cheap, 自己搜.
HC-SR04是用于2cm至400cm距离非接触距离测量的常用模块。
它使用声纳(如蝙蝠和海豚)以高精度和稳定的读数来测量距离。
它由超声波发射器,接收器和控制电路组成。
发射器发射短脉冲,该短脉冲被目标反射并被接收器拾取。
计算超声波信号的发送和接收之间的时间差。
使用声速和“ 速度=距离/时间 ”等式,可以轻松计算源与目标之间的距离。
HC-SR04超声波距离传感器模块具有四个引脚:
VCC – 5V,输入电源
TRIG –触发输入
回声 –回声输出
GND –接地
1.向TRIG输入提供触发信号,它需要至少10μS持续时间的高电平信号。
2.这使模块能够发送八个40KHz超声波脉冲串。
3.如果模块前面有障碍物,它将反射那些超声波
4.如果信号返回,则模块的ECHO输出将在发送和接收超声信号所花费的时间内保持为高电平。脉冲宽度的范围为150μS至25mS,具体取决于障碍物与传感器之间的距离,如果没有障碍物,则脉冲宽度约为38ms。
ECHO输出为5v而Raspberry Pi GPIO的输入引脚的额定电压为3.3V,因此,无法将5V直接提供给不受保护的3.3V输入引脚,除非你想把树莓派干掉...
因此,我们得使用分压电路,使用适当的电阻将电压降至3.3V。
以下公式可用于计算电阻值,
“ Vout = Vin x R2 /(R1 + R2)”
这里我用的是常用的4.7K和10K电阻做的分压电路,中间抽头给树莓派GPIO引脚,安全可靠。
画图软件是frizing, 不要再私信问我了...
距离计算
脉冲所花费的时间实际上是超声波信号往返的时间,而我们只需要一半的时间。因此,时间被视为时间/ 2。
距离=速度时间/ 2
而海平面声速= 343 m / s或34300 cm / s
因此,距离= 17150 时间(单位厘米)
*校准
为了获得准确的距离读数,可以使用尺子校准输出。在下面的程序中,添加了0.5 cm的校准。
你如果不想校准也可以尝试不加,就是大致有点儿偏移量。
import RPi.GPIO as GPIO #Import GPIO library
import time #Import time library
GPIO.setmode(GPIO.BCM) #Set GPIO pin numbering
TRIG = 23 #Associate pin 23 to TRIG
ECHO = 24 #Associate pin 24 to ECHO
print "Distance measurement in progress"
GPIO.setup(TRIG,GPIO.OUT) #Set pin as GPIO out
GPIO.setup(ECHO,GPIO.IN) #Set pin as GPIO in
while True:
GPIO.output(TRIG, False) #Set TRIG as LOW
print "Waitng For Sensor To Settle"
time.sleep(2) #Delay of 2 seconds
GPIO.output(TRIG, True) #Set TRIG as HIGH
time.sleep(0.00001) #Delay of 0.00001 seconds
GPIO.output(TRIG, False) #Set TRIG as LOW
while GPIO.input(ECHO)==0: #Check whether the ECHO is LOW
pulse_start = time.time() #Saves the last known time of LOW pulse
while GPIO.input(ECHO)==1: #Check whether the ECHO is HIGH
pulse_end = time.time() #Saves the last known time of HIGH pulse
pulse_duration = pulse_end - pulse_start #Get pulse duration to a variable
distance = pulse_duration * 17150 #Multiply pulse duration by 17150 to get distance
distance = round(distance, 2) #Round to two decimal points
if distance > 2 and distance < 400: #Check whether the distance is within range
print "Distance:",distance - 0.5,"cm" #Print distance with 0.5 cm calibration
else:
print "Out Of Range" #display out of range
python3 ultrasonic_distance_detect.py
效果很明显。
反射角度如果大于15度有可能会出现值不准,如果附近噪声很大也许会有干扰,其他的没啥,很简单的一个模块,可以结合树莓派或者别的设备做一个超声波控制音量的玩意儿,树莓派爬音乐网站,播放音乐,由超声波传感器来进行检测,距离小于多少就降低音量,否则就开大音量, 自己想办法玩儿吧! 转载记得标识出处!
谢谢观看,我是骑驴玩儿漂移,甩你三条街~ 白了个白~
最近在群里听到有朋友推荐使用 live555 来在树莓派上进行rtsp 服务器的搭建,非常简单做个记录防忘记.
Live555是一个开源的 C++源码编写的流媒体推流软件合集,功能好多,还咩有玩儿透彻,但是你也看得懂源码的.非常激动人心.
链接: http://www.live555.com/liveMedia/public/
tar -xf live555-latest.tar.gz
cd live/
./genMakefiles linux
修改这部分内容:
mkfifo /tmp/rpicam
make
sudo make install
./testOnDemandRTSPServer &
raspivid -rot 180 -o /tmp/rpicam -f -t 0
使用 opencv 打开,自己创建一个文件:
如图,截图中缩进层级有点儿变化,主要看后面的代码.
图为:
# get streaming video via opencv
import cv2
import numpy as np
cap = cv2.VideoCapture("rtsp://192.168.3.20:8554/liv0")
try:
while True:
ret, frame = cap.read()
if ret == True:
smallFrame = cv2.resize(frame, (480, 240))
key = cv2.waitKey(1)
if key == 27:
break
cv2.imshow("small size Frame", smallFrame)
except KeyboardInterrupt:
print("quit")
cap.release()
cv2.destroyAllWindows()
python3 streaming_get_from_opencv.py
好了,还有一个我在蘑菇云参加一个 piday4fun 的活动地址在: https://github.com/piday4fun
转发记得标明出处, 否则小心菊花万人捅~
ffmpeg强大的爆,直接记录一些使用小技巧。
比如avi文件想转mp4,或者mp4想转为ts。
ffmpeg -i test.avi output.mp4
ffmpeg -i test.mp4 output.ts
ffmpeg -i test.avi -vcodec libx264 output.mp4
ffmpeg -i "http://www.yoyojacky.com/video/test.avi" -y -vcodec libx264 output.mp4
ffmpeg -i test.mp4 -acodec copy -vn output.aac
默认mp4的audio codec是aac,如果不是,可以都转为最常见的aac,苹果手机支持,想做铃声的自己可以抓视频然后采集声音。
ffmpeg -i test.mp4 -acodec aac -vn output.aac
ffmpeg -i test.mp4 -vcodec copy -an output.mp4
ffmpeg -i test.mp4 -r 1 -q:v 2 -f image2 snapshot.jpg
-r 表示每一秒几帧
-q:v表示存储jpg的图像质量,一般2是高质量。
这条命令ffmpeg会把test.mp4,每隔一秒,存一张图片下来。假设有60s,那会有60张。
如果你想,也可以设置开始的时间,和你想要截取的时间。
ffmpeg -i test.mp4 -ss 00:00:30 -t 20 -r 1 -q:v 2 -f image2 pic-1.jpg
-ss 表示开始时间
-t 表示共要多少时间。
以上的命令,ffmpeg会从test.mp4的第30s时间开始,往下20s,即30~50s这20秒钟之间,每隔1s就抓一帧,总共会抓20帧。
下面的命令,可以从时间为00:00:45开始,截取10秒钟的视频。
ffmpeg -ss 00:00:45 -t 00:00:10 -i test.mp4 -vcodec copy -acodec copy output.mp4
-ss表示开始切割的时间,-t表示要切多少。上面就是从45秒开始,截取10秒钟的视频。
码率控制对于在线视频比较重要,因为在线视频需要考虑带宽。
那么什么是码率?so easy:
bitrate = file size / duration
比如一个文件20.8M,时长1分钟,那么,码率就是:
biterate = 20.8M bit/60s = 20.810241024*8 bit/60s= 2831Kbps
一般音频的码率只有固定几种,比如是128Kbps,
那么,video的就是
video biterate = 2831Kbps -128Kbps = 2703Kbps。
ffmpg控制码率有3种选择:-minrate -b:v -maxrate
-b:v主要是控制平均码率。
比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。
ffmpeg -i test.mp4 -b:v 2000k output.mp4
上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了,目测接近一半。
不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
-bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好)
ffmpeg -i test.mp4 -b:v 2000k -bufsize 2000k output.mp4
-minrate -maxrate就简单了,在线视频有时候,希望码率波动不要超过一个阈值,可以设置maxrate。
ffmpeg -i test.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4
比如一个视频的编码是MPEG4,想用H264编码,咋办?
ffmpeg -i test.mp4 -vcodec h264 output.mp4
相反也一样
ffmpeg -i test.mp4 -vcodec mpeg4 output.mp4
当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以 Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然 了,ffmpeg自己也有编码器)
ffmpeg -i test.mp4 -c:v libx265 output.mp4
ffmpeg -i test.mp4 -c:v libx264 output.mp4
ffmpeg -i 本地视频.ts -c copy -map 0 -f segment -segment_list 视频索引.m3u8 -segment_time 5 前缀-%03d.ts
其中segment 就是切片,-segment_time表示隔几秒进行切一个文件,上面命令是隔5s,你也可以调整成更大的参数。
上面是网上抄的,下面是我经常用的:
ffmpeg -i test.mp4 -c copy hls_list_size 0 output.m3u8 hls_time 5
上面的hls_list_size表示目录文件中需要播放的文件数量,0表示整个视频,hls_time表示每个切片的长度,上面设置的5秒
ffmpeg –i test.mp4 –vcodec copy –an –f m4v output.h264
ffmpeg -i test.mp4 -vf scale=800:600 output.mp4
ps: 如果600不写,写成-1,即scale=800:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。
ffmpeg -i input.mp4 -vf scale=800:-1 output.mp4
比如我有一个图片想要贴到一个视频上:
ffmpeg -i test.mp4 -i logo.png -filter_complex overlay output.mp4
####要贴到其他地方?看下面:
右上角:
```bash
ffmpeg -i test.mp4 -i logo.png -filter_complex overlay=W-w output.mp4
左下角:
ffmpeg -i test.mp4 -i logo.png -filter_complex overlay=0:H-h output.mp4
右下角:
ffmpeg -i input.mp4 -i logo.png -filter_complex overlay=W-w:H-h output.mp4
语法:-vf delogo=x:y:w:h[:t[:show]]
x:y 离左上角的坐标
w:h logo的宽和高
t: 矩形边缘的厚度默认值4
show:若设置为1有一个绿色的矩形,默认值0。
ffmpeg -i test.mp4 -vf delogo=0:0:220:90:100:1 output.mp4
把test.[001-100].jpg序列帧和music.mp3音频文件利用mpeg4编码方式合成视频文件test.avi:
ffmpeg -i music.mp3 -i test.%3d.jpg -s 800x600 -author yoyo -vcodec mpeg4 test.avi
还可以把视频文件导出成jpg序列帧:
ffmpeg -i test.avi pic.%d.jpg
好了,后面有空继续添加小技巧。
首先在树莓派中安装vim:
sudo apt-get update
sudo apt-get install vim
克隆rkulla 的pydiction项目到本地:
mkdir -p ~/.vim/bundle
cd ~/.vim/bundle
git clone https://github.com/rkulla/pydiction.git
cp -r ~/.vim/bundle/pydiction/after/ ~/.vim # 这步非常关键
如果有新的软件包想要支持补全.例如 RPi.GPIO
那么先安装包
sudo apt-get -y install RPi.GPIO
然后进入目录
cd ~/.vim/bundle/pydiction/
python3 pydiction.py RPi.GPIO
就可以生成全新的 complete-dict 了.
配置.vimrc文件:
" 启用文件类型插件
filetype plugin on
" 配置pydiction插件路径
let g:pydiction_location = '~/.vim/bundle/pydiction/complete-dict'
" 设置pydiction补全菜单的高度,默认是8
let g:pydiction_menu_height = 20
set syntax on
不知道你卖树莓派4B了么?不知道你们是否尝试在树莓派4b上用wiringpi的库,反正是官方的不好用。
那么你该怎么办?
sudo apt -y purge wiringpi
hash -r
cd /tmp
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio readall
gpio -v
正常显示
wiringpi-latest.deb.tar
下载后上传树莓派,通过命令
tar -xf wiringpi-latest.deb_.tar.gz
dpkg -i wiringpi-latest.deb
今天在树莓派使用过程中要用到中文,以前都是全英文操作,现在突然要用中文,措手不及,赶紧装个软件。
Kazam可从Ubuntu存储库获得,支持ARM和PowerPC设备以及32位和64位,是一种高效的桌面视频捕获工具。
Kazam能够录制全屏,所有桌面屏幕,单个窗口和桌面区域,还可以从扬声器和麦克风中捕获音频。
sudo apt-get install kazam
然后kazam -f 试试,需要桌面环境才可以用。然而并不好用。
继续尝试换了一个:
名字真TM怪,倭寇屏。。vokoscreen,发音难道是: "哇靠死可rain?" ????
说明一下,这个是我用过的最好用的录屏软件没有之一。。。
凭借简单的用户界面和丰富的功能,Vokoscreen是Linux的另一种屏幕录制选项。
能够录制和流式传输您的桌面,您将需要一个高端游戏装备,以获得高清流媒体的好处。
通过GitHub可以通过添加PPA通过命令行安装Vokoscreen。
sudo add-apt-repository ppa:vokoscreen-dev/vokoscreen
sudo apt-get update
sudo apt-get install vokoscreen
Vokoscreen一旦安装完成就可以立即使用了。可以从整个桌面,窗口,区域或指针周围的指定放大率进行录制。
这对于特写视频录制非常有用。可以选择视频和音频编解码器,同时还可以更改音频驱动程序,视频格式和帧速率。
还可以在屏幕录制中包含网络摄像头中的素材,易于使用的按钮让您可以录制,停止,暂停和播放屏幕截图。
唯一的缺陷是:需要密切关注文件大小!Vokoscreen总体上来说是一款非常方便的屏幕录制工具,易于设置和使用,老李在这里强烈
最后一个是我不想尝试的,你们如果尝试了请告诉我好用不。
它可能称自己为“简单”,但这个应用程序实际上比这里列出的其他一些功能更多。
启动后,您将看到一个屏幕,有很多选项。这些包括预期的全屏录制,录制选择,跟随光标,以及录制视频游戏录制GL的选项。
为了节省时间,你还可以创建适合不同屏幕录制任务的配置文件。还可以录制音频,并通过“ 继续”按钮找到的后续屏幕更改视频类型。
准备就绪后,点击开始录制 - 默认情况下,生成的视频将保存在你当前用户的主目录中。
同样,如果您使用的是基于Ubuntu的发行版,则需要先安装PPA存储库,然后才能安装Simple Screen Recorder。
sudo add-apt-repository ppa:maarten-baert/simplescreenrecorder
sudo apt-get update
sudo apt-get install simplescreenrecorder
如果您正在运行64位系统并想要记录32位OpenGL应用程序,请安装:
sudo apt-get install simplescreenrecorder-lib:i386
适用于Linux的原始屏幕捕获工具RecordMyDesktop几乎可以在任何系统上运行,包括Raspberry Pi。
虽然您可以通过命令行使用基本版本,但使用以下命令安装:
sudo apt-get install recordmydesktop
还可以使用该工具选择两个GUI前端,gtk-recordmydesktop和qt-recordmydesktop。
安装完成后,这个简单的工具在高级菜单中提供了一些附加选项,以及选择整个窗口或仅选择部分的功能
请记住在捕获后给它时间对视频进行编码。
视频将输出到当前用户的主目录。
好了,到这里应该你已经有了自己的选择,那么就这样吧,我是骑驴玩儿漂移,青山常在,绿水长流,白了个白~
我要简单做个记录。
我知道文章用英文名字有些人就不会搜了。
我发现了两个关闭HDMI的命令:
vcgencmd display_power 0
tvservice -o
在使用tvservice -o关闭HDMI 后,使用tvservice -p && fbset -depth 8 && fbset -depth 16将其恢复。
1. 安装树莓派摄像头,得是官方的。
2.更新系统安装imagemagick软件包:
sudo apt-get -y install imagemagick
然后;
raspistill -w 800 -h 600 -t 10000 -tl 2000 -o image%02d.jpg convert -delay 10 -loop 0 image*.jpg animateMe.gif
默认情况下,相机拍摄的分辨率为3280×2464像素,分辨率为72 ppi(p ixels p er inch )。这非常大,因此图像处理时间会更长。在Raspistill中,可以通过说明宽度和高度来调整图像的大小。
如果您觉得可拍摄超过99张照片,则可以创建3个甚至4个空格,这样您就可以使用图像%03d.jpg和图像%04d.jpg保存数千张图像。
convert 是来自ImageMagick的命令。此行将所有已保存的jpeg带有图像前缀,并将它们转换为动画GIF,延迟(-delay)为10/100秒。
-loop 0 表示GIF将永远循环。