NanoPi NEO 创客秘籍 -01

版本日期: 2017-01-11

1 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

内容简介-

本创客秘籍主要收录“电子发烧友官网”、"云汉社区"的精华帖子编制而成,专门为 创客、嵌入式爱好者而备。文中以 NanoPi NEO 作为核心创客平台,讲解如何建立开发 环境,如何使用 NanoPi NEO 作为真机调试程序 ,如何在程序中访问硬件设备,包括 I2C, GPIO, SPI, 串口等硬件接口,如何编写 Python 程序,如何编译系统等教程。友善电子 特意介绍了很多极具挑战性和实用性的案例,你可以从这里领略到智能家居、物联网的 风采,做到真正为你的项目开发助一臂之力。该创客秘籍同时适用于友善推出的 H3 系 列的所有开发板。

本创客秘笈由广州友善之臂计算机科技有限公司 (以下简称“友善电子” )创建和维 护,友善之臂目前并不对其中的内容提供任何解释和解答服务,用户可以在相应论坛中 交流和你所遇到的问题和疑问。本手册以首页日期为版本标志,并且本创客秘籍日后将 会不断跟新添加新内容,请留意友善官方的最新动态。

本创客秘笈内容主要来自 “电子发烧友官网“,并且每篇文章都注明了作者网名和原 文链接。我们欢迎各位玩家复制传播本手册,但不得擅自摘抄部分或全部内容用作商业 用途,违者必究,友善电子保留本手册的解释和修改权。

什么是 NanoPi NEO?

NanoPi NEO(以下简称 NEO)是友善电子团队面向创客、嵌入式爱好者,电子艺术 家、发烧友等群体推出的又一款完全开源的掌上创客神器。 NanoPi NEO 采用了 40nm 制程的全志 H3 四核 Cortex-A7 处理器(主频 1.2GHz)、 配备了 256/512MB RAM、1×10/100 Mbps 以太网、1×microUSB 接口、以及 microSD 读卡 器。提供全开源的内核代码,有完整的原理图,并且有丰富的教程。

云汉电子社区NanoPi2论坛链接:http://bbs.ickey.cn/group-show-id-147.html 电子发烧友论坛 NanoPi2 论坛链接:http://bbs.elecfans.com/zhuti_831_1.html

2 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

目录

内容简介- ...... 2 技巧 1- 安装配置Nginx环境WEB网站详解 ...... 5

技巧 2-【机器学习/计算机视觉/NLP装机篇】超级牛力fish+pyshell ...... 9

技巧 3-机器学习/计算机视觉/NLP进阶篇】34 行代码搞定微信机器人 ...... 14

技巧 4-【机器学习/计算机视觉/NLP高级篇】用opencv做动态监视器 ...... 18

技巧 5-利用unixbench进行性能评估 ...... 22

技巧 6-使用Samba 在PC和NEO间共享文件+手机访问的云盘 ...... 25

技巧 7-网线登录 putty 登录配置方法 ...... 32

技巧 8-修改系统时间和 gcc编译环境安装 ...... 35

技巧 9- USB摄像头篇 ...... 38

技巧 10-直升机驾驶室安装设备试验 ...... 42

技巧 11-无限的音乐(airplay by shairport) ...... 51

技巧 12-摄像头与光电传感器的结合 ...... 54

技巧 13- nano-NEO与zigbee的简单串口通信 ...... 59

技巧 14- TCP通信之客户端程序 ...... 67

技巧 15-基于H264 RTP的图传系统 ...... 69

技巧 16-基于web摄像头的远程监控系统 ...... 71

技巧 17- GPS模块测试 ...... 75

技巧 18- NanoPi NEO 构建MIDI多媒体平台 ...... 79

技巧 19-获取Neo当前温度等状态 ...... 84

技巧 20- NEO的新系统-DietPi ...... 88

技巧 21- NanoPI-NEO 内核裁切 ...... 99

技巧 22-内网穿透简单方案-搭建frp服务 ...... 103

技巧 23-内网穿透第一步-搭建shadowsocks服务器 ...... 106

技巧 24-内网穿透第二步-搭建ngork服务 ...... 110

技巧 25-搭建离线个人Git服务器 ...... 115 3 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 26-实现外网控制 ...... 118

技巧 27-实现开机自启动nat123 ...... 129

技巧 28-搭建web服务器 ...... 131

技巧 29-驱动MAX7219 点阵模块 ...... 133

技巧 30-开机跑马灯显示IP ...... 135

4 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 1- 安装配置 Nginx 环境 WEB 网站详解

网络作者:Q69693721 原文链接:http://bbs.elecfans.com/jishu_945804_1_3.html

LNMP(Linux+Nginx+Mysql+PHP)相信学过计算机编程和网站的人应该都知道他一直是 Linux环境下WEB网站的经典环境。首先NanoPi NEO原生就是为LINUX系统而开发的所以系统 方面不用担心。至于NGINX和PHP在WEB网站用户访问量不超过 1000 次并发访问的话我相信 NanoPi NEO还是能扛得住的。但是这里因为考虑到NanoPi NEO这款嵌入式产品其内存限制所 以不推荐使用MYSQL这种重型的数据库,而是采用嵌入式设备中非常通用的Sqlite数据库, 虽然这数据库小单是处理 100 万条数据量还是不输于MYSQL这种重型数据库的。 可能有人 会问,搭建一个这么小的网站有什么用?我可以很负责任的告诉大家,这些都值BS软件框架 的基础。基于这个NanoPiNEO的LNMP环境你可以把它变成家有私有云盘,编程人员的PHP开发 环境,电影在线播放源,离线下载服务器等你能想到或想不到的各种家庭级的应用。这样你 就不用整天 24 小时开个百多瓦的电脑,而只需要一个小小的 2 瓦NanoPi NEO板子了。废话 不多说了,让我手把手详细到告诉如何搭建世界上超级迷你的WEB环境网站吧!GO~GO~GO~ 【1.1 更新系统源等信息】 采用 root 用户登录输入命令进行更新系统的源信息,否则可能导致下面的在线安装不能成 功。 root@nrjs-cn:~# apt-get update

【1.2 开始安装 nginx 服务】 完成上面的更新命令后,在命令行输入即可安装 NGINX 服务了。这个过程需要 3~5 分钟的时 间具体看网速和编译速度。 root@nrjs-cn:~# apt-get install nginx

5 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

【1.3 启动 NGINX 服务】 待 NGINX 安装完成后不需要做任何配置就能够直接使用如下命令启动,如果启动错误或无法 启动则可能是你的安装过程有问题。你可以随时 QQ 联系我咨询。 root@nrjs-cn:~# /etc/init.d/nginx restart

【2.1 配置】 默认安装完成后其 NGINX 的配置路径是/etc/nginx/conf.d/在这里我们建立一个自己测试 的配置文件 nrjs.conf 来进行测试。 root@nrjs-cn:~# vi /etc/nginx/conf.d/nrjs.conf

配置文件中 server{}为声明一个作用域 listen 表示 WEB 服务所在的端口,默认是 80 端口,但这里我们方便测试采用 20080 端口。 root 是配置该网站的根目录位置。

6 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

index 是指定那几个文件为网站的默认首页网页。 以上仅仅只是简单的配置,具体详细配置可以查看本文后面的扩展资料。

建立网站的根目录,用来存放网站的各种网页文件,图片等。 root@nrjs-cn:~# mkdir /home/nrjs/

使用编辑器建立一个最简单的网页 index.htm 做测试。 root@nrjs-cn:~# vi /home/nrjs/index.htm

【3.1 扩展资料】 #设定 mime 类型,类型由 mime.type 文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #设定负载均衡的服务器列表 upstream mysvr { #weigth 参数表示权值,权值越高被分配到的几率越大 server 192.168.8.1x:3128 weight=5;#本机上的 Squid 开启 3128 端口 server 192.168.8.2x:80 weight=1; server 192.168.8.3x:80 weight=6; #侦听 192.168.8.x 的 80 端口 listen 80; server_name 192.168.8.x; #对 aspx 后缀的进行负载均衡请求 location ~ .*\.aspx$ { root /root; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 proxy_pass vr ;#请求转向 mysvr 定义的服务器列表 #以下是一些反向代理的配置可删除. proxy_redirect off;

7 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

#后端的 Web 服务器可以通过 X-Forwarded-For 获取用户真实 IP proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; #允许客户端请求的最大单文件字节数 client_body_buffer_size 128k; #缓冲区代理缓冲用户端请求的最大字节数, proxy_connect_timeout 90; #nginx 跟后端服务器连接超时时间(代理连接超时) proxy_send_timeout 90; #后端服务器数据回传时间(代理发送超时) proxy_read_timeout 90; #连接成功后,后端服务器响应时间(代理接收超 时) proxy_buffer_size 4k; #设置代理服务器(nginx)保存用户头信息 的缓冲区大小 proxy_buffers 4 32k; #proxy_buffers 缓冲区,网页平均在 32k 以下的话,这样设置 proxy_busy_buffers_size 64k; #高负荷下缓冲大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #设定缓存文件夹大小,大于这个值,将从 upstream 服务器传

【4.1 总结】 在这次使用 NanoPiNEO 搭建网站 WEB 服务器过程中 NanoPiNEO 的处理能力还是可以的,虽然 在 NGINX 的编译环节消耗了点时间。但搭建完后启动 NGINX 和访问网页都是非常快的。作为 一个家用级的 WEB 服务器是没有问题,这位以后搭建家庭 WEB 存储私有云垫底了基础。

8 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 2- 【 机器学习/ 计算机视觉/NLP 装机篇】超级牛力 fish+pyshell

网络作者:Constgg 原文链接:http://bbs.elecfans.com/jishu_946832_1_3.html

neo 是一个 板子,如果只是拿来玩玩 gpio 的话未免太浪费,以下教大家如何唤醒 neo 的超级牛力!亮瞎你的眼! 本贴将介绍如何在 neo 上面把玩 sklearn+opencv+nlp 等各种高端大气的前沿科技,如何把 应用在大型服务器上的 机器学习/计算机视觉/自然语言处理等强大功能运行在脚拇指大小的板子上,绝对是超级牛 力! fish: 超强 shell,秒 bash 秒 dash 秒 zsh 秒天秒地秒宇宙! arm 的包很少见,源里面已经找不到了,所以直接提供了安装包. 各种强大功能,如果需要更牛 X 的功能,可以自己写脚本进行配置,功能强大,支持深度自 定义。 root@Neo ~>dpkg -i fish.deb

