项目分享|基于ELF 1S开发板完成的物联网开源项目

news2024/11/26 2:38:56

ElfBoard作为飞凌嵌入式旗下教育品牌,自成立以来,持续吸引着各界的瞩目,其中也赢得了一些工程师的青睐。今天,就和各位小伙伴分享一位杰出工程师借助ELF 1S开发板完成的嵌入式物联网项目,见证智慧与技术的火花。

关于这个项目的思维导图,如下图所示:

图片

接下来,将会从云-网-边-端的物联网体系架构出发,描述整个开源项目的开发过程,整个开源项目的系统框架,如下图所示:

图片

1 – 云(涂鸦云服务器)

开源项目是采用涂鸦云作为云服务器的,之所以采用涂鸦云,主要是涂鸦的IoT生态体系很友好,并且对于初学者来说涂鸦云的学习门槛和接入门槛是比较低的,无需企业账号,无需太高的设备购买费用,即可接入涂鸦云。

ELF 1S开发板边缘中控是通过Tuya Link SDK接入云服务器的,这个SDK采用标准的C语言进行编写,移植的时候非常方便,具体可以参考官方提供的移植文档。

在涂鸦云服务器上建立好产品,完成功能定义,完成设备交互面板设计,移植完Tuya Link SDK,等一系列操作后,就可以让ELF 1S开发板具备接入云服务器的能力。

产品建成后,具体的功能定义如下图所示:

图片

2 – 网(Wi-Fi无线连接)

要让ELF 1S开发板接入云服务器,就要先让开发板的硬件具备连接互联网的能力,接入互联网的方式有:4G网络,Wi-Fi无线连接,RJ45有线网络连接,这几种方式都可以选用,由于ELF 1S开发板默认板载了一个RTL8723DU1 无线Wi-Fi模块,因此,本项目选用Wi-Fi无线连接方式,让开发板接入互联网。

十分方便的是,ElfBoard官方已经提供了一个联网脚本,elf1_cmd_wifi.sh,应用程序开发工程师可以很方便地调用这个脚本进行互联网链接,对于使用嵌入式Linux+Qt开发的应用程序,ElfBoard官方也提供了参考例程,程序开发的时候直接参考使用即可。

本项目关于Wi-Fi联网的部分参考代码,如下图所示:

图片

3 – 边(ELF 1S开发板中控)

边缘计算设备(边缘中控)采用ELF 1S开发板进行设计,运行嵌入式Linux操作系统,采用Qt进行UI界面开发,应用程序采用C/C++语言进行编写。

边缘计算设备(边缘中控)通过一个USB无线扩展模块,与端侧设备进行无线通信。

USB无线扩展模块支持AT指令集,支持从机设备管理,支持控制命令透传,等等。感兴趣的小伙伴还可以修改这个扩展模块的固件(代码已开源),让其扩展更多创意的功能。

图片

整个边缘计算设备的Qt应用程序,共提供了5个应用界面,初学者可以在这5个应用程序界面,自由扩展自己的创意想法,以下是这5个应用界面的功能介绍。

图片

界面1

界面1是一个电器控制界面,通过这个界面,可以对端侧的电器设备进行无线控制,比如RGB三色灯的开关和亮度调节,灯光总开关的控制,远程继电器开关的控制,等等。当端侧无线设备有按键事件触发的时候,可以即时把按键值通过无线方式上报到边缘中控设备,并把按键事件在信息窗口进行显示。

图片

界面2

界面2是一个环境监测界面,在这个界面,可以把开发板上面的温湿度传感器数据(客厅是实际值,卧室是模拟值)和环境亮度数据在界面上面实时显示出来,这个界面还可以扩展到土壤数据监测,空气颗粒物监测,环境噪声监测,等等。

图片

界面3

界面3是一个云服务器连接界面,通过【连接涂鸦云】按钮,把边缘中控ELF 1S开发板接入涂鸦云服务器,然后通过手机端【智能生活APP】扫描二维码,即可完成手机APP与设备的绑定操作,并且在信息窗口显示连接状态,手机APP通过云端转发的控制指令,也可以实时在信息窗口进行显示。

ELF 1S开发板边缘中控还可以把手机APP的控制指令转发到无线端侧设备执行,也可以把环境监测里面的传感器数据,上报到云服务器,然后在手机APP界面进行实时显示。

