发 帖  
[经验]

【星闪派物联网开发套件体验连载】智能交通灯

2024-10-5 13:00:34  12659 星闪 物联网
1
zhangfen137 2024-10-15 16:51:11
回复

举报

zhangfen137 2024-10-15 18:51:38
板凳
回复

举报

zhangfen137 2024-10-15 19:05:47
3#

阿里云网关


阿里云网关,基于LinkSDK二次开发实现,怎么开发?

先理清LinkSDK怎么运行,什么运行逻辑,开放了什么接口,什么功能,怎么调用。


LinkSDK 代码分析:
image.png


先初始化SDK 底层依赖,参数就是要自己实现的部分,是一些posix标准系统接口,如下


image.png
image.png


有内存相关接口,malloc,free,


有时间戳接口time


有休眠接口sleep


有网络接口init ,recv,send,deinit,


有随机数接口rand


有互斥锁接口init,deinit,lock,unlock


有mqtt接口setopt,establish


这些接口移植到自己平台实现,就可以把mqtt客户端跑起来,接入阿里云物联网平台了。


直接移植到星闪派也可以


本项目是把mqtt客户端部署到linux主机,当作阿里云网关。阿里云网关连接阿里云服务器,星闪派开发板再连接阿里云网关。


image.png


这里注册recv handle,接受回调函数,网关收到阿里云服务器下发的指令,会调用这个函数处理。

这个函数中数据处理部分需要自己实现。下文会分析为什么需要


这里还注册了event handle,事件回调函数,主要是mqtt客户端保持心跳,断联,重连,会调用这个函数


函数 aiot_mqtt_connect,与阿里云服务器建立连接


image.png


创建两个进程,一个是g_mqtt_process_thread 进程如下,会遍历pub_list,发送消息
image.png


还有一个进程是g_mqtt_recv_thread,会遍历 sub_list 处理,调用recv_handle 处理数据
image.png


遍历了两个列表,处理数据。可是两个列表都是空的,肯定不会正常收发消息。


接着看以下两个函数
image.png


Aiot_mqtt_sub 函数最终把 node 插入到 sub_list 中,如下 186行
image.png


aiot_mqtt_pub 函数最终调用以下函数插入pub_list 列表
image.png


Mqtt 客户端框架基本理清。


  • 自己开发时候,想要发送消息,调用 aiot_mqtt_pub就可以。g_mqtt_process_thread 进程遍历 pub_list 列表,发送消息

  • 想要订阅消息,调用 aiot_mqtt_sub。g_mqtt_recv_thread,会遍历 sub_list 处理,调用recv_handle 处理数据

  • 同时还要自己实现 recv_handle 处理函数,接受到数据怎么处理,什么业务逻辑,要自己实现

LinkSDK本质是个mqtt客户端,和阿里云服务器mqtt服务器通信。


稍后基于linkSDK二次开发,实现阿里云网关和阿里云服务器双向通信









回复

举报

zhangfen137 2024-10-17 16:52:26
4#

阿里云网关,开发和调试


阿里云网关连阿里云物联网服务器,需要以下信息:


1,阿里云服务器网址,端口号:接入地址如下
image.png

端口号:1883


2,阿里云设备证书:
image.png


3,修改LinkSDK 设备证书,mqtt 地址,端口号
image.png


4,如上文所说:调用aiot_mqtt_pub 发布消息,到阿里云服务器。实现云端查看状态
image.png
image.png


5,调用aiot_mqtt_sub 订阅消息,阿里云服务器下发指令,就能接收到了。并实现消息处理,收到数据做对应的动作,实现云端远程控制
image.png

消息处理代码,要添加到AIOT_MQTTRECV_PUB 中。本截图标识以下代码位置,代码不全,添加自己代码就好
image.png


6,LinkSDK 开发完成,编译不过,会报错,不是啥要紧的错误,改改 CFLAGS ,如下第四行,直接跳过去报错,继续编译完成,运行调试
image.png

编译生成output/mqtt-basic-demo


运行调试:

运行:output/mqtt-basic-demo


查看网关log:
image.png

发布的消息成功,消息内容是:LightLuminance:0


查看阿里云服务器:
image.png

设备在线,正常。
image.png

主灯亮度0 ,没问题,阿里云网关发布的值就是0。

阿里云服务器云端运行日志,实时监控数据,都正常。



云端远程查看状态实现。


云端下发指令:
image.png


阿里云网关收到以下消息:
image.png


阿里云网关收到消息,把交通灯设置好状态,把最新的状态再次发布到阿里云服务器。
image.png