9 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

http://bbs.elecfans.com/forum.php?mod=attachment&aid=NDA3OTI3fDIyYjFjZTFlMmZlYT EwMDM5ZGIyMzc1NWIyN2IwNTRhfDE0ODM5MzU5NDQ%3D&request=yes&_f=.deb 自己下载体会,一定会爱上它!拿去不谢! pyshell: 深深爱着的一个 python 交互 shell,到底有多强大?它会让你再也离不开 python!真的! 自带语法解释器,自动补全,补全提示,实时执行等 N 多好处,python 从此不再难!

10 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

至于怎么搞?看流程: root@Neo ~>apt-get install python-pip root@Neo ~>pip install bpython 没错,是 bpython,但是 bpython 用起来比较麻烦,而且名字丑(主要是丑!)所以,看下 面:

#!/usr/bin/python # EASY-INSTALL-ENTRY-SCRIPT: 'bpython==0.15','console_scripts','bpython' __requires__ = 'bpython==0.15' import sys from pkg_resources import load_entry_point if __name__ == '__main__': sys.exit(load_entry_point('bpython==0.15', 'console_scripts', 'bpython')()) 保存为/usr/local/bin/pyshell 即可,注意 bpython==0.15 这个版本号,如果你下载的不 是 0.15,请修改为对应版本。 sklearn: sklearn 是一个包含了诸多聚类算法的机器学习包,朴素贝叶斯,决策树,随机森林,神经 11 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

网络等好玩的东西。 不了解?没关系,后面会作介绍!现在先来把包给装了! root@Neo ~>pip install sklearn root@Neo ~>pip install numpy numpy 是一个矩阵操作库,对于大量复杂的矩阵数据操作有速度加成,足比 opencv 快几十 倍,无论是机器学习还是机器视觉以及大数据处理,numpy 都是非常常见的包。 然后,就没然后了。搞定了 root@Neo ~>pyshell >>>import sklearn 看看有没有抛出异常,没有异常就成功了! 首先来把玩一下这个神器是如何具备了超级牛力的! >>>from sklearn import datasets >>>iris=datasets.load_iris() >>>digits=datasets.load_digits() >>>print digits.data [[ 0. 0. 5. ..., 0. 0. 0.][ 0. 0. 0. ..., 10. 0. 0.] [ 0. 0. 0. ..., 16. 9. 0.] ..., [ 0. 0. 1. ..., 6. 0. 0.] [ 0. 0. 2. ..., 12. 0. 0.] [ 0. 0. 10. ..., 12. 1. 0.]] >>>digits.targetarray([0, 1, 2, ..., 8, 9, 8]) >>>digits.images[0] array([[ 0., 0., 5., 13., 9., 1., 0., 0.], [ 0., 0., 13., 15., 10., 15., 5., 0.], [ 0., 3., 15., 2., 0., 11., 8., 0.], [ 0., 4., 12., 0., 0., 8., 8., 0.], [ 0., 5., 8., 0., 0., 9., 8., 0.], [ 0 ., 4., 11., 0., 1., 12., 7., 0.], [ 0., 2., 14., 5., 10., 12., 0., 0.], [ 0., 0., 6., 13., 10., 0., 0., 0.]])

可能有人会问,这是什么鬼?看都看不懂! 这是 sklearn 自带的测试数据集,新手玩的东西。上面这些都是二维数组,是 8X8 图片的像 素灰度数据。 那么要做些什么?我们要训练一个超级简单的模型来对数据进行识别,也就是对图片进行识 别。 当然了,这不仅仅只局限于图片,任何你能想都的,什么房价,股票,天气,流体动力学, 量子力学,宇宙常数...... 好吧,扯远了。 就是我把一堆东西给你看告诉你啥是啥,看完就都收起来,然后问你这个是啥,而你就是那 12 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

个 sklearn。 >>>from sklearn import svm >>>test=svm.SVC(gamma=0.001,C=100.) >>>test.fit(digits.data[:-1],digits.target[:-1]) SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3,gamma=0.001, kernel='rbf', max_iter=-1, probability=False,random_state=None, shrinking=True, tol=0.001, verbose=False) >>>test.predict(digits.data[-1])array[8] 这是什么鬼?!就是说测试的数据集是个 8!OK,先简单的把玩一下,后面超级牛力源源不 断! opencv: 这个应该还是比较多人了解的,总之,集合了 2500 多个算法,具体的图像处理算法我也数 不出来,记不住那么多,非常强大,配合 python,sklearn,以及本帅,更加强大,后哈哈 哈哈哈哈哈哈哈!(千秋万代,一桶浆糊!)

root@Neo ~>apt-get install libopencv-dev 如果提示没有这个包,请更新一下源,或者试试下面这个。 root@Neo ~>apt-get install libcv-dev 这个是由于版本差别引起的包命名方式差别。 root@Neo ~>apt-get install python-opencv 如果不撸 python 的话可以不装,反正用上了 pyshell,我就非常非常痛恨 C 语言了,那么 简洁的 python,那么顺滑的 pyshell,简直就像是一个 36D 的女朋友,各种幸福无限,各 种...... 不好意思,刚上了趟厕所,咱们继续!然后,到这里就安装完毕了,接下来,先 测试一下看看 cv 是不是安装正确。 root@Neo ~>pyshell>>>import cv2

那么,sklearn 的牛刀小试与 opencv 的安装,以及神器的安装都有了,先让大家自行体验 一下,接下来预告后面的内容!首先,neo 要把玩 opencv 存在一个问题,opencv 对图像的

处理都需要用肉眼去观察,然而,neo 没有屏幕啊!?!但是,这能拦的住本帅?更具超级

牛力的东西来了!在终端界面显示摄像头内容!你说你是串口登陆的?没关系,一样的,帮 你省一个 TFT 钱。以及 opencv 的使用,人脸识别,移动物体识别,光流算法,手势识别, 模型匹配,======!在终端的使用!sklearn+结巴中文分词+pinyin 语气分析结合神经网 络训练模型预测语音内容!摄像头方面,我有一个 ps3 eye,但是 neo 的内核源码中,ov534 的源码有点奇葩,所以我直接从 tk1 上移植了一个,其中各种符号表未定义。

13 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 3-机器学习/计算机视觉/NLP 进阶篇】34 行代码搞定微信

机器人

网络作者:Constgg 原文链接:http://bbs.elecfans.com/jishu_1095759_1_1.html

每次都提示没权限发表带 url 链接,真是心累,都快要放弃在论坛发贴了。 发了几个帖子,好像就只有斑竹宠幸过,好像大家都只是看看不说话,看来以后都不能发完 整代码了,省的大家都懒得打字。这是一篇有关 AI 与微信的故事。 我有一个 tk1,一直以来都是用 nat 穿透来进行控制,之前有说到微信,但是公众号本身又 限制较多,不想去搞,于是突发奇想,通过微信来交互。而刚好又找到一个机器人的开放平 台,于是就把他们两个结合在一起,以下是实现效果。

14 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

15 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

用微信来进行智能家居的开发是非常便利的,有设计语义分析的平台有讯飞,讯飞在这一块 做的很好,甚至可以 合成带情绪的语音,拟人化程度更高,可调戏程度更高,但是讯飞 api 接入的条件比较多, 要买个 4999 的板子。 一般来说,大公司不考虑这些,但咱们只是玩玩,就没必要花钱买板子了,所以另选了图灵 (百度搜索图灵机器 人)即可。图灵跟微信的结合效果是什么呢?我想给朋友试试调戏机器人的感觉,所以关闭 了过滤,然后所有人 都懵逼了,大写的懵逼,还问我是不是本人,惨遭机器人调戏。因为我是用自己的微信号进 行调试的,所以一般 都是自己跟文件助手对话。 先来一梭图灵的代码。

# -*- coding: utf-8 -*- import urllib import json

def getcode(url): page = urllib.urlopen(url) code = page.read() return code

if __name__ == '__main__': key = '*your*turing*key*' url = 'h*t*t*p*:*//*ww*w*.*tuling123*.*com/*openapi/api?key=' + key + '&info='(论坛限制发布 url,把*号去掉) while True: text = raw_input('我: ') request = url + text+'&userid=const' response = getcode(request) dic_json = json.loads(response) print '图灵: '.decode('utf-8') + dic_json['text']

/****************************************************************************** ******/ userid 是用户标识,调用机器人的时候带上它,机器人就能认得你。 下面跟微信合体 /****************************************************************************** ******/ 16 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

import json,sys,urllib #import cv2 key='*your*turing*key*' url = 'h*t*t*p*:*//*ww*w*.*tuling123*.*com/*openapi/api?key=' + key + '&info='(论 坛限制发布 url,把*号去掉) #def get_img(): # cap=cv2.VideoCapture(0) # ret, frame = cap.read() # cv2.imwrite('itchatimg.jpg',frame) # cap.release() def getcode(url): page=urllib.urlopen(url) code=page.read() return code def chat(text): request=url+text+'&userid=const' response=getcode(request) djson=json.loads(response) print djson['text'] return djson['text'] weixin.auto_login(enableCmdQR=2,hotReload=True) @weixin.msg_register(weixin.content.TEXT) def process_text(msg): if msg['ToUserName']!='filehelper': return # if msg['Text']=='1920': # get_img() # weixin.send_image("weixinimg.jpg",toUserName='filehel per') print msg['Text'] weixin.send(chat(msg['Text'].encode('utf-8')),toUserName='filehel per') weixin.run()

17 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 4-【机器学习/计算机视觉/NLP 高级篇】用 opencv 做动态

监视器

网络作者:Constgg 原文链接:http://bbs.elecfans.com/jishu_1095203_1_2.html

最近实在是太忙,一直没空折腾 neo,因为我的工作其实与嵌入式八杆子打不着。 本来打算由浅入深,从 opencv 到 ML,再到自然语言处理/音频处理的,但我的 neo 木有显 示啊,这就难办了,mat 无法显示,所以有些代码得先在我的 tk1 上调试,再迁移到 neo 上 验证可行性。话说 tk1 自带 CUDA,性能上,做开发足够了。但 neo 确实比较蛋疼,需要手 动开核,否则跑深度学习,就只有一个核心工作,其他 3 个看热闹。关于这个,倒是有解决 办法,于是我弄了 pp 模块下来,让 tk1 参与到同一个程序模块的并行计算中,实现 2 个板 子运行同一程序。(其实用 PC 不是更好?但咱是玩嵌入式,先把 PC 丢一边,除非咱要训练 超大模型,才有必要借助 PC) pp 模块的代码实在是不好体现,再说跑 opencv 也不需要,所以代码都与 pp 无关,好了, 闲话少说,上图说话。

