首页 游戏 软件 资讯 排行榜 专题
首页
科技数码
SpringBoot与Californium整合,实现物联网设备低功耗通信系统

SpringBoot与Californium整合,实现物联网设备低功耗通信系统

热心网友
27
转载
2025-12-15

CoAP是一种专门为物联网设备设计的轻量级协议,特别适用于资源受限的环境。它通过简单的二进制消息格式、高效的传输机制和RESTful架构,使得在低带宽、高延迟和不可靠网络条件下进行通信变得容易。

CoAP是一种专门为物联网设备设计的轻量级协议,特别适用于资源受限的环境。它通过简单的二进制消息格式、高效的传输机制和RESTful架构,使得在低带宽、高延迟和不可靠网络条件下进行通信变得容易。

哪些公司使用Californium?

Intel Corporation在其 IoT 平台和开发工具中集成 Californium 以支持 CoAP 协议。IBM利用 Californium 在其 IoT 和边缘计算解决方案中实现高效的数据传输。西门子使用 Californium 在其 IoT 解决方案中实现低功耗设备的通信。Bosch Rexroth利用 Californium 支持其工业 IoT 应用程序中的 CoAP 通信。Infineon Technologies 在其嵌入式系统和 IoT 解决方案中集成 Californium 以支持 CoAP 协议。爱立信在其 IoT 平台中使用 Californium 实现高效的设备间通信。Texas Instruments Inc.提供基于 Californium 的开发套件和示例代码,助力开发者构建 IoT 应用。ABB Ltd.在其智能制造解决方案中利用 Californium 实现高效的数据交换和控制。Cisco Systems, Inc.在其 IoT 平台上使用 Californium 实现低延迟和可靠的设备通信。

Californium的特点

轻量级: 适合资源受限的设备。可靠传输: 支持确认消息(CON)、非确认消息(NON)和重置消息(RST)。多播支持: 允许向一组设备发送请求。观察机制: 客户端可以订阅资源变化,实时接收更新。安全性: 支持DTLS(Datagram Transport Layer Security)加密。RESTful架构: 使用HTTP方法(GET, POST, PUT, DELETE),便于与现有Web服务集成。

Californium的核心组件

CoapClient: 用于创建CoAP客户端,发送请求并处理响应。CoapServer: 用于创建CoAP服务器,处理来自客户端的请求。CoapResource: 定义CoAP资源,处理特定路径上的请求。CoapExchange: 提供请求和响应的上下文,便于处理具体业务逻辑。

代码实操

org.springframework.boot spring-boot-starter-web org.eclipse.californium californium-spring-boot-starter-server 2.6.0 org.springframework.boot spring-boot-starter-data-jpa mysql mysql-connector-java runtime

application.properties

# MySQL 数据库配置spring.datasource.url=jdbc:mysql://localhost:3306/iot_db?useSSL=false&serverTimezone=UTCspring.datasource.username=rootspring.datasource.password=rootpasswordspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver# Hibernate 配置spring.jpa.hibernate.ddl-auto=updatespring.jpa.show-sql=truespring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

Device实体类

