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

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

热心网友
51
转载
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。

相关攻略

LangChain之外,为何还需关注Spring AI?
AI
LangChain之外,为何还需关注Spring AI?

如果面试官问你这个问题,你可以这样总结:LangChain功能繁多、反应迅速,是探索 AI 前沿的最佳工具,而 Spring AI 更像是一套工业级的生产线。对于企业而言,我们不仅需要调用大模型,更

热心网友
01.07
Spring Boot + sshd-sftp:SSH 命令与文件传输实践
科技数码
Spring Boot + sshd-sftp:SSH 命令与文件传输实践

在现代分布式系统中,服务器间的远程操作与文件传输是常见需求。SSH作为一种安全的网络协议,为远程登录和文件传输提供了可靠保障。 前言在现代分布式系统中,服务器间的远程操作与文件传输是常见需求。SSH

热心网友
12.15
Spring Boot + Pcap4j 实现网络流量抓包与实时分析
科技数码
Spring Boot + Pcap4j 实现网络流量抓包与实时分析

在当今数字化时代,网络流量如同信息社会的血液,承载着海量的数据交互。对网络流量进行有效的抓包与实时分析,是保障网络安全、优化网络性能的关键环节。无论是及时发现潜在的网络攻击,还是排查网络拥塞等问题,

热心网友
12.15
震惊!SpringBoot 接口耗时监控还能这么玩,简单到离谱!
科技数码
震惊!SpringBoot 接口耗时监控还能这么玩,简单到离谱!

随着业务规模的增长,我们还可以在此基础上拓展更多维度,比如统计 QPS、采集请求来源、结合用户信息等,形成完整的 接口性能监控体系。这不仅能帮助我们快速定位问题,更能为系统优化提供强有力的数据支撑。

热心网友
12.15
在 SpringBoot 项目中如何动态切换数据源、数据库?(可直接CV)
科技数码
在 SpringBoot 项目中如何动态切换数据源、数据库?(可直接CV)

如果服务器搭建的是一主多从多个mysql数据源,主服务器用来读。从服务器用来写。此时你在代码层面用注解指定了一个增删改方法到从数据源,但是碰巧此时从数据源失效了,那么就会自动的切换到其它服务器。 前

热心网友
12.15

最新APP

恶魔秘境
恶魔秘境
角色扮演 03-29
猫和老鼠华为
猫和老鼠华为
休闲益智 03-29
暗黑之地
暗黑之地
角色扮演 03-28
你比我猜
你比我猜
休闲益智 03-26
锦绣商铺
锦绣商铺
模拟经营 03-26

热门推荐

彭博社:苹果折叠iPhone将是重大改款,全新设计揭秘
网络安全
彭博社:苹果折叠iPhone将是重大改款,全新设计揭秘

IT之家 3 月 30 日消息,彭博社记者马克 · 古尔曼昨天在最新一期《Power On》通讯中表示,他对苹果首款折叠屏手机 iPhone Fold 寄予厚望。他表示,这款手机将成为“iPhone

热心网友
03.30
Intel新款CPU上市两天即涨17%:剖析首发热销溢价值
电脑教程
Intel新款CPU上市两天即涨17%:剖析首发热销溢价值

3月29日消息,Intel全新的Arrow Lake Refresh系列处理器酷睿Ultra 200S Plus已经于3月26日正式上市,包括酷睿Ultra 5 250K Plus和酷睿Ultra

热心网友
03.30
企查查上线智能体数据平台,Token消耗显著下降
科技数码
企查查上线智能体数据平台,Token消耗显著下降

企查查正式推出智能体数据平台(agent qcc com),可通过标准MCP协议对接阿里云百炼、扣子Coze、飞书集成平台等主流Agent平台。该平台针对AI Agent企业级应用面临的模型幻觉、上

热心网友
03.30
张雪赛车WSBK夺九千万A轮融资,封神夺冠与资本新篇
科技数码
张雪赛车WSBK夺九千万A轮融资,封神夺冠与资本新篇

【张雪机车获世界顶级赛事冠军】在3月28日进行的世界超级摩托车锦标赛(WSBK)中量级赛事(葡萄牙站)中,法国车手Valentin Debise驾驶张雪机车(编号53)820RR-RS车型,以领先近

热心网友
03.30
GoPro新品搭载GP3处理器,4月正式发布
科技数码
GoPro新品搭载GP3处理器,4月正式发布

IT之家 3 月 30 日消息,GoPro 上周(3 月 25 日)宣布将在 4 月 19 日-22 日的 NAB Show 2026 展会上发布新一代相机产品,搭载下一代 GP3 影像处理器。据介

热心网友
03.30