这是什么呢? 当检测到有运动物体的时候,neo 会实时的在视频流显示框中圈定画上绿色方框。 我的这个设置的比较灵敏,图像处理方面不算很精细,一点光线变化也会导致 opencv 感应。 18 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

有什么用呢?我平时不在家,tk1 都是常开监控的,如果有什么物体移动,就会将图片记录 下来,并利用威信公众号发送到我的微信上。当然,现在我们先看看 opencv 简单的运动检 测能不能在 neo 上运行。 import argparse import datetime import imutils import time import cv2 import cv2.cv as cv import numpy as np #import gpio #gpio.setup(57,"out" ap = argparse.ArgumentParser() ap.add_argument("-v", "--video", help="path to the video file") ap.add_argument("-a", "--min-area", type=int, default=300, help="minimum area size") args = vars(ap.parse_args()) if args.get("video", None) is None: camera = cv2.VideoCapture(0) time.sleep(1) # 读取视频文件 else: camera = cv2.VideoCapture(args["video"]) firstFrame = None #设定视频格式 fourcc = cv.CV_FOURCC('X', 'V', 'I', 'D') framecount = 0 frame = np.zeros((640,480)) #out = cv2.VideoWriter('calm_down_video_'+datetime.datetime.now().strftime("%A_%d_%B_% Y_%I_%M_%S%p")+'.avi',fourcc, 5.0, np.shape(frame) tc = 40 while tc: ret, frame = camera.read() #out.write(frame) #cv2.imshow("vw",frame) cv2.waitKey(10) tc -= 1 totalc = 2000 tc = totalc #out.release() # 循环 19 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

while True: #读取帧 (grabbed, frame) = camera.read() text = "clear!" #gpio.set(57,0) if not grabbed: time.sleep(1) continue # 改变大小 frame = imutils.resize(frame, width=500) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur(gray, (21, 21), 0) # 高斯模糊 if tc%totalc == 0: firstFrame = gray tc = (tc+1) % totalc continue else: tc = (tc+1) % totalc frameDelta = cv2.absdiff(firstFrame, gray)#差值计算 thresh = cv2.threshold(frameDelta, 25, 255, cv2.THRESH_BINARY)[1])#二值化图 像 thresh = cv2.dilate(thresh, None, iterations=2)#膨胀图像 (cnts, _) = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)#查找区域 # 循环画框 for c in cnts: # 如果小于设定参数则放弃抓取 if cv2.contourArea(c) < args["min_area"]: continue (x, y, w, h) = cv2.boundingRect(c) cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) text = "Alien inside!" #gpio.set(57,1) print text # 写字符,由于编码问题,直接英文 cv2.putText(frame, "I`m working....: {}".format(text), (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2) cv2.putText(frame, datetime.datetime.now().strftime("%A %d %B %Y %I:%M:%S%p"), (10, frame.shape[0] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (0, 0, 255), 1) # 显示视频,循环中不要加入耗时操作,否则视频流会卡顿变慢 cv2.imshow("Security Feed", frame) 20 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

cv2.imshow("Thresh", thresh) cv2.imshow("Frame Delta", frameDelta) if text == "Alien inside!": if framecount == 0: # 可以使用参数选择是否录制视频 #out = cv2.VideoWriter(datetime.datetime.now().strftime("%A_%d_%B_%Y_%I_%M_%S%p")+'.av i',fourcc, 10.0, np.shape(gray)[::-1]) #cv2.imwrite(datetime.datetime.now().strftime("%A_%d_%B_%Y_%I_%M_%S%p ")+'.jpg',frame) #out.write(frame) framecount += 1 else: #out.write(frame) framecount += 1 elif framecount > 20 or framecount<2: #out.release() framecount = 0 key = cv2.waitKey(1) & 0xFF # 按 ESC 停止 if key == 27: break cv2.imwrite("catchit.jpg",frame)#保存图像 camera.release()#释放摄像头,每次使用都要释放 cv2.destroyAllWindows() 可以看到,我使用了 gpio 库,我在 tk1 的 57 脚上装了个二极管,当检测到运动时灯亮。但 tk1 可以实时看到图像,所以我注销掉它免得占用 opencv 线程造成卡顿。这个 gpio 库完全 基于 IO,速度是很慢的。 有了这些,我们只需要一台联网的 neo 与摄像头,就可以做一个家庭智能监控器,当检测到 有运动物体可以报警,也可以利用 gpio 做防御性的操作。微信的代码后面再提供,咱一步 一步来。后面有考虑发点手势密码,人脸识别(基于深度学习)的代码,可以实现丢掉钥匙, 一个摄像头就能看守家门,站在门前露个脸,识别 5 官特征,打个手势就能开门。

21 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 5-利用 unixbench 进行性能评估

网络作者:chen000000009 原文链接:http://bbs.elecfans.com/jishu_1095363_1_2.html

这一篇文章介绍一下如何使用经典跑分软件——unixbench 进行性能评估。 首先介绍一下 unixbench 这个软件。unixbenchUnixBench 是一款开源的测试 unix 系统基 本性能的工具,是比较通用的测试 VPS 性能的工具.UnixBench 会执行一系列的测试,包括 2D 和 3D 图形系统的性能衡量,测试的结果不仅仅只是 CPU,内存,或者磁盘为基准,还取决于硬 件,操作系统版本,编译器.测试系统各个方面一系列的性能,然后将每个测试结果和一个基 准值进行比较,得到一个索引值,所有测试项目的索引值结合在一起形成一个测试分数值。 UnixBench 一键执行脚本,脚本会自动下载 unixbench 最新版本,并自动运行.根据机器性能, 测试执行完大约需要 10-30 分钟. 如何使用这个软件呢,首先利用 PC 下载(如果你的路由器支持翻墙可以直接用 nano PI 下 载) , 下载地址为 http://byte-unixbench.googlecode.com/files/unixbench-5.1.2.tar.gz。如 果用 PC 下载的话可以直接先解压,然后将这个解压之后的文件夹复制到 U 盘里面,再将 U 盘插入 nano Pi 的 USB 插槽中(不得不说留个这种全尺寸的插槽挺好的) 之后将 U 盘挂载到系统上面,执行如下语句 mkdir /mnt/sda1 mount /dev/sda1 /mnt/sda1 然后执行如下语句 cd /mnt/sda1 ls 可以看到这个 U 盘已经被挂载到文件系统

之后执行 cd unixbench-5.1.2 打开这个文件夹 然后执行 ./Run 启动测试最后会得到结果 利用这种简单系统进行跑分的好处就在于其运行系统的消耗量不会太大,因此跑分结果相对 来说会比较准 最后得到结果

22 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

23 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

最后跑到 188.7 分,这个结果算是比较正常,网上有人尝试过用 Intel 至强 E5620 的服务器 跑分结果出来是 660 多,说明这个 nano PI 的性能大概是 Intel 至强 E5620 的 28%左右,这 个跑分跟 antutu 那些不一样,它的结果的倍数代表的就是性能的倍数

24 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 6-使用 Samba 在 PC 和 NEO 间共享文件+手机访问的云盘

网络作者:蓝天的云朵 7 原文链接:http://bbs.elecfans.com/jishu_1095223_1_2.html

开发需要,我们需要在 PC 和 NENO 中互相传输文件,文件共享显然是个不错的选择,这里 我们需要用到 samba 来实现这个功能。

一、samba 简介 Samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件,由服务器及客户端程序构 成。 SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通 信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB 协议是 客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统、打印机及其 他资源。 我们可以通过安装和配置 Samba 服务,实现 Linux 与 windows 系统文件共享。

二、安装配置 samba

1.检查防火墙和 selinux 状况 涉及到文件共享的时候,安全问题显然是首先要关注的。防火墙等设置不当,会限制正确的 用户访问到共享目录。但是我们板子上的原装系统很精简,如果你没有安装类似安全软件, 这些都不用 care,可以直接跳到 samba 安装部分。 排除防火墙和 selinux 的对共享的干扰,先禁用。

1) 禁用防火墙 命令:serviceiptables status 查询 iptables 当前状态,我们发现没有安装这项服务, 可以跳过禁用防火墙的步骤

如果是激活的,用命令 service iptables stop 和 chkconfig iptables off 关闭;在 用命令 service iptables status 和 chkconfig --list iptables 查询当前状态。 参考: iptables 详解 http://blog.chinaunix.net/uid-26495963-id-3279216.html

2) 禁用 selinux SELinux (Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,

25 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

是 Linux® 上最杰出的新安全子系统。 首先查询一下 selinux 目前的状态,命令:sestatus

哈,原系统没有安装,这一步骤也可以跳过了。 如果安装了,会显示当前状态信息,禁用的方法有:临时性的,即重启后禁用失效;永远的, 重启禁用存在。自己选吧。

Selinux 设置参考:http://blog.csdn.net/huangbiao86/article/details/6641893

2.安装配置 samba

1)安装命令: apt-get install samba apt-get install smbclient

2)修改 samba 配置文件: Samba 配置文件的路径是/etc/samba/smb.conf a) 备份配置文件 cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

26 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