package com.example.coapserver.entity;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublicclass Device { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // 设备ID,自增主键 private String deviceId; // 设备唯一标识符 private String type; // 设备类型 privatedouble temperature; // 温度数据 privateboolean active; // 设备是否激活 // Getter 和 Setter 方法 public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getDeviceId() { return deviceId; } public void setDeviceId(String deviceId) { this.deviceId = deviceId; } public String getType() { return type; } public void setType(String type) { this.type = type; } public double getTemperature() { return temperature; } public void setTemperature(double temperature) { this.temperature = temperature; } public boolean isActive() { return active; } public void setActive(boolean active) { this.active = active; }}

仓库接口

package com.example.coapserver.repository;import com.example.coapserver.entity.Device;import org.springframework.data.jpa.repository.JpaRepository;public interface DeviceRepository extends JpaRepository { Device findByDeviceId(String deviceId); // 根据设备ID查找设备}

Controller

package com.example.coapserver.controller;import com.example.coapserver.entity.Device;import com.example.coapserver.repository.DeviceRepository;import org.eclipse.californium.core.CoapHandler;import org.eclipse.californium.core.CoapResponse;import org.eclipse.californium.spring.annotation.CoapController;import org.eclipse.californium.spring.annotation.CoapGetMapping;import org.eclipse.californium.spring.annotation.CoapObserveRelation;import org.eclipse.californium.spring.annotation.CoapPutMapping;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.http.HttpStatus;import org.springframework.http.ResponseEntity;import org.springframework.web.bind.annotation.*;import java.util.List;import java.util.Optional;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.atomic.AtomicInteger;@RestController@CoapController@RequestMapping("/api")publicclass SensorDataController { privatestaticfinal Logger logger = LoggerFactory.getLogger(SensorDataController.class); @Autowired private DeviceRepository deviceRepository; // 注入设备仓库 // 存储传感器数据的并发哈希映射 private ConcurrentHashMap sensorDataMap = new ConcurrentHashMap<>(); private AtomicInteger observeCounter = new AtomicInteger(0); // 观察计数器 /** * 注册新设备 * * @param device 要注册的设备对象 * @return 注册结果 */ @PostMapping("/register") public ResponseEntity registerDevice(@RequestBody Device device) { if (deviceRepository.findByDeviceId(device.getDeviceId()) != null) { returnnew ResponseEntity<>("设备已注册", HttpStatus.BAD_REQUEST); } device.setActive(true); deviceRepository.save(device); logger.info("注册设备: {}", device.getDeviceId()); returnnew ResponseEntity<>("设备注册成功", HttpStatus.CREATED); } /** * 更新传感器数据 * * @param sensorId 传感器ID * @param payload 数据负载(温度值) */ @CoapPutMapping("/sensors/{sensorId}") public void updateSensorData(@PathVariable String sensorId, byte[] payload) { String dataStr = new String(payload); try { double data = Double.parseDouble(dataStr); Optional deviceOpt = Optional.ofNullable(deviceRepository.findByDeviceId(sensorId)); if (deviceOpt.isPresent()) { Device device = deviceOpt.get(); device.setTemperature(data); deviceRepository.save(device); sensorDataMap.put(sensorId, data); logger.info("收到传感器 {} 的数据: {}", sensorId, data); checkAndAlert(sensorId, data); observeCounter.incrementAndGet(); // 触发观察者通知 } else { logger.warn("未知的传感器ID: {}", sensorId); } } catch (NumberFormatException e) { logger.error("传感器 {} 的数据格式无效: {}", sensorId, dataStr); } } /** * 获取传感器数据 * * @param sensorId 传感器ID * @return 传感器数据 */ @CoapGetMapping("/sensors/{sensorId}") public String getSensorData(@PathVariable String sensorId) { return sensorDataMap.getOrDefault(sensorId, "无数据").toString(); } /** * 提供一个可观察的资源,用于实时订阅传感器状态的变化 * * @return 观察计数器值 */ @CoapObserveRelation @CoapGetMapping("/observe") public String observeSensors() { int count = observeCounter.get(); logger.info("观察传感器,计数器: {}", count); return String.valueOf(count); // 返回计数器值以触发观察者通知 } /** * 获取所有已注册的设备信息 * * @return 设备列表 */ @GetMapping("/devices") public List getAllDevices() { return deviceRepository.findAll(); } /** * 检查温度并触发警报 * * @param sensorId 传感器ID * @param temperature 温度值 */ private void checkAndAlert(String sensorId, double temperature) { if (temperature > 30.0) { logger.warn("高温警报:传感器 {} 的温度为 {}°C", sensorId, temperature); // 在这里可以添加发送警报的通知逻辑 } }}

Application

package com.example.coapserver;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class CoapServerApplication { public static void main(String[] args) { SpringApplication.run(CoapServerApplication.class, args); }}

测试

为了测试CoAP协议,我们可以使用Californium提供的命令行工具来发送CoAP请求。

我已经安装Californium CLI工具。你也可以从Californium GitHub仓库 (https://github.com/eclipse/californium)下载并编译。很简单的!

更新传感器数据

cf-cli put coap://localhost:5683/api/sensors/sensor1 --payload "25.5"

输出:

Sending PUT request to coap://localhost:5683/api/sensors/sensor1Response from coap://localhost:5683/api/sensors/sensor1:Code: 2.04 ChangedPayload:

获取传感器数据

cf-cli get coap://localhost:5683/api/sensors/sensor1

输出:

Sending GET request to coap://localhost:5683/api/sensors/sensor1Response from coap://localhost:5683/api/sensors/sensor1:Code: 2.05 ContentOptions: [Content-Format:text/plain]Payload: 25.5


来源:https://www.51cto.com/article/811519.html
免责声明: 游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关攻略

Spring Boot YAML配置文件加密方法详解
网络安全
Spring Boot YAML配置文件加密方法详解

SpringBoot项目中,敏感数据直接写入配置文件存在泄露风险。通过集成Jasypt工具,可对YAML文件中的密码、密钥等信息进行加密。具体步骤包括添加依赖、生成并妥善保管加密密钥、使用ENC()包裹密文、配置解密密钥,并在主类添加@EnableEncryptableProperties注解。应用启动时将自动解密,从而安全地管理配置,兼顾便利与安全性。

热心网友
05.06
spring properties文件可以加密吗
网络安全
spring properties文件可以加密吗

SpringProperties文件可加密以保护敏感信息。主流方法包括借助外部工具加密文件后启动时解密,或利用框架注解对特定属性标记并自动解密。加密能有效防止数据库密码等密钥明文存储导致的泄露风险,是重要的安全实践。

热心网友
05.06
Spring Properties配置文件如何实现加密保护
网络安全
Spring Properties配置文件如何实现加密保护

SpringProperties支持加密敏感信息。通过Jasypt库,可在配置文件中以特定语法标记加密属性,保障存储与传输安全。集成到SpringBoot后,应用启动时自动解密,业务代码无需感知。该方案轻量且非侵入,能有效提升应用安全性。

热心网友
05.06
spring security如何防范常见攻击
网络安全
spring security如何防范常见攻击

Spring Security:构筑Ja va应用安全的坚实盾牌 在构建企业级Ja va应用时,安全绝非可选项,而是基石。Spring Security正是为此而生的强大框架,它提供了一套高度可定制化的安全解决方案,能够系统性地抵御多种常见的网络威胁。下面这张图清晰地概括了它的核心防御领域: 具体来

热心网友
04.29
2026年你以为会写 Java 就够了?这十个底层认知,决定你天花板在哪
业界动态
2026年你以为会写 Java 就够了?这十个底层认知,决定你天花板在哪

别再把问题归咎于框架,很多坑其实早就写在基础里 做Ja va开发这些年,一个反复出现的场景总让人印象深刻: 系统上线后突然变慢、某个接口时好时坏、对象状态莫名其妙“丢了”、或者从Map里死活取不出值来…… 遇到这种事,第一反应往往是去翻框架文档:是不是Spring Boot配置不对?是不是微服务调用

热心网友
04.22

最新APP

宝宝过生日
宝宝过生日
应用辅助 04-07
台球世界
台球世界
体育竞技 04-07
解绳子
解绳子
休闲益智 04-07
骑兵冲突
骑兵冲突
棋牌策略 04-07
三国真龙传
三国真龙传
角色扮演 04-07

热门推荐

AI Agent能力进化平台 水产市场实用技能全解析
AI资讯
AI Agent能力进化平台 水产市场实用技能全解析

水产市场是什么 在AI Agent的生态中,能力共享与协同进化是核心驱动力。水产市场(Seafood Market)正是为OpenClaw框架量身打造的AI Agent能力共享平台。你可以将其理解为AI领域的“应用商店”或“技能交易中心”,旨在实现AI能力的快速流通与组合创新。 目前,平台已集成超过

热心网友
05.24
MeowTXT AI音视频转文字工具 智能识别说话人
AI资讯
MeowTXT AI音视频转文字工具 智能识别说话人

在信息爆炸的时代,高效地将音视频内容转化为可编辑、可检索的文字,已经成为内容创作者、研究者和职场人士的刚需。今天要聊的这款工具——MeowTXT,正是瞄准了这一痛点,它不仅仅是一个简单的转录工具,更是一个集成了智能识别、摘要和翻译的AI生产力平台。 MeowTXT是什么 简单来说,MeowTXT是一

热心网友
05.24
开源AI Agent操作系统OpenFang自动执行完整工作流
AI资讯
开源AI Agent操作系统OpenFang自动执行完整工作流

OpenFang是什么 在AI Agent领域,我们常常面临一个困境:大多数系统仍然停留在“你说一句,它动一下”的被动模式,离真正的自动化还有距离。今天要聊的OpenFang,正是在尝试打破这个局面。它是一个用Rust语言构建的开源Agent操作系统,其核心创新在于引入了“Hands”的概念——你可

热心网友
05.24
腾讯混元开源全模态大模型压缩工具包AngelSlim详解
AI资讯
腾讯混元开源全模态大模型压缩工具包AngelSlim详解

AngelSlim是什么 随着大模型参数规模不断增长,如何实现高效推理与低成本部署已成为开发者面临的核心挑战。腾讯混元团队推出的开源工具包AngelSlim,正是为解决这一难题而生。它是一个面向全模态大模型的综合压缩与加速解决方案,集成了量化、投机采样、稀疏化及知识蒸馏等前沿技术,旨在为各类大语言模

热心网友
05.24
AI音视频转录工具Transcript LOL 智能区分说话人
AI资讯
AI音视频转录工具Transcript LOL 智能区分说话人

在信息过载的数字化时代,音频与视频内容已成为知识传递、创意表达与商业沟通的核心载体。然而,如何将这些宝贵的非结构化媒体资产,高效、精准地转化为可搜索、可分析、可编辑的文本格式,始终是内容创作者、市场研究人员、学者及商务人士的核心痛点。一款强大的AI转录工具,正是打通音视频内容价值闭环、释放生产力潜能

热心网友
05.24