前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用全志XR806开发板轻松连上华为云实现物联网

用全志XR806开发板轻松连上华为云实现物联网

作者头像
阿志小管家
发布2024-06-01 08:10:31
730
发布2024-06-01 08:10:31
举报

二.从华为云官方仓库拉取连接平台所用的sdk

阅读华为云官方的开发手册,下载sdk一气呵成,值得吐槽的一点是官方的sdk竟然去年开始就没更新了,也不知道能不能用,先用上吧.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击链接跳转到github,直接整个zip包下载.再次吐槽的一点作为自家的王牌,鸿蒙系统没有只言片语,甚至是连个官方demo都没有,我想说这帮人都在干啥呢.把sdk下载过来,放到thirdparty目录下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三.使用sdk编写代码

上面说了官方连个demo都没有,那我们又如何开始呢,好在不急,我们可以借鉴别人的经验,小熊派已经做好了,参考小熊派的说明文档: https://gitee.com/bearpi/bearpi-hm_nano/tree/master/applications/BearPi/BearPi-HM_Nano/sample/D6_iot_cloud_oc 这个文档讲的还算详细的,直接有代码,可以copy过来,有几个需要注意的地方,小熊派官方代码里的url地址需要到平台上找最新的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那么这个地址又是如何得来的呢,需要我们先在华为云上创建好产品,至于怎么创建产品我这里也就不赘述了,创建好产品之后,点击首页,会有个接入地址的链接:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

点击这个链接,可以看到各种协议的url地址和端口:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们使用的是mqtt协议,也就是不加密的,所以选这个. 还有一个是创建产品后需要添加设备,添加设备选用秘钥方式,也就是密码,这里完事之后需要记得你设备的密码,然后会得到你的设备id,利用设备id转换出设备信息三元组,具体文档在小熊派的仓库里面也写了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里再贴一遍: https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/ 接着就可以利用小熊派的demo来接入sdk了

四.代码修改及编译

我们在BUILD.gn里面这么写:

代码语言:javascript
复制
static_library("iotLink") {

    sources = [

        "iot_thread.c",

        "oc_mqtt_profile_package.c",

        "oc_mqtt.c",

        "light.c",

        "//third_party/iot_link/cJSON/cJSON.c"

       

    ]

    

    cflags = [ "-Wno-unused-variable" ]

    cflags += [ "-Wno-unused-but-set-variable" ]

    

    include_dirs = [

        ".",

        "//foundation/communication/softbus_lite/os_adapter/include",

        "//utils/native/lite/include",

        "//kernel/liteos_m/components/cmsis/2.0",

        "//third_party/lwip/src/include",

        "//third_party/lwip/test/unit",

        "//base/iot_hardware/peripheral/interfaces/kits",

        "//foundation/communication/wifi_lite/interfaces/wifiservice",

        "//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include",



        "//third_party/iot_link/inc",

        "//third_party/iot_link/oc/oc_mqtt/oc_mqtt_tiny_v5",

        "//third_party/iot_link/cJSON",



        "//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTPacket/src",

        "//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTClient-C/src",

        "//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTClient-C/src/liteOS",

        "//third_party/iot_link/network/mqtt/paho_mqtt/paho/MQTTPacket/samples",

        

    ]



    deps = [ 

             "//third_party/iot_link/network/mqtt/paho_mqtt:pahomqtt_static",

    ]





}

这里我们引用了sdk官方的JSON和华为的MQTT库,其实1.x版本的鸿蒙系统还不够精简,需要做一些裁减,最基础的库会有很多绑定,主要的修改点在这儿:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

以上两个打箭头的地方我们注释掉,因为我们不用系统的,如果不注释调会有冲突. 然后小熊派带了一个LITEOS版本的mqtt适配,我们从小熊派那里拷贝过来.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后需要做一些修改,具体哪些修改已经不记得了,主要就是几个系统文件, 把这些统统做完,能够编译通过了已经成功一大半了 五.板子连接无线网 板子连接无线网直接拿XR806官方的demo进行修改,主要用的就是那个连接wifi的例子,然后可以先运行这个试一下能不能连到wifi,但是官方的例子没有自动获取ip的代码,所以我们又从小熊派的仓库中拷贝拿ip的代码,但是要稍作修改,如下:

代码语言:javascript
复制
static void MainThread(void *arg)

{	wifi_connect();


 	dhcp_start(g_lwip_netif);

        printf("begain to dhcp");

        OS_Sleep(5);

  

	iot_thread_start(NULL);

}

这之后就启动iot的线程,实现平台的登录.

六.踩坑

本来代码到这已经完了,可以实现平台的登录了,但是数据一直没法发上去,经过一天的苦苦寻找,结果发现问题出在linux_read这个函数里面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

原来的代码,这个地方赋值一直会错误,导致recv函数一直到超时都拿不到数据 这个问题百思不得其解,然后在论坛发帖了,貌似目前还没有解答: ,然后就是想办法绕过这个问题,改造吧,直接用timeout做参数去查询有没有数据:

代码语言:javascript
复制
int linux_read(Network *n, unsigned char *buffer, int len, int timeout_ms)
{
	printf("linux_read timeout_ms = %d\n",timeout_ms);
	struct timeval interval = {
		.tv_sec = timeout_ms / 1000,
	 	.tv_usec =(timeout_ms % 1000) * 1000
	};
	if (interval.tv_sec < 0 || (interval.tv_sec == 0 && interval.tv_usec <= 0))
	{
		interval.tv_sec = 0;
		interval.tv_usec = 100;
	}
	// setsockopt(n->my_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&interval, sizeof(struct timeval));

	int bytes = 0;

	struct pollfd pfd ;

	/* Initialize the file descriptor.
		* #POLLPRI corresponds to high-priority data while #POLLIN corresponds
		* to any other data that may be read. */
	pfd.events  = POLLIN | POLLPRI;
	pfd.revents = 0;
	/* Set the file descriptor for poll. */
	pfd.fd = n->my_socket;
		
	while (bytes < len)
	{
		int rc = poll(&pfd, 1, timeout_ms);
		if(rc > 0){
			rc = recv(n->my_socket, &buffer[bytes], (size_t)(len - bytes), 0);
		}else{
			if(rc == 0){
				break;
			}else{
				printf("rc ret = %d\n",rc);
			}
		}
		
		if (rc == -1)
		{
			if (errno != EAGAIN && errno != EWOULDBLOCK)
				bytes = -1;
			break;
		}
		else if (rc == 0)
		{
			bytes = 0;
			break;
		}
		else
			bytes += rc;
	}
	printf("read %d bytes\n",bytes);
	return bytes;
}

这一步做完,就可以愉快地登录云平台实现数据收发了

七.在云平台上进行调试

到云平台上点击产品,然后选择你的产品,再点击在线调试,选择你要调试的设备:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

跳转到在线调试页面:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到左边有数据,右边有命令下发,这时候我们设备还是离线的,把代码烧写到板子里,然后给系统上电,如果顺利的话,是可以看到设备上线,并且有数据上传,点击命令下发,填入一个指令,在页面右下角有个发送按钮,可以把命令发送出去,然后板子上就能收到数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以看到设备已经上线了,而我们的设备,也收到了平台下发的指令:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到这里我们就实现了华为云Iot平台的数据通信

八.总结

到这里,我们XR806设备上云就完成了,其实物联网没有想象中的那么难哈,还在等什么,赶紧开动起来吧. PS:源码暂时还未上传,视大家伙的热情,如果反映比较多,可以考虑把源码传上来,就这样,88.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-05-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二.从华为云官方仓库拉取连接平台所用的sdk
  • 三.使用sdk编写代码
  • 四.代码修改及编译
  • 六.踩坑
  • 七.在云平台上进行调试
  • 八.总结
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档