接收节点无线广播发送的数据,并printf打印出来(含核心代码)_物联网挑战赛第四届第一题

简介: 接收节点无线广播发送的数据,并printf打印出来(含核心代码)_物联网挑战赛第四届第一题

目录


题目

赛题

格式说明

计分规则

评分步骤

题目解析

右上角节点代码解析

其余11个节点代码解析

比赛时的思考

具体解析

核心代码

右上角节点代码

其余11个节点代码


正文


题目


赛题


00000.png

数据广播节点—>

如图所示,平台节点不安装天线,12 个节点 ID 号随机,左上角的节点作为数据广播节

点,每隔 1 秒往外重复广播负载为 1 个字节的数据包(该广播代码由组委会提供),参赛队

需编写其他 11 个节点的代码,在考虑多跳传输的情况下,获取到该广播包的负载,最终 11

个节点通过 printf 语句将该负载打印到平台,从而表明任务的完成。


1) 11 个节点只允许编写一份代码,代码中可通过宏 TOS_NODE_ID 获取自身 ID 号;

2)本题开销指的是除左上角节点外的另外 11 个节点无线通信发送数据包的总和;

3)左上角节点代码由组委会提供,参赛队可自行查阅和修改负载内容(不可修改格式)

以验证代码;

4)左上角节点烧录完成 10 秒后停止评分,参赛队需在 10 秒内完成数据包的发送;

5)广播的数据为同一数据,参赛队无需多次接收并转发,多次转发时需考虑其造成的

网络开销;

6)参赛队编写的和结果无关的 printf 调试语句,必须在最终代码中注释掉,以免造成

最终结果输出错误。


格式说明


1)左上角广播的数据包的负载为一个字节,示例如下:

00 FF FF 00 00 01 00 06 12

前 8 个字节 00 FF FF 00 00 01 00 06 固定,后 1 个字节 12 为随机的某字节,参赛队

需编写代码接收此结构的数据包;

2) Printf 输出的格式为:标志位(Data)+1 个字节负载(十进制,并以空格隔开,结

尾应加上换行符“In”以表明语句的完结)

广播数据包:00 FF FF 00 00 01 00 06 12

正确的输出结果:Data 18

注意:输出的结果应完整正确,数据必须以十进制输出,例如上述示例的 0x12 的

十进制为 18;

3)每个节点的结果可重复输出,计分时只会以每个节点最后一组含有标志位 Data 的

行作为判分依据;


计分规则


本赛题满分为 30 分,其中正确性得分 22 分,开销得分 8分;

1)正确性得分:共 22 分,正确性得分不少于 14 分才可以获得开销分;

正确性得分        (m≥7)

m 为 11 个节点正确输出结果的数量

2)开销得分:共 8 分,开销超过 50 得分 0 分,小于 50 按如下公式如下:

开销得分       (0<n<50)

n 为 11 个节点的开销总和


评分步骤


1)烧录 Null程序,清空节点状态;

2)编译烧录参赛队代码(参赛队的 11 个节点);

3)对 11 个节点进行 printf 监听;

4)烧录左上角数据广播节点代码,烧录完成后,开始计时;

5) 10 秒后停止监听,核实各节点的输出结果和开销量,计算出得分;


题目解析


由题目可知,右上角的节点是由主委会给出的,但因为我们这是平时练习,所以右上角节点的无线发送数据的代码,也由我们自己来写吧。


右上角节点代码解析


由题意可知,右上角这个节点,是个工具节点,其目的就是给其余11个节点每隔一秒发一个固定数据包,所以我们只需要用到无线通信的发包函数就可,再用一个定时器每隔1000毫秒调用以下无线发包函数,就完成啦。


其余11个节点代码解析


比赛时的思考


这11个节点的代码也很简单,但我们比赛更要注意分数,在每个节点都完成任务的同时,要使发包数达到最小,才算胜利。而这道题目,这11个节点根本不用发包,也能完成任务。


具体解析


只需要用到无线接收函数即可。先定义一个与右上角发送数据包同类型的结构体,这个结构体在收包的时候进行判断是否是我们需要的数据包,判断成功后,printf打印出来即可。这里不用限制打印次数,反正发包数还是为0。


核心代码


右上角节点代码


event void MilliTimer.fired() {
    if (locked) {    //锁机制的实现AMSend.sendDone判断发包正确后,会解除锁机制
        return;
    }
    else {
        radio_count_msg_t* rcm = (radio_count_msg_t*)call Packet.getPayload(&packet, sizeof(radio_count_msg_t));    //rcm指向packet的负载
        if (rcm == NULL) {
            return;
        }
        //如果负载不为空,就将counter的值赋值给rcm->counter
        rcm->counter = 0x16;        //定义发包的内容
        //AM_BROADCAST_ADDR:无线通信中,代表广播
        //如果改成  0x01,那就是向1号节点发送单播
        if (call AMSend.send(AM_BROADCAST_ADDR, &packet, sizeof(radio_count_msg_t)) == SUCCESS) {    //无线发包
            locked = TRUE;                                                                                //打开锁机制 ,锁住后,转到senddone
        }
    }
}