查看历史数据一切正常:
image.png


云端远程控制实现。


阿里云网关和阿里云服务器之间,双向通信调通。

云端查看状态,云端控制,全部实现。

















1 回复

举报

zhangfen137 2024-10-18 18:50:13
5#
回复

举报

zhangfen137 2024-10-21 11:23:45
6#
回复

举报

zhangfen137 2024-10-21 11:44:46
7#

星闪派接入阿里云网关-1


星闪派要接入阿里云网关:


  1. 先要接入家里WiFi路由器,和阿里云网关在同一个家庭局域网内,可以相互通信。

  2. 创建 socket 套接字,向阿里云网关收发数据,双向通信。

星闪派 WiFi作为 station 接入WiFi 路由器(AP),创建一个 WiFi 进程
image.png


WiFi 进程中初始化 WiFi,使能 WiFi,扫描 WiFi /ap 信号,找到要连接的 ap,连 WiFi,开启 dhcp客户端,获取 ip 地址。到此 WiFi 已经接入网络
image.png
image.png
image.png

编译,下载,调试


以下是 wifi_task 进程连接 WiFi 路由器的log:


星闪派开发板获取到 ip是192.168.51.154,WiFi路由器网关配置信息,WiFi 连接成功。


[stl_log][000006]wifi_task: init.
[stl_log][000007]wifi_task: wifi connect...
[stl_log][000008][WIFI_STA_SAMPLE]::wifi_event_cb register succ.
[stl_log][000009][WIFI_STA_SAMPLE]::wifi init succ.
drv_soc_ioctl ioctl_cmd->cmd=7.
drv_soc_ioctl ioctl_cmd->cmd=9.
drv_soc_ioctl ioctl_cmd->cmd=17.
drv_soc_ioctl ioctl_cmd->cmd=13.
drv_soc_ioctl ioctl_cmd->cmd=35.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=2.
drv_soc_ioctl ioctl_cmd->cmd=41.
[stl_log][000010][WIFI_STA_SAMPLE]::STA enable succ.
[stl_log][000011][WIFI_STA_SAMPLE]::Scan start!
drv_soc_ioctl ioctl_cmd->cmd=14.
hmac_single_hal_device_scan_complete:vap[1] time[762] chan_cnt[13] chan_0[1] back[0] event[6] mode[0]
Scan::vap[1] find bss_num[16] in regdomain, other bss_num[0]
Srv:548:recive event = 1
[stl_log][000012][WIFI_STA_SAMPLE]::Scan done!.
Srv:1723:sta_scan_results cnt 16
[stl_log][000013][WIFI_STA_SAMPLE]::Connect start.
Srv:find ssid[ws63_test] auth type[2] pairwise[1] ft_flag[0]
drv_soc_ioctl ioctl_cmd->cmd=47.
drv_soc_ioctl ioctl_cmd->cmd=47.
drv_soc_ioctl ioctl_cmd->cmd=47.
drv_soc_ioctl ioctl_cmd->cmd=16.
drv_soc_ioctl ioctl_cmd->cmd=47.
drv_soc_ioctl ioctl_cmd->cmd=6.
drv_soc_ioctl ioctl_cmd->cmd=5.
drv_soc_ioctl ioctl_cmd->cmd=6.
drv_soc_ioctl ioctl_cmd->cmd=6.
drv_soc_ioctl ioctl_cmd->cmd=5.
drv_soc_ioctl ioctl_cmd->cmd=1.
drv_soc_ioctl ioctl_cmd->cmd=3.
drv_soc_ioctl ioctl_cmd->cmd=1.
+NOTICE:CONNECTED
drv_soc_ioctl ioctl_cmd->cmd=6.
Srv:548:recive event = 2
[stl_log][000014][WIFI_STA_SAMPLE]::Connect succ!.
[stl_log][000015][WIFI_STA_SAMPLE]::DHCP start.
[stl_log][000016]socket_task: cycle:0.
[stl_log][000017][WIFI_STA_SAMPLE]::STA DHCP success.
STA IP 192.168.51.154
server :
        server_id : 192.168.51.1
        mask : 255.255.255.0, 1
        gw : 192.168.51.1
        T0 : 43200
        T1 : 21600
        T2 : 37800
clients <1> :
        mac_idx mac             addr            state   lease   tries   rto     
        0       00163e2b408b    192.168.51.154  10      0       1       4      
[stl_log][000018]wifi_task: wifi connect[0] result[0].