图片

界面4

界面4是一个有线网络界面,这个界面实现了一个远程抄写电表数据的功能,通过RS485总线和Modbus-RTU软件协议,让ELF 1S开发板边缘中控连接一个虚拟电表,虚拟电表的用电数据不断更新(模拟用电过程),然后实现电表数据的实时读取,并在信息窗口进行显示。

图片

界面5

界面5是ELF 1S开发板边缘中控的参数设置界面,在这个界面里面,可以对开发板边缘中控本身进行程序升级(未完成),同步网络时间,设置USB无线模块,端侧从机扫描,以及重置USB无线模块,开发者还可以在这个界面扩展更多有趣好玩的参数配置功能。

4 – 端(采集与执行设备)

端侧设备主要是以下三种类型的设备:支持Modbus-RTU协议的有线从机设备,具备2.4GHz/433MHz无线通信功能的网络模块,以及手机APP应用程序。

关于Modbus-RTU的有线从机设备,可以使用电脑端的Modbus-Slave软件进行虚拟,Modbus-Slave软件是一款精美小巧的Modbus-RTU从机调试软件,使用它可以虚拟出任何支持Modbus协议的从机设备,具体软件界面如下图所示:

图片

关于无线网络模块,它支持继电器开关、RGB三色灯、按键事件等功能,具体可以参考文章最下方的资料文档《key_rgb_relay_board硬件说明文档.pdf》。

图片

除了以上两种端侧设备之外,手机APP应用程序,也是属于端侧显示设备。手机APP应用是通过涂鸦云的间接转发方式,与ELF 1S开发板边缘中控进行端对端通信的,开发板边缘中控可以转发手机APP的控制指令到无线网络模块,以及接收边缘中控上报的环境监测数据。

图片

整个项目已经开源到Gitee,欢迎各位嵌入式初学者或爱好者进行 Fork 和 Star ,项目的开源地址:

https://gitee.com/embediot/elfboard-iot-project

(复制到浏览器打开)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1669401.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、计算机基础(Java零基础二)

🌻🌻目录 一、认识计算机二、计算机的组成2.1 计算机硬件(摸得着,看得见)2.1.1 计算机硬件组成2.1.2 冯.诺依曼(计算机之父)体系结构 2.2 计算机软件(摸不着,看不见) 三、电脑常用快…

LVDS 源同步接口

传统数据传输通常采用系统同步传输方式,多个器件基于同一时钟源进行系统同步,器件之间的数据传输时序关系以系统时钟为参考,如图1所示。系统同步传输方式使各器件处于同步工作模式,但器件之间传输数据的传输时延难以确定&#xff…

Remix 集成 MUI

Remix 如何接入 MUI 组件库,MUI 官网提供了一个 Remix 接入 MUI 的例子,用的是老的 Remix版本,如何接入新的 Vite 版本呢? 由于 MUI 支持 SSR,只需要改造对应的 Client 和 Server 即可实现。安装 MUI 组件组件库&…

实现字符串复制(C语言)

一、N-S流程图&#xff1b; 二、运行结果&#xff1b; 三、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int i 0;char a[100], b[100];//获取字符串&#xff1b;printf("请为数组a输入字符串…

如何在外网访问内网共享文件?

在日常工作和生活中&#xff0c;我们经常会遇到外网访问内网共享文件的需求。我们可能需要远程访问公司内部的共享文件夹&#xff0c;或者与不同地区的合作伙伴共享文件。由于网络安全的限制&#xff0c;外网访问内网的共享文件并不是一件容易的事情。 为了解决这个问题&#x…

