HiHope开发者社区
直播中

zhangfen137

4年用户 124经验值
擅长:测量仪表 嵌入式技术 处理器/DSP
私信 关注
[经验]

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

video_1

感谢电子发烧友,感谢润和软件,提供星闪派物联网开发套件试用。

本次试用计划:

用星闪派物联网开发套件,先实现本地交通灯项目,接入WiFi连上云端,本地红绿灯状态上传云端,云端显示,云端远程控制红绿灯。

开发套件已收到:星闪派物联网开发套件x1,星闪派物联网开发板x1
0001.jpg
套件介绍参考试用连接:https://bbs.elecfans.com/try_HiHope.html

开箱:

套件中有:星闪开发板,5个模块,1个底板,1条数据线
0002.jpg

单独的星闪派开发板:
0003.jpg

全家福:
0004.jpg

硬件组装:

星闪派物联网开发套件,模块化、集成化,各功能模块已集成到小电路板上,通过底板互联,不同组合实现不同功能。

比如:

  • 星闪开发板+底板+红绿灯模块,实现交通灯硬件部分。
  • 星闪开发板+底板+人体传感器led模块,实现自动化灯光控制硬件部分。
  • 星闪开发板+底板+气体烟雾传感器,实现空气监测烟雾监测硬件部分。

OLED显示模块百搭,显示传感器信息,红绿灯状态等
模块化硬件,组装方便快捷,对软件开发人员十分友好

本项目使用星闪开发板+底板+红绿灯模块+OLED模块组合
0006.jpg

软件开发环境搭建:

参考海思社区gitee网页的方法:
0007.png
0008.png

链接:https://gitee.com/HiSpark/
链接:https://gitee.com/HiSpark/fbb_ws63

软件开发环境:windows 系统
软件开发工具:hispark studio,类似 vscode 界面
image.png
软件烧录工具:hispark studio 集成,不用单独安装
软件版本管理工具:git,自己下载windows版本。wsl 中的ubuntu git工具运行很慢,换 windows git 工具快很多。

创建工程,也参考上面海思社区gitee网页的方法

本地交通灯视频

已调通红绿灯模块,OLED显示模块,实现本地红绿灯控制,OLED显示红绿灯状态,如文章开头视频

回帖(10)

zhangfen137

2024-10-15 16:51:11

智能****交通灯本地控制逻辑的实现:


因为ws63 星闪派开发板运行的 RTOS 系统,本项目创建以下 6 个进程/任务实现红绿灯控制逻辑。系统运行时许如下
image.png

1,按键进程:初始化按键为中断模式,按下按键发出信号。Beep进程能收到,红绿灯主进程也能收到


2,beep进程:收到按键按下信号,发出pwm调制的方波信号,驱动无源蜂鸣器响。
image.png


3,红绿灯进程:收到按键按下信号,切换红绿灯闪烁模式,一共有四种模式:红绿灯交替闪烁模式,黄灯闪烁模式,红绿黄灯全亮,全灭。四种模式循环切换


4,红绿灯交替闪烁子进程:依次点亮绿-黄-红,交替亮起,循环下去


5,黄灯闪烁子进程:黄灯闪烁


6,oled显示进程:把oled显示缓存写入oled模块,周期性循环刷新。
image.png


红绿灯主进程,和两个子进程,控制红绿灯模式,红绿灯开关,同时也会把模式,红绿灯状态信息写入oled显示缓存。Oled显示进程刷新后,oled实时显示模式和状态


举报

zhangfen137

2024-10-15 18:51:38

智能交通灯,云端部分


要实现的功能:

1,把本地交通灯状态推送到云端,云端可查看。

2,云端可以下发指令,远程控制本地交通灯。实现本地到云端,双向通信。


本项目,星闪派开发板不直接连接云端。

先接入阿里云网关,再通过阿里云网关和阿里云同步。


网络拓扑如下图:
image.png


通信数据流:


  • 智能交通灯/星闪开发板 >> wifi >> 阿里云网关

  • 阿里云网关>> wifi >> 无线路由器 >> 宽带 >> 阿里云

阿里云服务器


到阿里官网开物联网服务器,开通等一会就能用:
image.png


打开实例,创建产品:
image.png


在产品下面创建设备:
image.png


编辑产品物模型:
image.png


这个主灯亮度模块,可以满足需求,选这个


稍后阿里云网关上传数据,上传到这里,下发指令,也用这个属性


举报

zhangfen137

2024-10-15 19:05:47

阿里云网关


阿里云网关,基于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

阿里云网关,开发和调试


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


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 举报

更多回帖

发帖
×
20
完善资料,
赚取积分