其余11个节点代码


event message_t* Receive.receive(message_t* bufPtr, void* payload, uint8_t len) {    //节点接收数据,无线收包
    if (len != sizeof(radio_count_msg_t)) {return bufPtr;}    //判断是否是我想要的包
    else {                                                    //如果是我想要的包
    radio_count_msg_t* rcm = (radio_count_msg_t*)payload;    //rcm指向包的负载
    //如果rcm->counter == 1,那么 1 & 0x1 == 0x1,所以LED0会亮,以下同理
    printf("Data %d",rcm->counter);
    printfflush();
    return bufPtr;
    }
}
相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
7月前
|
传感器 数据采集 算法
无线传感器网络(WSN)在物联网中的作用
【6月更文挑战第7天】物联网中的无线传感器网络(WSN)正加速发展,它由微型传感器节点组成,用于环境数据感知和传输。WSN助力实时监测(如农业、工业生产)、资源管理(能源和物流)、智能交通等领域,提供关键数据支持。Python代码示例展示了数据采集和传输过程。尽管面临能量限制和网络挑战,WSN在物联网中的角色不可或缺,将持续推动社会智能化和可持续发展。
286 2
|
13天前
|
SQL 存储 运维
从建模到运维:联犀如何完美融入时序数据库 TDengine 实现物联网数据流畅管理
本篇文章是“2024,我想和 TDengine 谈谈”征文活动的三等奖作品。文章从一个具体的业务场景出发,分析了企业在面对海量时序数据时的挑战,并提出了利用 TDengine 高效处理和存储数据的方法,帮助企业解决在数据采集、存储、分析等方面的痛点。通过这篇文章,作者不仅展示了自己对数据处理技术的理解,还进一步阐释了时序数据库在行业中的潜力与应用价值,为读者提供了很多实际的操作思路和技术选型的参考。
24 1
|
5月前
|
物联网 数据管理 Apache
拥抱IoT浪潮,Apache IoTDB如何成为你的智能数据守护者?解锁物联网新纪元的数据管理秘籍!
【8月更文挑战第22天】随着物联网技术的发展,数据量激增对数据库提出新挑战。Apache IoTDB凭借其面向时间序列数据的设计,在IoT领域脱颖而出。相较于传统数据库,IoTDB采用树形数据模型高效管理实时数据,具备轻量级结构与高并发能力,并集成Hadoop/Spark支持复杂分析。在智能城市等场景下,IoTDB能处理如交通流量等数据,为决策提供支持。IoTDB还提供InfluxDB协议适配器简化迁移过程,并支持细致的权限管理确保数据安全。综上所述,IoTDB在IoT数据管理中展现出巨大潜力与竞争力。
131 1
|
2月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
2月前
|
传感器 安全 算法
物联网发布者在数据传输过程中如何防止数据被篡改
在物联网数据传输中,为防止数据被篡改,可采用加密技术、数字签名、数据完整性校验等方法,确保数据的完整性和安全性。
|
2月前
|
存储 安全 算法
物联网发布者在发送数据时如何保证数据的安全性和完整性
数据加密、密钥管理和数据完整性验证是物联网安全的重要组成部分。对称加密(如AES)和非对称加密(如RSA)分别适用于大量数据和高安全需求的场景。密钥需安全存储并定期更新。数据完整性通过MAC(如HMAC-SHA256)和数字签名(如RSA签名)验证。通信协议如MQTT over TLS/SSL和CoAP over DTLS增强传输安全,确保数据在传输过程中的机密性和完整性。
|
5月前
|
存储 传感器 监控
理解并利用物联网(IoT)数据的技术探索
【8月更文挑战第11天】物联网数据是数字化转型的重要资源。通过深入理解物联网数据的特性和价值,并采取有效的收集、处理和分析策略,我们可以更好地利用这些数据为企业决策提供支持、优化运营效率、创造新的商业模式并推动数字化转型的深入发展。
|
6月前
|
物联网
好的资源链接,gitee全糖咖啡,B站视频转成mp4,全糖咖啡 / 物联网网关数据上传,,全糖咖啡 / springboot+百度智能车牌检测
好的资源链接,gitee全糖咖啡,B站视频转成mp4,全糖咖啡 / 物联网网关数据上传,,全糖咖啡 / springboot+百度智能车牌检测
|
6月前
|
边缘计算 运维 安全
云上物联网边缘节点:重塑连接智能世界的桥梁
结语 云上物联网边缘节点作为物联网技术的重要组成部分,正以其独特的优势和潜力推动着物联网的快速发展。面对未来的机遇和挑战,我们需要不断创新和完善边缘节点的技术架构和应用模式,推动物联网技术的深度融合和广泛应用,为构建智慧社会贡献力量。
162 0
|
2月前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
118 50

热门文章

最新文章

相关产品

  • 物联网平台