java项目之车辆管理系统(springboot+vue+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的车辆管理系统。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 车辆管理系统的主要使用者分…

Python 旋转立方体

文章目录 效果图运行环境完整代码实现思路1. 导入库和定义常量2. 创建Cube类3. 实现Cube类的draw方法4. 实现主函数 效果图 运行环境 python版本&#xff1a;python3.x 依赖包&#xff1a; $ pip install pygame $ pip install numpy完整代码 import numpy as np # 导入 N…

【YOLOv8模型网络结构图理解】

YOLOv8模型网络结构图理解 1 YOLOv8的yaml配置文件2 YOLOv8网络结构2.1 Conv2.2 C3与C2f2.3 SPPF2.4 Upsample2.5 Detect层 1 YOLOv8的yaml配置文件 YOLOv8的配置文件定义了模型的关键参数和结构&#xff0c;包括类别数、模型尺寸、骨干&#xff08;backbone&#xff09;和头部…

单调栈问题

原理 单调栈的核心原理是&#xff1a;在栈内保持元素的单调性&#xff08;递增或递减&#xff09; 单调递增栈&#xff1a; 用于处理“下一个更小的元素”问题。当新元素比栈顶元素小或等于时&#xff0c;直接入栈&#xff1b;否则&#xff0c;一直从栈顶弹出元素&#xff0c…

会声会影2024中文汉化补丁器附免费激活码序列号

会声会影是一款由加拿大Corel公司发布的视频编辑软件&#xff0c;它以其功能丰富和用户友好的界面而闻名。会声会影2024是该系列的最新版本&#xff0c;它不仅继承了之前版本的强大功能&#xff0c;还引入了一系列新的特性和工具&#xff0c;使得视频编辑更加简单、高效且富有创…

【简单讲解下Fine-tuning BERT】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

【图解计算机网络】TCP 重传、滑动窗口、流量控制、拥塞控制

TCP 重传、滑动窗口、流量控制、拥塞控制 TCP 重传超时重传快速重传 滑动窗口流量控制拥塞控制慢启动拥塞避免拥塞发生快速恢复 TCP 重传 TCP重传是当发送的报文发生丢失的时候&#xff0c;重新发送丢失报文的一种机制&#xff0c;它是保证TCP协议可靠性的一种机制。 TCP重传…

【Oracle篇】rman物理备份工具的基础理论概述(第一篇,总共八篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&am…

试衣不再有界:Tunnel Try-on开启视频试衣应用新纪元

论文&#xff1a;https://arxiv.org/pdf/2404.17571 主页&#xff1a;https://mengtingchen.github.io/tunnel-try-on-page/ 一、摘要总结 随着虚拟试衣技术的发展&#xff0c;消费者和时尚行业对于能够在视频中实现高质量虚拟试衣的需求日益增长。这项技术允许用户在不实际穿…

云计算十三课

centos安装 点击左上角文件 点击新建虚拟机 点击下一步 点击稍后安装操作系统&#xff0c;下一步 选择Linux&#xff08;l&#xff09;下一步 设置虚拟机名称 点击浏览选择安装位置 新建文件夹设置名称不能为中文&#xff0c;点击确定 点击下一步 设置磁盘大小点击下一步…

修改MTU值解决Linux下运行top命令卡死问题

上周明月的Linux服务器上运行top命令总是莫名的出现卡死现象&#xff0c;甚至是CtrlC都无法终止进程&#xff0c;今天终于抽空找到了解决办法&#xff0c;原来是需要修改Linux的MTU值&#xff0c;将服务器操作系统数据包调小&#xff0c;加上VxLAN数据包小于1500即可。 top命令…

HCIP【BGP综合实验】

目录 一、实验拓扑图&#xff1a; 二、实验要求&#xff1a; 三、实验思路&#xff1a; 四、实验步骤&#xff1a; 1、进行网段的子网划分&#xff08;整个实验总共有19条网段&#xff09;&#xff1a; (1)首先&#xff0c;根据实验要求&#xff0c;将172.16.0.0/16全部划…

英伟达发布AM-RADIO高效视觉基础模型,推理速度提升6倍,性能超CLIP、DINOv2、SAM

前言 近年来&#xff0c;视觉基础模型 (VFM) 在众多下游任务中取得了巨大成功&#xff0c;例如图像分类、目标检测和图像生成等。然而&#xff0c;现有的 VFM 通常专注于特定领域&#xff0c;例如 CLIP 擅长零样本视觉语言理解&#xff0c;DINOv2 擅长语义分割&#xff0c;SAM…

C控制语句:分支和跳转

1.1if语句 //colddays.c --找出0摄氏度以下的天数占总天数的百分比 #include <stdio.h>int main(void) {const int FREEZING 0;float temperature;int cold_days 0;int all_days 0;printf("Enter the list of daily low temperature.\n");printf("Use…

C++内存管理new/delete和new[ ]/delete[ ]

1.c/c内存分布 首先看一段代码 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd";const char* pChar3 "abcd"; //这里不加const会导致…