b) 创建一个即将共享的文件夹,并赋予它操作权限 新建:mkdir /home/test 权限:chmod –R 777 /home/test c) 修改配置文件 vi /etc/samba/smb.conf d) 修改文件中[global]字段下的全局设置 服务器安全等级设为 user:security=user security:设置 Samba 服务器的安全等级。默认情况下,使用 user 等级。 Samba 服务器一共有四种安全等级: (1)share:使用此等级,用户不需要帐号及密码可以登陆 Samba 服务器。 (2)user:使用此等级,由提供服务的 Samba 服务器检查用户帐号及密码。 (3)server:使用此等级,检查帐号及密码的工作可指定另一台 Samba 服务器负责。 (4)domain:使用此等级,需要指定一台 Windows NT/2000/XP 服务器(通常为域控制器), 以验证用户输入的帐号及密码。 e) 增加相应共享目录 [test] #新增共享字段名,最好和共享文件名 相同,便于记忆 Path = /home/test #共享文件夹路径 readonly = no #允许共享用户对文件夹下文件进行写操作,为 yes,只有读权限,无 写权限。 #和 writeable=yes 等效,但是这 里系统不支持 writeable 参数,导致设置无效 , #造成 windows 对该文件夹下文 件没有写权限。 f) 验证配置信息 修改完成后,并不是万事大吉,还需要检查一下设置是否正确,并查看系统当前有效的配置。 命令:testparm/etc/samba/smb.conf 会显示你设置当中的一些错误,需要修改。然后按下回车键,可以查看当前有效的配置选项 列表,如果该列表的选项和你设置初衷一致,那这步就完成了。 g) 创建用户 因为 security 是 user 模式,Windows 访问时,是需要输入用户名和密码的,这就需要我们 创建一个 samba 用户,但是在创建该用户之前我们需要先创建一个 linux 系统用户,否则 samba 用户创建失败。

如果你已经有一个 linux 系统用户,可以直接把它创建为 samba 用户。 创建 linux 系统用户:useradd test 设置密码: passwd test;按提示输入两次密码 27 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

创建 samba 用户:smbpasswd –a test;按提示输入密码

三、Windows 界面访问 NEO 共享文件夹 1.打开我的电脑,地址栏输入 IP 地址和要访问的文件夹,如下图所示

2.在跳出的对话框中输入用户名和密码,即上面创建的。

3.使用共享文件夹,如下一个是 windows 下,一个是 linux 下

28 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

4.调试中如果遇到没有写权限,主要查看两处: 1) smb.conf 中是否设置了 readonly = no 2) chmod –R 777 /home/test

四、手机访问 NEO 共享文件夹 如果 NEO 的存储卡足够大,我们完全可以把它做成一个自己的网盘。 首先我们需要下载安装一个 app,即 ES 文件浏览器。

1.找到“我的网络”图标,点击进去

29 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

2. 在进入的界面里,点击“扫描”按钮,搜索局域网内的共享设备。

3.搜索出来的设备中,我们选择电脑 wifi 图标的,即上图右边的图标,点击进入,输入登 录名和密码

30 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

5.成功的话,就可以看见 NEO 共享的文件夹了,互传文件,手机播放云盘音视频,想咋玩, 就咋玩。Ps:手机文件传入云盘是通过手机的文件管理夹->选中目标文件->发送->“保存到 ES”图标->选择 FRIENDLYARM 图标->找到共享文件夹->点击右下角“选择”。就可以在共享 文件夹找到该文件了。因为手机系统不同,操作可能有所差别,就不上图了,自己慢慢摸索 吧。

本篇到此结束。

31 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 7-网线登录 putty 登录配置方法

网络作者:homway 原文链接:http://bbs.elecfans.com/jishu_1004541_1_1.html

1.给 nanopi 分配静态 ip 在路由器里设置

2.下载 putty,并配置

可以在 Data 选项里设置用户名:root,连接后只需要输入密码即可登录系统

32 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

33 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

34 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 8-修改系统时间和 gcc 编译环境安装

网络作者:homway 原文链接:http://bbs.elecfans.com/jishu_948331_1_1.html

修改系统时间。 linux 系统时钟有两个,一个是硬件时钟,即 BIOS 时间,就是我们进行 CMOS 设置时 看到的时间,另一个是系统时钟,是 linux 系统 Kernel 时间。当 Linux 启动时,系统 Kernel 会去读取硬件时钟的设置,然后系统时钟就会独立于硬件运作。有时我们会发现 系统时钟和硬件时钟不一致,因此需要执行时间同步,下面就分享一下时间设置及时钟 同步的命令使用方法。 a. 时区设置:

开始设置时区时,参考网上的资料,使用 tzselect 命令来进行,结果发现 tzselect 命令只是告诉了设置时区的方法,而并不是真的去修改/etc/sysconfig/clock 这个文件。 换句话说就是 tzselect 命令仅仅告诉我们通过设置 TZ 这个环境变量来选择的时区, 然后将变量添加到.profile 文件中。下面就简单介绍一下如何使用 tzselect 命令设置时区 ,以及如何通过修改/etc/sysconfig/clock 配置文件来设置时区。

b. tzselect: 执行 tzselect 命令-->选择 Asia-->选择 China-->选择 east China - Beijing, Guangdong, Shanghai, etc-->然后输入 1。

c.执行完 tzselect 命令选择时区后,时区并没有更改,只是在命令最后提示你可以执行 TZ='Asia/Shanghai'; export TZ 并将这行命令添加到.profile 中,然后退出并重新登录。 参考下图中 date 命令看到的结果,最终时区显示为 CST,即中国标准时间。 d. 修改配置文件来修改时区 1、修改/etc/sysconfig/clock ZONE=Asia/Shanghai 2、rm /etc/localtime3、链接到上海时区文件 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 执行完上述过程后,重启机器,即可看到时区已经更改。

35 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

GCC 编译环境安装 #root 权限下,输入 sudo apt-get install build-essential

1. sudo apt-get install build-essential 用 gcc --version 查看版本

36 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

37 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 9- USB 摄像头篇

网络作者:jj1989 原文链接:http://bbs.elecfans.com/jishu_1097109_1_1.html

这次介绍一下 USB 摄像头的使用,为后面的图像采集做准备。 在执行接下来的操作之前,先将 USB 摄像头与开发板连接起来。这里使用的是罗技的 C170

摄像头,不需要其他设置,插上就可以使用。

其相关参数如下图:

38 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

图 2

该摄像头支持最大 1024x768 的分辨率,最大帧数 30 帧每秒,这些参数后面设置时要用到。 接下来输入命令:lsusb,查看摄像头是否成功检测到。如下图所示:

图 3

从图中可以看到识别到了一个 Logitech 设备,即为摄像头。 这里使用的是 Debian 系统,原因之前也说过了,方便通过 X window 界面查看摄像头采集数 据,利于后期的调试。在 root 目录下有个 mjpg-streamer 文件夹,进入该目录可看到如下 一些文件。

图 4

执行 make 命令,编译完成之后,执行命令./start.sh,输出如下信息:

39 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

图 5

输出信息中提示:格式不可用,视频分辨率被修改成了 640x480,这里使用的格式为 YUV。 打开 start.sh 文件,修改输出格式为 MJPEG,再次执行命令./start.sh,输出如下信息:

图 6

这下输出分辨率设置为最大了。 此时在 PC 的浏览器中输入 nanopi neo 的IP地址和上图中的端口(如:192.168.1.16:8080), 即可看到摄像头采集的画面。如下图:

40 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

图 7

接下来,通过 USB 摄像头录制一段视频。 执行命令: -t 30 -f v4l2 -channel 0 -video_size1024x768 -i /dev/video0 -pix_fmt nv12 -r 30 -b:v 64k -c:v cedrus264 test.mp4 将录制一段 30 秒的视频,录制过程中,输入 q 可以终止录制。录制完成后会在当前目录生成 一个名为 test.mp4 的视频文件。可以使用系统已经安装好的名为SMPlayer的软件进行播放, 由于只能使用远程桌面,会比较卡,最好还是通过 ftp 将该文件拷贝到 PC 上面播放。

41 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 10-直升机驾驶室安装设备试验

网络作者:cccfeb 原文链接:http://bbs.elecfans.com/jishu_948612_1_1.html

一、我们设备的设计 NanoPi NEO 的 TF 卡烧录的是 Ubuntu-Core with -Embedded,它是一个没有 X-windows 环境,使用 Qt-Embedded 作为图形界面的轻量级 Ubuntu 系统。我们的项目,用摄像头采集 数据和液晶屏显示参数。所以在开发中,需要调到图形化的界面。对比查阅本论坛,发现可 以在本开发板上用 NanoPi M1 开发板的主控,两种开发板都为全志的 H3。决定重新烧写 NanoPi M1 的 Debian 系统固件。

具体资料可参考 nanopi M1 的 wiki 主页。 http://wiki.friendlyarm.com/wiki/index.php/NanoPi_M1/zh 二、实际工程应用我们的直升机是这样的!

直升机的药箱位置!

42 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

国外同类型设备是这样的!

驾驶室中设备位置!

43 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

C 编译器 gcc 和调试工具 gdb

安装 usbutils 用于 lsusb 命令

44 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

输入命令$ lsusb 识别摄像头是我的 GEMBIRD 型号,ID 号是 1908:2311;USB 集中器 Alcor Micro Corp.Hub,ID 号是 058f:9254

45 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

连接摄像头测试 OpenCVOpenCV 的全称是 Open Source Computer Vision Library,是一个 跨平台的计算机视觉库。 因为我已经安装好 xrdp。打开电脑远程桌面连接,启动 Debian 系统,打开终端,进行安装 opencv 库。 apt-get install libcv-dev libopencv-dev 运行 OpenCV 官方 C++示例代码,执行下列命令编译运行: cd /home/fa/Documents/opencv-demo

46 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

make./demo

opencv 图像边沿识别手形

三、准备调试摄像头远程监控。需要用到 mjpg-streamer 程序并安装。下面是安装过程。

sudo apt-get install libjpeg62-dev sudo apt-get install libjpeg8-dev sudo apt-get install subversion

47 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

sudo apt-get install libv4l-dev sudo apt-get install imagemagick

48 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

mjpg-streamer 脚本文件 start.sh 查看,start.sh 是可以修改的,

49 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

将 YUV 改为 MJPEG,将 1280x720 改为 1078x768

50 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 11-无限的音乐(airplay by shairport)

网络作者:oohyeah 原文链接:http://bbs.elecfans.com/jishu_947289_1_3.html

找了很久都没有找到关于 nanopi 的 airplay 教程,索性转变思路,因为树莓派和 nanopi 都是 ARM 架构的,所以就用树莓派的教程试试。没想到还真的可以用,特分享给广大发烧友。

首先,肯定是更新系统啦。

su

apt-get update

apt-get upgrade

第二步,测试声音输出。

因为官方包是已经装了 alsa 声卡系统的,所以只需要一首 wav 格式的歌曲,用 apaly xxxx.wav 命令就能测试。使用 windows 自带的 FTP 服务器(具体百度 windows 搭建 FTP 服

务器),使用 wget 命令从电脑传 wav 音频到 nanopineo 中去。当板子上的 lineout 有声音就

说明声卡 ok 了。