同时在 oled 小屏幕上显示 WiFi 信息,ip 信息,server信息(阿里云网关信息,预留位置,稍后开发),WiFi/IP/server信息在同一个位置,流水显示,如下图片:
image.png
image.png
image.png


WiFi 状态:有 init,connecting...,connected

IP 信息:显示 ip,没获取到显示空

(预留位置,稍后开发)Server信息:显示阿里云下发的最后一条指令,laastcmd:1,这样,没收到显示空


WiFi连接成功,稍后创建 socket 套接字,和阿里云网关通信









回复

举报

zhangfen137 2024-10-21 11:56:36
8#

星闪派接入阿里云网关2


基于上一篇,已经建立的WiFi 连接,创建 socket 套接字和阿里云网关通信。


星闪派和阿里云网关之间使用socket UDP 通信,代码如下:


星闪派发送数据代码:
image.png

星闪派接收数据代码:recvfrom 是个阻塞函数,收到数据就会打印出来,等下一次接收
image.png

阿里云网关发送数据代码:
image.png

阿里云网关接收数据代码:
image.png




回复

举报

zhangfen137 2024-10-21 12:02:05
9#

星闪派接入阿里云,调试


星闪派>>> 阿里云网关 >>> 阿里云服务器:数据流 log 追踪:


星闪派发送数据log:
image.png

阿里云网关接收数据log:
image.png

阿里云网关发布数据log:
image.png

阿里云服务器log:
image.png
image.png



阿里云服务器>>> 阿里云网关 >>> 星闪派:数据流 log 追踪:


阿里云服务器下发指令log:
image.png
image.png

阿里云网关订阅消息log:
image.png

阿里云网关发送数据log:
image.png

星闪派接收数据log:
image.png



以上追踪双向数据流log,全部正常


星闪派智能交通灯,到云端,双向通信正常。本项目开发调试全部完成。


云端查看,云端远程控制视频如帖子底部










回复

举报

zhangfen137 2024-10-21 13:51:30
10#

智能交通灯--云端查看,远程控制视频,如下链接:/jishu_2459800_1_1.html



回复

举报

只有小组成员才能发言,加入小组>>

2243个成员聚集在这个小组

加入小组

精选推荐

最新话题

热门话题

创建小组步骤

快速回复 返回顶部 返回列表
关注微信公众号

电子发烧友网

电子发烧友开云(中国)官方

社区合作
刘勇
联系电话:15994832713
邮箱地址:liuyong@huaqiu.com
社区管理
elecfans短短
微信:elecfans_666
邮箱:users@huaqiu.com
关闭

站长推荐 上一条 /6 下一条

快速回复 返回顶部 返回列表
-

技术社区

张飞电子技术社区

KaihongOS技术社区

FPGA开发者技术社区

RISC-V MCU技术社区

HarmonyOS技术社区

-

OpenHarmony开源社区

OpenHarmony开源社区

-

嵌入式开云(中国)官方

ARM技术开云(中国)官方

STM32/STM8技术开云(中国)官方

嵌入式技术开云(中国)官方

单片机/MCU开云(中国)官方

RISC-V技术开云(中国)官方

瑞芯微Rockchip开发者社区

FPGA|CPLD|ASIC开云(中国)官方

DSP开云(中国)官方

-

电路图及DIY

电路设计开云(中国)官方

DIY及创意

电子元器件开云(中国)官方

专家问答

-

电源技术开云(中国)官方

电源技术开云(中国)官方

无线充电技术

-

综合技术与应用

机器人开云(中国)官方

USB开云(中国)官方

电机控制

模拟技术

音视频技术

综合技术交流

上位机软件(C/Python/Java等)

-

无线通信开云(中国)官方

WIFI技术

蓝牙技术

天线|RF射频|微波|雷达技术

-

EDA设计开云(中国)官方

PCB设计开云(中国)官方

DigiPCBA开云(中国)官方

Protel|AD|DXP开云(中国)官方

PADS技术开云(中国)官方

Allegro开云(中国)官方

multisim开云(中国)官方

proteus开云(中国)官方|仿真开云(中国)官方

KiCad EDA 中文开云(中国)官方

DFM|可制造性设计开云(中国)官方

-

测试测量开云(中国)官方

LabVIEW开云(中国)官方

Matlab开云(中国)官方

测试测量技术

传感技术

-

招聘/交友/外包/交易/杂谈

项目外包

供需及二手交易

工程师杂谈|交友

招聘|求职|工程师职场

-

官方社区

发烧友官方/活动

华秋商城

华秋电路