IoT-Camera学习笔记之 初识IoT-Camera
-- blog:http://blog.csdn.net/flyingcys
--QQ:294102238
1. 开发板介绍
1.1. 概述
IoT-Camera是一款由开发RT-Thread操作系统的上海睿赛德电子科技有限公司推出的开源物联网摄像头开发板,采用RT-Thread开源实时操作系统,支持C/C++/lua编程开发,兼容Arduino,可通过Wi-fi将视频数据传输至手机、平板等设备。
IoT-Camera购买地址:
https://item.taobao.com/item.htm?_u=o1m5ek5ce617&id=538501985648
RT-Thread是一款嵌入式实时操作系统,包含实时嵌入式操作系统内核及TCP/IP协议栈、文件系统、无线网络栈、设备抽象层、存储机制、算法、图形库、libc接口、POSIX接口等。RT-Thread源码下载地址:https://github.com/RT-Thread/rt-thread。
不熟悉RT-Thread开发的可先先登录官网http://www.rt-thread.org/了解详情。
RT-Thread最新版本的编程手册下载地址:
http://www.rt-thread.org/download/manual/rtthread_manual.zh.pdf
请注意核心板的连接,正对方向看IoT-Camera开发板,天线朝上,TF卡由右边插入;位于上半部分的是按钮是Reset按钮
1.2. 硬件配置
CPU:采用富瀚微电子的FH8620。ARM1176JS内核,300MHZ主频,集成128Mbits DDR
Wi-Fi:采用AP6181模组,支持802.11b/g/n ,支持station或软AP模式
视频:支持H.264 编码和支持 JPEG/MJPEG 编码
音频:内嵌 Audio Codec (单声道输入和输出),支持麦克风输入
硬件接口:
一个 iic 接口
一组 SPI 接口
一个串口
六个 gpio 接口
三路 pwm 接口
一个 micro SD 卡插槽
两路 ADC 输入
LINE IN 与 LINE OUT
1.3. 软件功能
RT-Thread基本系统平台,涵盖:RT-Thread内核,SD卡上文件系统,TCP/IP协议栈
TFTP、web server方式更新固件;
Wi-Fi Station模式/AP模式(支持WEP、WPA/WPA2等加密方式);
摄像头以720P方式录像成H.264视频并存储到SD卡中;
摄像头以720P方式录像成H.264格式,并通过RTSP TCP或UDP方式通过wifi传输出去;
摄像头以720P方式录像成mjpeg视频流,提供给浏览器查看;
摄像头以720P方式录像存储到SD卡中(H.264格式),并提供一路720P子帧用于mjpeg方式供浏览器浏览
支持POSIX C/C++开发,支持LUA脚本
IoT-Camera软件功能持续更新中,请关注官网发布情况
2. 开发环境配置
IoT-Camera采用camera studio集成开发环境。camera studio是由睿赛德为IoT-Camera开发板专门开发的集成开发环境,基于eclipse定制,当前支持windows 32bit/64bit开发环境,请选择对应版本下载。
2.1. 下载
下载地址为:http://pan.baidu.com/s/1pLguWt1下载后,请解压至开发主机,特别注意,解压后的目录不能含中文、空格等目录。
下载、解压完成后,请先打开网盘内有一个“camera_studio-env补丁(32位64位都适用)”完成camera studio env补丁
2.2. 启动camera studio
点击“env.exe”文件启动camera studio,因为camera studio需要做一些环境变量的设置(环境变量就在那个env.xml里面吧)。
注意:不是点击eclipse.exe启动的哦!
camera studio内含整套开发所需要的工具,如交叉编译器,make、python、scons等。
启动后初始界面,没有导入工程
2.3. SDK 源码
2.3.1. 导入
通过选择”File”->”Import”->”Existing Code as Makefile Project”导入
选择对应的sdk目录,
Languages:默认选择为c/c++
Toolchain:默认选择为none
目前官方对IOT-Camera的sdk在持续更新中,请关注官网发布情况。
2.3.2. 编译
点击工具栏的小锤子或CTRL+B编辑SDK
编译完成后,可在Console下查看编译情况。rtthread.bin就是最终bin文件
3. SDK目录结构
1) Makefile:eclipse调用make的入口文件,IoT-Camera采用scons完成编译;rtthread源码都采用scons完成build
2) armv6目录:针对FH8620内核的支持,包括栈初始化、上下文切换、MMU配置等
3) rt-thread目录:包括rt-thread内核、文件系统dfs、网络协议栈lwIP、shell命令行、c++支持等。目前采用的是比较新的v2.5.0版本代码
4) drivers目录:FH8620外设驱动,包括gpio、i2c、ssi、dma、sdio等;和rt-thread发行版本的bsp目录功能一致
5) libraries目录:包含系统的启动汇编代码;同时也包括一些底层库(AP6181 wifi驱动库、extlib芯片ISP库等),一般这部分代码不需要做相应的修改
6) platform目录:FH8620板级代码,和rt-thread发行版本的board目录功能一致。
7) applications目录:应用目录,目前有的demo有audio、gpio、pwm、adc、video等,该目录下还包括main主函数
8) packages目录:软件包目录,包括cJSON、ezxml、telnet_server、wget等,该目录下软件包会越来越多
4. SDK运行流程
4.1. 启动入口
1) 汇编级入口,异常向量表中的reset也指向这里,启动后程序跳转到这里运行。
3) 进入C的入口:_rtthread_startup,该函数跳转至rt-thread内核
rtthread_startup函数位于rt-thread->src目录下的components.c文件内
4.2. RT-Thread的C入口rtthread_startup:
完成各种板级初始化、RTT_Log显示、用户代码初始化、调度器启动等工作
1) 硬件板级初始化函数rt_hw_board_init:主要完成了中断初始化、MMU初始化等工作
a. MMU初始化:通过内存描述数组,完成内存段映射关系
b. heap空间定义
2) 用户初始化函数:rt_application_init
在main_thread_entry里面完成:
组件初始化
调用main
所以main函数只是rt-thread里面一个优先级为 RT_THREAD_PRIORITY_MAX / 3的任务;main函数位于applications目录下main.c文件内
到这里,整个Project已经启动完成,用户可在main里面添加自己的代码!
5. bin文件烧写运行
刚拿到手的IOT-Camera开发板是没有烧写摄像头固件的,所以我们要先刷机!!!
最新版本的Firmware已经支持3种不同的刷机方式。
5.1. 更新固件方式1
手工TF卡刷机
1) Step1:将camera studio编译完成后的rtthread.bin复制至TF卡根目录,插入IoT-Camera核心板。
2) Step2:将USB插入电脑后,打开串口终端,波特率为115200,本人使用的是SecureCRT。在显示”Hit any key to stop autoboot”倒计时为0前,按任意键进入uboot命令行模式。
3) Step3:选择启动方式:IoT-Camera可以通过2种不同的启动模式启动
a) 启动方式1:将rtthread.bin从TF复制至内部flash,每次从内部flash启动IoT-Camera,每次更新固件都需要手工进uboot输入命令。(也太麻烦了吧!!!)
将TF卡中的rtthread.bin加载到0xA0000000内存地址中
将镜像文件烧录至 Flash 中(从 4M 位置,烧录 2M 数据)
sf probe 0设置 U-Boot 启动参数并保存
fatload mmc 0 0xA0000000 rtthread.bin
sf erase 400000 200000
sf write a0000000 400000 200000
set bootcmd 'sf probe 0; sf read a0000000 400000 200000; go a0000000'
save
重新启动
reset
可以看到,程序已经正常运行
b) 启动方式2:从TF卡启动IoT-Camera,uboot自动读取rtthread.bin文件
在uboot中修改启动参数
set bootcmd fatload mmc 0 0xa0000000 rtthread.bin\; go 0xa0000000
保存uboot配置
save
重新启动
reset
两种启动方式比较:
1. 启动方式1适合正式生产的时候使用,在程序调试阶段并不合适。
2. 启动方式2会在启动时读取rtthread.bin增加启动时间,但适合程序调试。
3. 在下面的更新方式中会经常用到,所以推荐使用启动方式2。
5.2. 更新固件方式2
通过wget下载rtthread.bin至TF卡并在TF卡上运行
更新固件方法1只适合的IoT-Camera第一次刷机使用或者由于程序出错无法正常启动时使用!如果每次更新程序都需要去通过TF卡在电脑上复制bin文件那是非常麻烦的!那我们来试试方法2吧!
1) Step1格式化分区:这个很重要哦!否则rtthread系统访问不了TF卡(step1只需要执行一次就可以了)
a. 固件运行起来后,需要格式化rootfs分区。输入:
mkfs rootfs 后重启
b. 创建sdcard目录.输入:
mkidr sdcard 后重启
这样,rtthread系统能够自动装载 flash 上的 rootfs 分区到’/’根目录,而把 TF 卡装载到’/sdcard’目录中。可通过ls命令查看当前目录
2) Step2启动web_server
c. 如果电脑上没有安装python2.7,可先安装,安装完成后,在windows命令行输入:
python c:\iot_camera\firmware-20161002\websrv.py启动web_server
如果不想安装python2.7,camera_studio自带了python2.7,在windows命令行输入:
cd c:\iot_camera\camera_studio\tools\Python27
python.exe c:\iot_camera\firmware-20161002\websrv.py
启动完成后,在浏览器输入http://localhost:8000/查看是否成功运行。
注:以上2种方式启动的web_server的根目录不一样,这个对于我们下面使用wget获取文件位置有很大关系(本人使用的是自己安装python2)
3) Step3将IoT-Camera连接网络:
使用wifi join ssid password命令,ssid和password为需要配置的网络名和密码。
连接成功!并可使用ifconfig查看ip确认是否正确连接
4) Step4使用wget命令下载
在电脑端先将rtthread.bin复制至对于web_server根目录下,在msh命令行输入:
wget http://192.168.31.166:8000/rtthread.bin /sdcard/rtthread.bin
如配置及输入命令正确,wget将开始从web_server下载rtthread.bin文件
下载完成!!!重启iot-camera就可运行新程序。
可修改Makefile文件,每次编译完成后自动将rtthread.bin复制至web_server根目录(目录请自行修改)
5.3. 更新固件方式3
通过rboot启动并下载rtthread.bin至TF卡并在TF卡上运行
更新固件方式2在程序正常运行后,可通过wget获取rtthread.bin至TF卡完成更新。但如果用户修改程序后无法正常运行wget呢?只能用方式1了吧???当然还有更便捷的方法,通过rboot启动IoT-Camera。IoT-Camera启动流程:
让我们来试试用rboot启动系统,更新系统吧!
1) Step1:将rboot.bin rboot.sh init.sh rtthread.bin这4个文件复制至TF卡根目录。文件下载地址为:网盘http://pan.baidu.com/s/1pLguWt1的prebuilt_demo目录下
2) Step2:按照前章描述启动IoT-Camera并进入uboot命令行,输入如下命令:
设置执行地址
设置 uboot 的提示计数等待为 1
保存设置
save
重启
reset
setenv bootcmd fatload mmc 0 0xa0200000 rboot.bin\; go 0xa0200000
setenv bootdelay 1
这时候就可以看到rboot已经正常工作了
rboot.sh脚本是rboot启动提示计数器减到0后自动运行的脚本文件。在rboot.sh中可以指定下一个启动的rt_thread固件位于哪里。如:
加载TF卡根目录下的rtthread.bin
boot /rtthread.bin
加载web_server服务器上的固件
boot http://192.168.31.166:8000/rtthread.bin
为了让rboot能上网,需要先在rboot下先进行wifi配置;输入:wifi cfg ssid passwd。完成wifi配置后,rboot会在提示计数器时试图关联到本地wifi网络中,以便执行rboot.sh脚本时,能尽快下载到更新需要的固件
本人使用的是加载TF卡根目录下rtthread.bin这种方式,如需要更新程序直接进rboot命令行输入:boot http://192.168.31.166:8000/rtthread.bin;这样可提高iot-camera加载启动速度
下载完成后,rboot会自动
6. 视频测试
在iot-camera正常启动rt-thread系统后,可以使用help命令,或tab键获得当前rt-thread支持的命令行。
具体该指令如何使用,可输入该指令:
1. 将iot-camera连入wifi。联网操作请参照前述操作。
2. 在msh命令行中输入 mjpeg start 启动mjpeg_server,默认端口为80
3. 启动成功后,在浏览器中输入当前iot-camera的IP地址,就可看到视频流。
并可在msh中断上看到client连接状态
注: 在 PC 上请使用 Chrome 或 firefox 浏览器来打开视频, IE 不支持这种方式
关注RT-Thread实时嵌入式操作系统
加入RT-Thread微信群
先加管理员微信,让管理员拉到群中