第三步,安装 shairport。

1.安装系统所必需的软件包 apt-get install git libao-dev libssl-dev apt-get install libcrypt-openssl-rsa-perl libio-socket-inet6-perl apt-get install libwww-perl avahi-utils libmodule-build-perl apt-get install pkg-config 2.安装 Perl Net-SDP 协议软件 cd ~

51 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

git clone https://github.com/njh/perl-net-sdp.git perl-net-sdp cd perl-net-sdp perl Build.PL sudo ./Build sudo ./Build test sudo ./Build install cd .. 4.安装 shairport。 cd / git clone https://github.com/hendrikw82/shairport.git cd shairport make 5.启动 shairport。 ./shairport.pl -a wangnanopi

6.后面的 shairport 自动启动就没心情做了,因为我的 nanopi 挂了(T-T) 有参考链接: http://shumeipai.nxez.com/2014/12/10/raspberry-pi-using-airplay-wireless-audio- playback-achieve-even-putting-wifi.html

52 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

53 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 12-摄像头与光电传感器的结合

网络作者:JMU2012 原文链接:http://bbs.elecfans.com/jishu_1101962_1_1.html

上一期,我们已经进行初步的项目实践,完成了对摄像头的一些基础操作,这一期,在前面 几期的基础上,进行了简单的综合。结合光电传感器和摄像头进行项目开发。基础功能是: 光电传感器安装在某个位置,如果前方出现遮挡物,那么启动摄像头进行拍照,存放在本地 文件夹中,下一期就准备用邮件发给管理员了。

1 传感器模块 光电开关传感器介绍

E18-D80NK,光电传感器,漫反射式红外光电开关,避障传感器模块,很容易在淘宝上买到。 电气特性: U:5VDC I:100mA Sn:3-80CM 尺寸: 直径:17MM 传感器长度:45MM 引线长度:45CM 有关传感器常见问题回答: 1、问:这是数字传感器还是模拟传感器 答:这个 NPN 型光电开关。输出分别是 0,1,即数字电路中的高电平与低电平 2、问:检测到目标物体的什么电平输出? 答:检测到目标是低电平输出,正常状态是高电平输出 3、问:能否接到单片机 IO 口上? 答:输出外加一个上拉电阻即可连接到 IO 口上 4、问:上拉电阻阻值为多少?

54 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

答:上拉电阻阻值一般在 1K 左右 5、问:什么地方可以下载说明书?或说明书太简单 答:这是光电开关,就三条线,电源、地、输出,不需要太复杂介绍数字量输出,不 需要进行 AD 转换,可直接接单片机的 IO 口通过后面的可调电位器调整距离(3-80CM 有效)

2 硬件连线 上电之前,先把传感器和摄像头分别连接好,特别是传感器,不支持热插拔。参见库函数使 用指南。

上一期已经测试过摄像头了,直接连上。 传感器模块,电源(引脚 2)、地(引脚 6)、信号线(引脚 7)分别连接到 Pi 的 GPIO 上。 连接好的效果图是这样的。

55 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

3 上电测试传感器 这个项目要借助 Matrix 库进行开发。因为光电开关和按键模块的原理非常相似,都是动作 发生后相应的 GPIO 引脚被拉低。 $ cd /home/fa/code/C_demo/matrix/demo/matrix-gpio_int $ ls $ sudo ./matrix-gpio_int 当传感器前方有东西挡住时,出现以下 log:

到了这里,说明传感器是 OK 的,程序也没有问题。

4、编写自己的程序 56 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

(1)新建一个 shell 脚本 vim camera_email.sh

#!/bin/sh /home/fa/mjpg-streamer/mjpg-streamer/mjpg_streamer -i "input_uvc.so -d /dev/video0 -r 320x240 -y" -o "output_file.so -d 1000 -f /home/fa/photo"

(2)主程序 拷贝一份 matrix-gpio_int/ 到上层目录,重命名为 matrix-camera-gpio/ 然后编辑源文件 PS:源文件在附件里。

(3)编译、链接,生成可执行文件 # make (4)然后执行,测试,当有障碍物挡住时,摄像头就会拍照保存,拍照 5 秒后,自动退出。 下图就是拍照保存后的一些照片。修改延时时间可以拍摄更多照片。

5 小结 当然,光电传感器只是一个典型的数字器件,大家也可以把它换成人体感应传感器,那么就 可以当做监控系统的传感器了。当有人进入时,启动摄像头进行拍照。可以发挥想象力,做 出很多好玩的东西来。下一期,据说就要结题了,按照目前的进度,应该没问题,尽请期待。

57 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

58 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 13- nano-NEO 与 zigbee 的简单串口通信

网络作者:weiyaoxing 原文链接:http://bbs.elecfans.com/jishu_1102082_1_1.html

ZigBee 是基于 IEEE802.15.4 标准的低功耗局域网协议。根据国际标准规定,ZigBee 技术是 一种短距离、低功耗的无线通信技术。本次实验将实现 arm 与 zigbee 模块的简单串口通信。 一、 Zigbee 模块的简单介绍,zigbee 模块用的是 TI 的 cc2530,其低功耗、成本低 等的特点经常使用在智能家居以及室内定位等方面。

通过在 zigbee 端不断的从串口发送数据,在 nano 的串口上接收。Zigbee 端的代码看附件.

二、ARM 端串口的编程 可以参考我之前写的帖子:http://bbs.elecfans.com/jishu_1098159_1_1.html Nano-NEO 引脚图

59 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

这里使用的是串口 1, 串口接线: UART1_TX ——————zigbee 的 RX UART1_RX ——————zigbee 的 TX GND------zigbee 的 GND(这里要注意共地,否则可能会出现乱码) 串口程序:

60 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

61 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

62 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

63 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

编译 gcc uart1.c –o uart1.o 执行串口程序:./uart1.o

64 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

最后附一张 zigbee 与 nano—NEO 的合照。

65 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

66 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 14- TCP 通信之客户端程序

网络作者:蓝天的云朵 7 原文链接:http://bbs.elecfans.com/jishu_1104795_1_1.html

写了一个 TCP 通信的客户端程序,匆忙之间写的,不够完善,可以围观,给出精辟的见解。 百度百科 TCP/IP 介绍:http://baike.baidu.com/link?url= ... mbJWs9hwDnV_g-ZbDUq TCP 是面向连接的一种通信,比较稳定,但是一般情况下不 适合传输实时视频这种数据量比较大的。通信双方是基于 C/S 架构,这里使用电脑端的 TCP 助手作为服务器,NEO 写了客户端的程序。双方大致通信流程为:

首先我们需要知道电脑的 IP 地址,打开电脑的终端,输入 ipconfig,就能知道本机 IP 地址。

67 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

然后再打开 TCP 助手,选择 TCP 服务器模式,设置好后,运行 NEO 端 TCP 客户端程序, 具体如图所示:

68 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 15-基于 H264 RTP 的图传系统

网络作者:蓝天的云朵 7 原文链接:http://bbs.elecfans.com/jishu_1105897_1_1.html

背景:在网络上传输音/视频等多媒体信息,主要有下载和流式传输两种方案。流式传输的 特点是可以在下载的同时进行观看。由于摄像头采集的视频数据信息非常大,如果直接将原 始数据在网络上进行传输,无疑非常不现实,所以通常需要先对视频信息进行编码压缩后, 再进行传输,接收端接收到压缩信息后,先解压再播放。 目前最为通用的视频编码方法就是 H264。百度百科解释:H.264,同时也是 MPEG-4 第十部分,是由 ITU-T 视频编码专家组(VCEG)和 ISO/IEC 动态图像专家组(MPEG) 联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。 视频在网上流式传输的通信协议通常是 RTP 协议,还有其他相关服务协议如 RTSP 等,一般情况下,RTP 协议是基于 UDP 的。

方案: NanoPi NEO 外接 USB 摄像头进行视频采集,将采集到的视频数据压缩编码为 h264 格式后, 使用 RTP 协议进行网络传输,PC 机使用开源播放器 VLC 接收该视频流进行播放。该方案的 软件实现是基于强大的 ffmpeg 和 X264 软件包。

环境配置: 1) 移植安装 X264:ffmpeg 原生不支持 h264,所以我们需要安装一个 h264 的三方软件 x264。 Step1: 下载 x264 安装包:git clone git://git.videolan.org/x264.git Step2: 进入 x264 目录,执行配置命令:./configure --enable-shared --enable-static --prefix=/usr/local/x264 Step3: make Step4: make install Step5: 将/usr/local/x264/lib 下的库文件拷贝到/usr/bin 文件下

2)移植安装 ffmpeg: Step1:下载安装包:从官网 http://ffmpeg.org/下载最新源码包后,拷贝到开发板上,并 解压缩。 Step2:进入源码目录下,执行配置命令:./configure --prefix=/usr/local/ffmpeg Step3:make Step4:make install

3)PC 安装 VLC 播放器

视频传输: 1)VLC 配置文件:

69 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

PC 上新建一个配置文件:h264_rtp.sdp,其内容如下: m=video 5060 RTP/AVP 96 a=rtpmap:96 H264 c=IN IP4 192.168.x.xxx 注解:5060 是端口号,要和 ffmpeg 命令中端口号对应;x 表示的是开发板的 IP 地址。 然后使用 VLC 打开该文件。

2)开发板执行传输命令:cd /usr/local/ffmpeg/bin/ 然后执行./ffmpeg –f video4linux2 –s 640*480 –i /dev/video0 –vcodec h264 –f rtp rtp://192.168.x.xxx:5060 注解:使用了软件包的可执行文件 ffmpeg,video2linux2 表示该 USB 视频设备使用 V4L2 接口进行访问;640*480 是摄像头支持的视频输出分辨率;/dev/video0 表示的是 USB 摄像 头的设备文件;h264 是对视频进行编码的压缩格式;rtp 是视频网络传输的协议;x 表示接 收端即 PC 的 IP 地址;5060 是端口号,和上文对应。 ffmpeg 选项详解参考: http://blog.csdn.net/matthew0618band/article/details/9830681

3) VLC 上就可以看到 usb 摄像头传来的视频了。

成果:完成了使用 USB 摄像头进行视频采集 H264 编码后网络传输,但是传输实时性不太好, 时延明显,可以进一步提高性能。

70 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 16-基于 web 摄像头的远程监控系统

