1.QQ物联开发步骤
1)测试环境无需申请上线,即可任意调试。
意思是什么呢,它是告诉大家,在调试的时候不要点击上面的提交上线,
因为目还在调试此设备,一旦上线,QQ物联官方就会来审核你的设备,
导致延长研发周期,在有十足的把握时,在去提交上线。如果产品已经提交上线,
通过QQ物联官方审核,后续产品的配置页面的修改都需要腾讯审核。
2)测试环境最多有100个设备可以调试,上线之后接入设备的个数就不受限制。
第二小节 配置设备后台
功能配置---》特殊功能
用来定义手机QQ与QQ物联设备两者之间的特殊消息的数据格式
显示类型:只能是QQ物联设备向手机QQ发送用于显示的的数据
控制类型:QQ物联设备与手机QQ可以互传控制消息的数据
控制类型的功能描述{"on":"1","off":"0"}
第三节
每个设备类型在申请的时候就已经固定设备的公私钥对了,每个设备唯一不同的就是SN已经根据SN用设备私钥前面的license,设备公钥在申请的时候已经上传了
第4课第5节 使用datapoint接口来收发手机QQ的数据
1)led驱动和应用程序的测试
make
arm-linux-gcc -o jz2440_led_app jz2440_led_app.c
ifconfig eth0 192.168.1.185
mount -t nfs -o nolock 192.168.1.184:/work/nfs_root/qq_iot /mnt
insmod jz2440_led_drv.ko
./jz2440_led_app
2)lcd界面的绘制
framebufferfb.c
FBDeviceInit()---framebuffer的初始化
guigui_base.c
GUI_Clear清屏
GUI_SetPixel描点
GUI_DrawHLine画横线
GUI_DrawVLine画竖线
GUI_DrawLine画任意线
GUI_FillRectangle填充矩形
GUI_SetFont设置字体
GUI_PutChar显示字符
GUI_PutString显示字符串
GUI_DrawCircle画圆
GUI_DispNum显示数字
Makefile的二个问题
(1)编译后输出的目标文件是什么?
(2)当前目录要编译那么文件、要编译哪些子目录?
注意:
(1)当前目录要编译的文件、要编译的子目录都由
当前目录下Makefile来决定。
通用makefile的使用
i) 修改顶层Makefile中TARGET
TARGET := 目标文件名
ii)修改各级Makefile中obj-y,添加你所需要编译的文件或者目录
obj-y += xxx.o
obj-y += yyy/
3)使用datapoint接口来收发手机QQ的数据
参考:
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Common_CMD.md
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Custom_CMD.md
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Sync_Status.md
结构体
tx_data_point
// 初始化datapoint
SDK_API int tx_init_data_point(const tx_data_point_notify *notify);
// 上报datapoint数据
// [in] id: 上报的datapoint ID
// [in] value: 上报的datapoint value
// [out] cookie: 返回调用cookie
// [in] ret_callback: 发送结果callback
SDK_API int tx_report_data_point(unsigned int id, char * value, unsigned int * cookie, on_report_data_point_ret ret_callback);
// 应答收到的datapoint
// [in] from_client: datapoint信令来自某个绑定者, 必须和已收到的datapoint时的from_client一致,否则会被过滤
// [in] id: 应答的datapoint对应的ID, 必须和已收到的datapoint的ID一致,否则会被过滤
// [in] value: 应答的datapoint的自定义数据
// [in] seq: 应答的datapoint对应的seq, 必须和已收到的datapoint的seq一致,否则会被过滤
// [out] cookie: 返回调用cookie
// [in] ret_callback: 发送结果callback
SDK_API int tx_ack_data_point(unsigned long long from_client, unsigned int id, char * value, unsigned int seq, unsigned int ret_code, unsigned int * cookie, on_ack_data_point_ret ret_callback);
第4课第7节 使用datapoint接口来收发手机QQ的数据
1)视频演示
ubuntu下:
make clean
make
cp net_bind_detector /work/nfs_root/qq_iot/
sudo cp -rfd res/ /work/nfs_root/qq_iot/
开发板linux下:
ifconfig eth0 192.168.1.185
挂载网络文件系统、复制文件
mount -t nfs -o nolock 192.168.1.184:/work/nfs_root/qq_iot /mnt
cd /mnt
cp -rfd res/ /qq_iot/
cp net_bind_detector /qq_iot/
加载led驱动
cd /lib/modules/3.4.2/
insmod jz2440_led_drv.ko
查看链接库文件
cd /qq_iot/
ls (net_bind_detector依赖于库文件)
ls /lib/libtxdevicesdk*
查看密钥
cd /etc/qq_iot/demo_bind
ls
cat config
网络设置
cd /qq_iot/
route add default gw 192.168.1.1
cat /etc/resolv.conf
ping news.qq.com
cd /qq_iot/
./net_bind_detector
先后输入
sendtextmsg 测试文本的发送
sendpic 测试图片文件的发送
sendaudio 测试音频文件的发送
sendvideo 测试视频文件的发送
注意一下,上面这几个(sendpic、sendaudio、sendvideo)都是
通过tx_send_structuring_msg来发送的。
第4课第8节 使用datapoint接口来收发手机QQ的数据
实际看一下第一个项目net_bind_detector的代码
1)看一下目录
led ---------led的应用程序(很简单)
framebuffer ---------framebuffer底层实现,来自前面的自制gui(已讲解)
gui ---------自制gui(已讲解)
lib ---------腾讯QQ物联SDK的库文件存放位置
include ---------头文件
qq_dev_sdk ---------腾讯QQ物联SDK的头文件存放位置
initDevice ---------设备初始化(已讲解)
DataPoint ---------tx_init_data_point、
tx_ack_data_point、
tx_report_data_point接口的实现
fileTransfer ---------tx_init_file_transfer接口的实现
msg ---------tx_send_text_msg、
tx_send_structuring_msg接口的实现
res ---------存放图片文件、音频文件、视频文件
2)公有功能和特殊功能
公有功能:(腾讯QQ物联团队规定的)
该类产品具有的公有功能。
可以由开发者选择打开或者关闭。
特殊功能:某个厂家自己的产品有一些额外的功能,
可以用“特殊功能”来实现。
特殊功能由datapoint接口来实现:
datapoint的使用方法:
参考:
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Common_CMD.md
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Custom_CMD.md
http://iot.open.qq.com/wiki/index.html#!FUNC/DataPoint_Sync_Status.md
TXDataPoint.h中:
结构体
tx_data_point
// 初始化datapoint
SDK_API int tx_init_data_point(const tx_data_point_notify *notify);
// 上报datapoint数据
// [in] id: 上报的datapoint ID
// [in] value: 上报的datapoint value
// [out] cookie: 返回调用cookie
// [in] ret_callback: 发送结果callback
SDK_API int tx_report_data_point(unsigned int id, char * value, unsigned int * cookie, on_report_data_point_ret ret_callback);
// 应答收到的datapoint
// [in] from_client: datapoint信令来自某个绑定者, 必须和已收到的datapoint时的from_client一致,否则会被过滤
// [in] id: 应答的datapoint对应的ID, 必须和已收到的datapoint的ID一致,否则会被过滤
// [in] value: 应答的datapoint的自定义数据
// [in] seq: 应答的datapoint对应的seq, 必须和已收到的datapoint的seq一致,否则会被过滤
// [out] cookie: 返回调用cookie
// [in] ret_callback: 发送结果callback
SDK_API int tx_ack_data_point(unsigned long long from_client, unsigned int id, char * value, unsigned int seq, unsigned int ret_code, unsigned int * cookie, on_ack_data_point_ret ret_callback);
a.LED1_ID ,根据datapoint.value来打开/关闭,tx_ack_data_point
b.LED2_ID ,根据datapoint.value来打开/关闭,tx_report_data_point
c.BRIGHTNESS_ID,根据datapoint.value得到亮度值,tx_report_data_point
d.TEMPER_SWITCH_ID,根据datapoint.value来启动/关闭定时器
其中,启动定时器后,不断的上报数值,tx_report_data_point
为什么需要tx_ack_data_point和tx_report_data_point呢?
答:更新手机QQ的状态
tx_ack_data_point 参数多,复杂一些
tx_report_data_point 参数少,简单
第4课第9节 使用tx_send_text_msg接口向手机QQ发送文本
使用tx_send_structuring_msg接口向手机QQ发送图片文件、音频文件、视频文件
实际看一下第一个项目net_bind_detector的代码
1)看一下目录
led ---------led的应用程序(很简单)
framebuffer ---------framebuffer底层实现,来自前面的自制gui(已讲解)
gui ---------自制gui(已讲解)
lib ---------腾讯QQ物联SDK的库文件存放位置
include ---------头文件
qq_dev_sdk ---------腾讯QQ物联SDK的头文件存放位置
initDevice ---------设备初始化(已讲解)
DataPoint ---------tx_init_data_point、
tx_ack_data_point、
tx_report_data_point接口的实现
fileTransfer ---------tx_init_file_transfer接口的实现
msg ---------tx_send_text_msg、
tx_send_structuring_msg接口的实现
res ---------存放图片文件、音频文件、视频文件
参考:
http://iot.open.qq.com/wiki/index.html#!CASE/Android_TV.md
注意:
msg ext_utf8.c 和
msgalarm_utf8.c
的编码格式为utf-8.
原因:QQ物联sdk中中文字符的发送,必须使用utf-8格式。
参考:
http://iot.open.qq.com/wiki/index.html#!QA/QA_FileCoding.md
TXMsg.h
//callback: 用于确认消息是否送达了QQ物联后台服务器
typedef void (*on_send_text_msg_ret)(unsigned int cookie, int err_code);
/**
* 接口说明:向手机QQ发送文本消息
* 参数说明:
* msg_id 动态消息ID,请到配置平台进行注册,没有注册过的ID无法送达手机QQ
* text 要发送的文本
* ret_callback 发送结果回调
* cookie 由sdk内部分配唯一值,并会在发送结果回调时回传,用于唯一标识当前调用
* to_targetids 指定发给某些target
* to_targetids_count 指定发给某些target的count,填0表示发送给所有的绑定者
*/
SDK_API void tx_send_text_msg(int msg_id, char *text, on_send_text_msg_ret ret_callback, unsigned int *cookie, unsigned long long* to_targetids, unsigned int to_targetids_count);
/**
* 接口说明:向手机QQ发送结构化消息,每条消息都会有唯一的 cookie, tx_send_msg_notify 用于了解发送状态
* msg:结构化消息
* notify:进度,结果回调
* cookie:返回任务cookie
*/
SDK_API void tx_send_structuring_msg(const structuring_msg *msg, tx_send_msg_notify *notify, unsigned int *cookie);
TXFileTransfer.h
/**
* 初始化传文件
* notify : 回调
* path_recv_file : 接收文件的目录
*/
SDK_API int tx_init_file_transfer(tx_file_transfer_notify notify, char * path_recv_file);
tx_init_file_transfer的目的:
1)手机QQ向QQ设备发送的普通文件、音频文件