网络作者:蓝天的云朵 7 原文链接:http://bbs.elecfans.com/jishu_1102667_1_1.html

0、 前言 经过近两个月的 Nano Pi NEO 开发板试用活动,对该开发板有了更多认识。同时也逐步 的实现了当初设立的项目实践目标。这一期是项目结题篇。首先来回顾一下当初的项目。

1、项目简介 项目名称:基于 web 摄像头的远程监控系统 项目简介:使用摄像头进行监控一直是安防系统中的重要环节。为了保证实验室重要设 备的财产安全,拟开发一套远程监控系统。如果在无人值守的特定时间段(如晚上或节 假日),有人闯入,自动开启摄像头进行拍照,并给管理员发送邮件提醒,管理员可以 登陆系统进行查看视频,这样能够提供更多证据。Nano Pi 开发板作为主控,红外人体 传感器和 USB 摄像头作为输入,发送邮件作为输出,组成一套完整的监控系统。

2、硬件设计 硬件方案大概是这样子的:

3、软件设计 主要有以下几个部分:

71 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

分层思想: 最底层:Linux 操作系统 中间层: mjpg-strmer 拍照 ssmtp+mutt 发送邮件 Matrix GPIO 光电传感器 最上层:用户自定义,调用中间层 API。

软件流程:

72 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

当光电传感器电平拉低时,调用拍照脚本程序,保存一定数量后,停止拍照脚本执行, 然后打包,执行完毕后,调用发送邮件脚本。经过一段延时后,又回到主流程。

4、项目实践 a.根据硬件设计方案,将 USB 摄像头、光电传感器连接到开发板上,再连接网线,最后 上电。 b.编写程序,程序共 3 部分:C 程序、拍照脚本和发送邮件脚本,附件里有这 3 个程序。 c.执行程序。 d.查看指定邮箱里是否有带附件邮件。

5、总结 73 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

项目最后完成了预定目标,能够清晰的对指定区域进行拍照。然后也能够及时将照片通 过邮件发送到指定用户。这是个非常实用的小项目。稍加改进(比如说增加一些其他传 感器),可以完成更多任务。当然,由于时间和精力有限,此项目还有很大改进空间。 比如说,可以增加定时执行功能(利用 Linux 的 crontab 程序),增加视频实时查看功 能(利用花生壳软件)。更多升级空间,大家都可以尝试一下。 两个月的项目实践,收获颇丰。拿到手的第一块开发板因为故障,无法完成试用,于是 赶紧发回去换了第二块开发板。然后开始慢慢研究。基本上把树莓派上的实践都往这边 进行了相应的实践。因为篇幅有限,所以也没有把所有的试用报告都往这边放,后面我 还会再发一些文章。 最后,感谢发烧友论坛和友善之臂的大力支持和赞助,让我们有机会试用这款开发板。 在试用过程中,确实遇到了不少问题,友善之臂的技术支持给予了不少的帮助。同时, 也感谢大家这么多期的关注。水平有限,还望大家能够多提宝贵意见和建议。希望将来 有时间可以做更多的试用报告。谢谢。

matrix-camera-email.zip 下载链接: http://bbs.elecfans.com/forum.php?mod=attachment&aid=NDI3NDk0fDgzMTUwYTMwfDE0OD QwMjc3ODl8MjIyMjgwN3wxMTAyNjY3

74 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 17- GPS 模块测试

网络作者:炫 Q 原文链接: http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=67030&extra=page%3D1

说是 GPS 模块,其实是通过洞洞板在 GPS 和天线一体模块上引了几根线,由于风扇电源挡住 了 1 号串口,用的 2 号串口

在室内是什么都没有的

75 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

移到窗外只可以勉强获取时间

和网上的北京时间对比,还是很准的,差 8 个小时

76 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

要锁定足够的卫星,比较困难

大约一个小时后,锁定了 2 颗卫星,实现了平面定位

又过了好久,终于锁定了 3 颗卫星,偶尔还会失去联系

采用的是一个比较简易的模块,除了电源其实只用到了 TX

77 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

结论,要快速定位还是需要有源天线的,这个虽然比较小巧,也就做个电子钟用.

78 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 18- NanoPi NEO 构建 MIDI 多媒体平台

网络作者:flyer 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66722

Hi, 大家好,小任不才,低估了 nanopi 的性能,收到板子后磨机了很久,没有动力.但是鉴于 上一篇文没有出现在@静水竹林的名单上,奈何大大把我忘记了,遂决定出来冒个泡.

图一中 H3 的 datesheet 已经表明我们的 nanopi 音频 ADC 指标还是不错的,so 我们用来玩玩 音频吧

首先出一个干货 http://pan.baidu.com/s/1pLaqjYr 这个是我自己构建的一个用 nanopi 构建的一个多媒体平台,目前已经实现了常规音频文件 的播放功能,MIDI 输入功能,MIDI 播放功能以及电鼓功能... 调测已经完成,如果有瑕疵的地方还望大家海涵指正,谢谢!

说一下这个版本优点吧 0.更改了软件源为中科大和麻省理工的镜像源,实测 apt-get install 国内速度 500K 没问题,很快 1.烧写卡容量减小到 2G,也就是 2G 的 SD 卡也可以烧录,当然烧录完了记得用命令扩展你的 根目录大小

2.增添了中文支持,对中文文件名和文本的编辑都提供了支持,再也不担心乱码了,如图 1 3.重新裁切编译了内核,增加了 oss 音频支持,如我上一篇文中所述 3.增加了自动网络时间更新,时区为北京时间,图二 4.重新根据源码编译并安装了 播放器,可以直接播放中文名的歌曲.图三 5.根据源码编译了 ttymidi 工具,并安装了 libasound2-dev 这两个库都是玩转 usb-midi 必须的 6.安装了 git 和 fluidsynth 采样器,并且添加了两个 SF 采样音源,分别为 ChoriumRevA.SF2 和 FluidR3_GM.sf2,可以根据自己的需要选择 7.系统开机自动加载第一个 usb 串口输入设备作为 midi 设备,不用额外操作,波特率为 115200

说了这么多,这些有什么用呢? 简单点说就是用 nanopi 做采样器,用 ardunio 做 midi 传感器 来做 midi 键盘或者 midi 鼓.

79 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

ardunio 的代码可以自己写,用压电陶瓷做传感器就 ok 了,价格也是非常的便宜.我看到有人 在问中文怎么做得,其实很简单的

然后,修改下列项目为这样,重启即可

引用文献:

由于论坛因为非法字符屏蔽了有些代码(懵逼),我就发图片了哈,图片在最后一张,因为是媒 体应用类的设计,不太好发演示,如果有需要的朋友私信或者跟帖我会回复的.

关注度够高的话,我会录一段本届招新会上的 demo 视频传上来

80 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

81 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

82 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

83 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 19-获取 Neo 当前温度等状态

网络作者:未知的自我 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66395

为了更好地查看 neo 的运行状况,偶尔需要查看 CPU 温度、内存占用等信息。

1.首先建立脚本:

2.加入如下代码: import os

# Return CPU temperature as a character string def getCPUtemperature(): f = file("/sys/class/thermal/thermal_zone0/temp") temp = float(f.read().strip("\n")) return "%3.1f " % temp

#Return RAM information (unit=kb) in a list # Index 0: total RAM

# Index 1: used RAM

# Index 2: free RAM

def getRAMinfo(): p = os.popen('free') i = 0 while 1: i = i + 1 line = p.readline() if i==2:

84 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

return(line.split()[1:4])

# Return % of CPU used by user as a character string def getCPUuse(): return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))

# Return information about disk space as a list (unit included)

# Index 0: total disk space

# Index 1: used disk space

# Index 2: remaining disk space

# Index 3: percentage of disk used def getDiskSpace(): p = os.popen("df -h /") i = 0 while 1: i = i +1 line = p.readline() if i==2: return(line.split()[1:5]) # CPU informatiom CPU_temp = getCPUtemperature() CPU_usage = getCPUuse

# RAM information # Output is in kb, here I convert it in Mb for readability RAM_stats = getRAMinfo() RAM_total = round(int(RAM_stats[0]) / 1000,1) RAM_used = round(int(RAM_stats[1]) / 1000,1) RAM_free = round(int(RAM_stats[2]) / 1000,1)

85 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

# Disk information DISK_stats = getDiskSpace() DISK_total = DISK_stats[0] DISK_used = DISK_stats[1] DISK_perc = DISK_stats[3] if __name__ == '__main__': print('') print('CPU Temperature = '+CPU_temp) print('CPU Use = '+CPU_usage) print('') print('RAM Total = '+str(RAM_total)+' MB') print('RAM Used = '+str(RAM_used)+' MB') print('RAM Free = '+str(RAM_free)+' MB') print('') print('DISK Total Space = '+str(DISK_total)+'B') print('DISK Used Space = '+str(DISK_used)+'B') print('DISK Used Percentage = '+str(DISK_perc))

3.然后执行:

86 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

给予权限

预期输出结果如下:

87 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 20- NEO 的新系统-DietPi

网络作者:LiuYang 原文链接: http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=65305&extra=page%3D4

NanoPI-NEO 有官方发布的系统,就是那个没有桌面的 UbuntuCore。按理说这个 UbuntuCore 已经很精简了,但是当它碰到 NEO 这样的开发板还是稍显臃肿。其实还有一个更适合 NEO 的东西 DietPi,功能不少速度快。DietPi 是国外一个基于 Raspbian 的精简版本系统,同时 做了一些优化,其特点就是小和快,解压后的镜像文件 450M 左右。DietPi 支持许多种开发 板,比如 RPI、BPI 什么的,还有一堆的 x86 虚拟机,而 NEO 也是其中之一,所以一定要试 一下。

首先下载镜像文件解压,由于文件比较小,所以我特意挑了一个小容量的 C4 的卡来

88 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

体验速度。

烧写的过程和其他开发板 SD 的方式一样,同时可以看到这张卡实际的写速度为 7MB/s。

烧写完毕,将卡插入 NEO,上电开机,别忘了插入网线。

到路由中找到动态分配的地址,然后用各种 SSH 或串口工具连接。

89 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

首先弹出一些说明,说是一些可以配置什么的东西,自己看看吧。

90 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

然后开始初始化环境了。

91 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

接下来提示是否安装 USB 驱动,这里我跳过了,直接下一步的配置

92 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

这里有众多的配置,比如可以安装 LXDE 桌面、Kodi 媒体中心、BT 下载工具、游戏模 拟器等等等等,很多,按照自己的需要来安装。 当然对于 NEO 来说,因为没有视频输 出,许多工具是用不到的,可以不用管它。

93 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

94 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

除此之外,DietPi 也提供了设置性能的工具,可以对 CPU 的频率范围进行指定。DietPi 支持 NEO,也就是 H3 的设置。

95 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

虽然没有桌面,但是 DietPi 也有网络方面的配置工具,方便设置 IP 地址,而不用再 去修改文件了。 不过需要注意一下,如果使用的是 SSH 连接的,在设置 IP 后,网络会断开,需要重 新连接。用调试串口就没有这个问题了。

96 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

全部设置完成,看看系统信息吧,无论是 SD 还是内存的占用,都是非常小的,最大 限度的留给用户使用。

97 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

温度也低了不少,从开机到进入系统后的温度是 33 度,等待一会儿之后就降为 29 度了,这下再也不用担心发热的问题了。

98 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 21- NanoPI-NEO LINUX 内核裁切

网络作者:flyer 原文链接: http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66466&extra=page%3D5

因为学校招新需要,打算做一个电鼓去骗骗师弟师妹,就打算用 ardunio R3 做 MIDI 输入,然 后 NanoPi 做音源,不巧 linux 内核不支持 midi 的某些功能,于是就只有自己动手裁切了.

首先按照官方教程去 github 下载源码

然后 git 已经帮我们解压啦,进入目录如图

我是在 Cenos7 x64 服务器上交叉编译的,缺了 mkimage 工具,安装:

然后你就可以尝试编译内核了,还是官方的命令

等个 20 分钟基本上就编译完了,报了一个 successful,如果不是,根据提示安装需要的工具 然后就是裁切了,这是不同于一般手机内核的地方,你要往内层目录走 注意一定要 cd 到./lichee/linux-3.4/目录下面 然后就是那个经典的命令

然后如图,根据自己的需要裁切最后保存就 ok,

然后跳转到./lichee 目录执行清除命令,然后再次编译即可

99 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

编译完成后 uImage 和内核模块均位于 linux-3.4/output 目录下,将 uImage 拷贝到 TF 卡的 boot 分区的根目录即可

100 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

101 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

102 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 22-内网穿透简单方案-搭建 frp 服务

网络作者:未知的自我 原文链接: http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66429&extra=page%3D52.png

ngork 由于 1.x 版本有缺陷,现在基本都是用 2 了,不过搭梯子可能有些不便,或者不稳定, 有开源爱好者做了一个新项目 frp,最近感觉不错,也拿出来说说。 frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支 持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。 我一直使用的小米 mini 路由,刷的 padavan,里面也用的 frp。frp 的作者受不了 ngork 的 种种 bug,愤而做出了这个小清新,着实不错! frp 的 github 地址:https://github.com/fatedier/frp 摘录一段官方介绍: •利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。 •对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个 80 端口。 •利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。 •可查看通过代理的所有 http 请求和响应的详细信息。(待开发)

优点也很明显:

• 作者已经编译了各平台的二进制包,无需自己编译 • 配置简单,只有一个主配置文件,并且服务端配好后其实可以不用再上去配了 • 不占用服务端 80 端口,服务器还是可以起 nginx 对外服务的 • 支持转发 tcp http,支持 ssh

安装过程非常简洁明了,总而言之和同类内网穿透的工具一样,分为 server 与 client 两个 端。 将 frps 及 frps.ini 放到有公网 IP 的机器上。 将 frpc 及 frpc.ini 放到处于内网环境的机器上。

我的目的是在单位也能远程 ssh 登陆 neo,需要通过申请的花生壳域名访问 neo。由于我的 PC 已经具有公网 IP 和安装了花生壳,只需通过 wifi 连接 neo 即可实现 ssh 访问。 103 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

主要步骤:

1. 配置 frps.ini

2. 启动 frps

3. 修改 frpc.ini 文件,设置 frps 所在服务器的 IP 为 x.x.x.x;

4. 启动 frpc:

5. 通过 ssh 访问内网机器,假设用户名为 neo:

104 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

这样即可完成简单的 ssh 访问,下一步准备琢磨一下在路由器 pandora 固件中的配置。

105 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 23-内网穿透第一步-搭建 shadowsocks 服务器

网络作者:未知的自我 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66423 下载附件

准备尝试各种反向代理方案,以远程控制 neo,实现内网穿透,先试试 ngork 方案,不过服 务不太稳定,还是科学上网速度快。 正好有免费的 ss 账号,先搭个梯子试试效果: 1. 更换国内源 不过 ubuntu-core for neo 不支持 https,所以需要先安装包:

1. 安装 pip 由于官方包中找不到,我不理解为什么会没有…… 只能下载手动安装了…… https://pypi.python.org/pypi/pip 下载包 解压通过 winscp 上传到 root

106 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

安装 pip 时提示 setup.py 中使用 setuptools 中的模块,但是电脑中并没有安装 setuptools 软件包,所以我们需要先下载并安装 setuptools!

2.1 安装 setuptools 软件包 访问 https://pypi.python.org/pypi/setuptools 查看安装步骤,图省事,脚本安装:

一步完成。当然不嫌麻烦自己下包编译安装,最新版 27.2.0。 装完这个后就更方便了,什么 python 包都可以用 easy_install 命令了! setuptools 介绍: 正常情况下,我们要给 Python 安装第三方的扩展包,我们必须下载压缩包,解压缩到一个 目录,然后命令行或者终端打开这个目录,然后执行 python setup.py install 来进行安装。 这样是不是很繁琐呢?如果我们直接命令行执行 easy_install Twisted 就把最新版的 Twisted 包装上去了,是不是很爽呢? 所以 easy_install 就是为了我们安装第三方扩展包更容易

107 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

当在安装包的时候,不管是手动安装 还是 easy_install,如果提示错误:找不到 python.h 文件,那说明我们安装的 python 不是开发版,在 ubuntu 下面的解决办法如下: sudo apt-get install python-2.7-dev 安装对应 python 版本的 dev 就可以了。

接下来重新安装 pip

2.2 安装其他所需 python 包:

2. 安装 Shadowsocks

108 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

自动安装新版 2.8.2。

4. 配置 Shadowsocks

内容如下:

5.启动服务

6.设定为自动启动的方法:

109 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 24-内网穿透第二步-搭建 ngork 服务

网络作者:未知的自我 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66427

平时有远程需求,希望可以穿透内网控制 NEO,比较火的一种开源方案便是 NGORK。 ngrok 是一种仅仅针对 http 单一用途的代理服务。ngrok 的原理很可能并不是真正的内网穿 透,而是真的老老实实的充当反向代理,承担所有实际发生的流量。类似的还有 localtunnel.me 和 pagekite 等,国内花生壳之类的也不错。 这类服务一般都 分为服务端与客户端,平时家庭一般都是用路由器,NEO 也连在路由器上,为了试验,把小 米 mini 从几乎什么命令都不支持的 padavan 刷成了 pandora。 本想着大功告成,结果发现执行不成功。不得已,只能使用双系统的笔记本采用 ubuntu 坐 server,通过无线分享脚本实现 connectify 的功能,NEO 用磊科 nw336 网卡连接作为 Client。 由于我用的 20m 的铁通光纤,虽然平时非常不稳定,但铁通只有一点好,就是有公网 IP, 并且上传竟然有 5M 左右,虽然不对等,不过也知足了。只有具备公网 IP,给类内网穿透、 反向代理才有意义。 ngork 的 github:https://github.com/inconshreveable/ngrok 下面是所尝试的安装步骤:

1.下载编译

生成自签名 SSL 证书

110 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

将 ngrokroot.crt 替换为生成的 pem 文件:

编译 Ngrok 服务端与客户端:

然后将编译好的文件放到各自的文件夹下。

2. 解析二级域名 需要多个二级域名的话,可以将申请域名通过服务器端解析为多个二级域名 服务端:

设置为开机自动启动:

加入以下内容:

111 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

客户端:

112 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

启动:

当客户端使用 http/https 协议连接,服务端会分配该二级域名给客户端作为入口; 当客户 端使用 tcp 协议连接,则服务端不会分配二级域名,改为监控一个随机端口,, remote_port 可由客户端对该端口进行指定。 客户端和服务端建立连接后,访问 二级域名:8080 可以穿透内网访问 web 服务,执行 ssh -p34356 pi@二级域名,就 可以穿透内网登陆 ssh 服务。

开机启动 ngork:

113 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

加入

然后

这样就可以通过访问二级域名进行 ssh 连接了。

114 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 25-搭建离线个人 Git 服务器

网络作者:未知的自我 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66392

众所周知,我们常用的 GitHub 就是一个免费托管开源代码的远程仓库。如果既不想公开源 代码,又觉得科学上网不方便,可以搭建一台个人离线 Git 服务器私有仓库使用。 远程仓库实际上和本地仓库没什么不同,萝卜白菜各有所爱,见仁见智。 安装过程如下:

1. 安装 git

2.添加 Git 用户和组

此处我用 home/fa 作为路径,可更改为自己喜欢的文件夹。 然后更改密码:

然后通过命令切换用户,即可看到用户切换为 git @ Neo

3.新建空仓库 进入个人文件夹

115 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

在仓库中创建一个文件夹,进入后初始化清空仓库,我是用 root 用户,这个用户具有 /home/git 目录的控制权。

4.发送代码到 Neo 上

进入刚才新建的空仓库

这里的 IP 替换为自己的,然后要做的就是上传自己的代码了!

执行后会提示如”authenticity of host …”输入”yes”继续,新建的 Git 仓库完成搭 建了。 下面可以 clone 仓库到 PC,首先定位到想存储的路径,然后通过 git clone 命令:

至此,大功告成,和 github 的使用感觉就很像了!

116 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

117 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 26-实现外网控制

网络作者:f50528603 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=65980

内网登入 NanoPi NEO 其实 WIKI 教程里 已经很容易实现经过一个星期的尝试,在下 也是初次实现外网登入 nano pi NEO 甚是高兴 先说说我这边硬件连接情况

NanoPi NEO 连接情况

左边是网线连接,右边是电源接口 参考:http://bbs.elecfans.com/jishu_734166_1_1.html

我的水星路由器 MW300R 长城宽带 动态 IP 映射太麻烦 我还是什么端口映射出去 就是什么端口的比较简单一些 5901 外网也是 5901

118 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

22 口映射出去还是 22 口

先讲一下大致的 软件 框架

首先是路由器 端口 映射

之后是到 http://www.nat123.com/ 这个网站申请 ID

下载 软件 nat123 ,目的是为了设置内网映射配置,好像也可以网页设置

给 NanoPi NEO 安装 LIUNX 版本的 nat123 教程:http://www.nat123.com/pages_17_600.jsp 留意安装命令对应系统 这个教程 要记住安装目录 cd /mnt 与其他教程不一致 之后是客户端 启动 (每次重启都要重新启动) 最好还是按照教程开机自己启动,教程在这里:http://www.nat123.com/pages_17_619.jsp 我用方法二 开机自动登录启动(ubuntu 参考二): (1)执行“chmod +x /etc/rc.local”命令确保有权限; (2)把启动程序的命令添加到/etc/rc.local 文件中,此文件内容如下, #!/bin/sh -e # rc.local # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # In order to enable or disable this script just change the execution # bits. # By default this script does nothing. cd /soft/nat123 screen -S nat123 mono nat123linux.sh autologin username password exit 0 119 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

在如上代码中,实际路径和自己的帐号密码换为自己的即可。

要注意 cd /soft/nat123 这个要换成刚才你的安装路径 /mnt 然后试试 NanoPi NEO 能不能开机启动 nat123

看看能不能连接方法如下: 我的电脑 Windows 10 要安装访问者 “nat123P2P 访问者" 运行联网 登入自己注册的账号密码

120 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

看见蝴蝶图标右下角的笑脸 再看看是不是连接成功

一些准备就绪运行 putt.exe

121 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

要注意的是登入 putt.exe 的设备必须同时运行”nat123P2P 访问者“ 否则无法登入 看看我已经了解成功,离远程点亮一个 LED 灯又进了一步

局域网能够用网址登入 之后 我已经换其他网络 进行测试成功从公司连接到家里的 NanoPi NEO

如果第一次不成功 再试两遍

经验补充: 1.经过之后的实验 路由器有没有映射 不影响 putty.exe 登入 (没有影 响)

2.nat123P2P 访问者 必须在本机开启 才能远程 putty.exe 登入(直接影响) 3.如果要外网 vnc 访问要在 ”nat123P2P 访问者“ 里添加 5901 端口如下图(也就是说 要用什么就要添加什么端口否则不能使用):

122 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

通过小米 2S 手机 访问成功截图

123 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

必须先了解好手机版本的”nat123P2P 访问者“ 才可以 vnc 连接

124 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

125 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

上图是想说明 用网址连接时,冒号一个和两个是一样可以登入的 你们也可以试试

126 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

以上两图输入连接密码登入成功 NanoPi NEO 桌面 没有东西的桌面 (按照论坛教程安 装的桌面,没什么用,只是试试学学)

经验补充:(强调一下) 1.经过之后的实验 使用“nat123”之后 ,路由器有没有映射 不影响 putty.exe 登入 (没有影 响)

127 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

2.nat123P2P 访问者 必须在本机开启 才能远程 putty.exe 登入(直接影响)

3.如果要外网 vnc 访问要在 ”nat123P2P 访问者“ 里添加 5901 端口,端口之前一个或 者两个“:” 冒号 没有影响其他没有试过

128 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 27-实现开机自启动 nat123

网络作者:f50528603 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=66194

前面几个帖子基本能够实现远程控制,远程控制 LED 灯的亮灭(外网哦) 但是还不能实现断电自己启动 nat123,这样就出现了一个问题,如果断电后 nanopi NEO 自 己启动后,nat123 这个软件不能自启,这意味着远程无法登入 nanopi NEO

本文就要讲讲如何实现 nat123 跟随系统自启问题 这样就保证了断电自启的目的 尽管 nat123 网站上有教程 但是好像不完全适用于 nanopi NEO http://www.nat123.com/pages_17_619.jsp 参考以上文章

(1)本地必须先手动输入帐号密码成功登录一次“nat123”;

(2)执行“chmod +x /etc/rc.local”命令确保有权限;

(3)把启动程序的命令添加到/etc/rc.local 文件中,此文件内容如下, 命令如下 vi /etc/rc.local

修改为(此处第一条与 nat123 网站不同,这里第一条不是注释哦按照 nat123 网站上的将无 法开机自启):

#!/bin/bash # rc.local # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. cd /mnt screen -S nat123 mono nat123linux.sh service

129 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

exit 0

之后按 Esc :wq 保存并退出

然后试试能不能实现开机自启? nanopi 启动后还要等一会(一两分钟)软件 nat123 才会启动

自此 led 灯远程开关,整个过程结束 更重要的是学习利用各种远程登入方式,特别是应该掌握 自建服务器远程连接 nanopi NEO 的方式

130 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 28-搭建 web 服务器

网络作者:视觉℡ 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=65972

1、安装 nginx web 服务器 (约 6MB) apt-get install nginx

2、启动 nginx /etc/init.d/nginx start nginx 的 www 根目录默认在 /usr/share/nginx/www 中

3、修改 nginx 的配置文件 vi /etc/nginx/sites-available/default

1)以下几个选项注意一下: listen 8080; ## listen for ipv4; this line is default and implied //监听的端口号,如果与其它软件冲突,可以在这里更改 root /usr/share/nginx/www; //nginx 默认路径 html 所在路径 index index.html index.htm index.php; //nginx 默认寻找的网页类型,我们可以增加一个 index.php

2)PHP 脚本支持(不设这几项 PHP 脚本无法识别) 找到 php 的定义段,将这些行的注释去掉 ,修改后内容如下 location ~ .php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }

php 段中有一些其它定义,不要去动它,比如: # fastcgi_split_path_info ... # fastcgi_pass 127.0.0.1:9000

131 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

4)安装 php 和 sqlite(约 3MB) apt-get install php5-fpm php5-sqlite

5)重新加载 nginx 的配置 /etc/init.d/nginx reload

6)测试 html 通过主机的 IE 访问树莓派,可以看到主页(表示 Web 服务器已正常启动)

7)测试 php 在树莓派中生成一 php 文件 vi /usr/share/nginx/www/index.php

Test successful

Test successful

Congratulations.

Your webserver and PHP are working.

EOT;

?>

大家可以访问我的 130061.iask.in 可以看看 是用花生棒搭建的

132 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 29-驱动 MAX7219 点阵模块

网络作者:bluebanboom 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=65697&extra=page%3D8

MAX7219 点阵模块是一个 8x8 的 LED 点阵,单一的 LED 小灯玩熟了,再来试试 64 个小 LED 怎么闪。 首先是 MAX7219 与 NEO 的连线,将 VCC 连 NEO 的 4 号 Pin,GND 连 NEO 的 6 号 Pin,DIN 连 11 号 Pin,CS 连 13 号 Pin,CLK 连 15 号 Pin,这样就连接好了。 gpio 驱动用的是这个帖子里的:02.[bluebanboom][NEO]简单 GPIO 下载代码: http://bbs.ickey.cn/community/forum.php?mod=attachment&aid=NTkwNjN8YjZjODg0NDN8 MTQ4NDAzNzk3NHwxMjgwNTF8NjU2OTc%3D

执行如下命令编译:

133 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

然后执行

另外考虑到创建点阵图形还是比较费劲的,我又专门写了一个网页小工具用来创建点阵。 点击小方块选中后,地下会自动生成一个数组。注意由于使用了 jQuery,又想是单文件, 所以这个小工具需要联网使用。

目前主要在 chrome 和 Safari 下测试了网页,手机上也没问题。

可以来这里看一下代码执行的视频: http://www.kuaishou.com/photo/251927500/1007916829?cc=copylink&fid=251927500&et =1_i%2F0&type=2&userId=251927500&photoId=1007916829

134 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

技巧 30-开机跑马灯显示 IP

网络作者:bluebanboom 原文链接:http://bbs.ickey.cn/community/forum.php?mod=viewthread&tid=65765

NEO 没有 HDMI 接口,只能通过 SSH 登录,要登录 SSH 就需要知道 IP,第一次的话我们只能 通过路由来看 IP。

如果 IP 变了,还是要上路由看。或者,设成静态路由。不过有办法能够开机显示 IP 的话, 还在意这些细节干嘛呢?

我之前的帖子用 NEO 驱动了 Max7219 点阵,这次花样玩法,用 Max7219 来显示 IP 地址,跑 马灯的形式。

这次的代码稍微封装了一下,将 Max7219 相关的代码移到了 libmax7219.c 中。

主要是滚动文字的代码需要讲解一下。

因为每次 Max7219 只能显示 8x8 的点阵,要实现滚动字符需要对两个字符合并。

加入当前显示的字符是 0,下一个字符是 7,要实现滚动就需要逐步的将 0 移出 ,将 7 移入。

0 的完整显示如下所示:

135 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

7 的完整显示如下所示:

滚动显示中的某个时间:

有了图之后就很好理解了,就是字符 0 剩余的部分和字符 7 刚开始显示的部分合并成一个新 字符。

这里需要注意的点阵实际的数据是和显示的恰好相反,我们看到的是数字 0 的的右半部分, 但是在数据中是 0 的高位部分。

136 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

rollLeft 是取数据的高位。

rollRight 是取数据的地位。

mergeData 用来合并两个字符,生成滚动字状态

137 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

roll 是滚动显示两个字符

138 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

showstr 滚动显示字符,需要对开始和结束进行处理。

核心代码讲解差不多了。

使用如下命令 来编译代码, 139 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

然后将生成的 showip 拷到/usr/local/bin

为了能开机显示,需要在/etc/rc.local 中添加启动代码。

这里需要说明的是,rc.local 执行的时候网络可能还没完全准备好,我之前使用了很多方 案都没有取到 IP,最后终于找到可行方法。

所以,showip 的主要功能就是显示。

执行

编辑 rc.local

将如下代码夹在 exit 0 之前

将 192.168.1.1 改成你的路由地址,

/usr/local/bin/showip $IP 10 中的 10 表示循环显示 10 次后结束,可以改成你想要的显 示次数。

保存 rc.local 后,执行 sudo reboot 就可以看到滚动显示的 IP 了,来看看实际效果。

140 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/

141 友善电子官网: http://www.friendlyarm.com/ 维基地址:http://wiki.friendlyarm.com/