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

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

热心网友
44
转载
2026-04-22

CoAP:专为物联网而生的轻量级通信协议

在物联网的世界里,设备往往“精打细算”——内存有限、电量紧张,网络环境也可能时好时坏。针对这种资源受限的场景,CoAP协议应运而生。它是一种专为物联网设计的轻量级应用层协议,凭借其简单的二进制消息格式、高效的数据传输机制和原生的RESTful架构,让设备在低带宽、高延迟甚至不可靠的网络中也能顺畅通信。

免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈

哪些公司使用Californium?

作为一款成熟的CoAP协议Ja va实现,Eclipse Californium在工业界得到了广泛采用。看看这份名单,你就知道它的分量了:

科技巨头与工业领袖: Intel在其物联网平台中集成了Californium来提供CoAP支持;IBM则利用它来为物联网和边缘计算解决方案实现高效的数据传输;老牌工业巨头西门子,也在其物联网方案中使用Californium来连接低功耗设备。

制造业与通信领域: Bosch Rexroth用它来支撑工业物联网应用中的设备通信;芯片制造商Infineon Technologies将其集成到嵌入式系统中;电信设备商爱立信,在其物联网平台里也采用了Californium来确保设备间通信的效率。

解决方案与工具链: Texas Instruments直接为开发者提供了基于Californium的开发套件和示例代码;电力自动化专家ABB Ltd.在智能制造方案中用它实现数据交换;而网络设备领导者Cisco Systems,则在其物联网平台上依赖Californium来达成低延迟、可靠的设备通信。

Californium的特点

为什么这些行业领导者都选择了Californium?看看它这些“看家本领”就明白了:

轻量级: 核心设计极度精简,天生适合运行在资源紧张的设备上。

可靠传输: 完整支持CoAP的四种消息类型——需要确认的(CON)、无需确认的(NON)、复位(RST)和应答(ACK),确保了不同场景下的通信可靠性。

多播支持: 允许向一组设备同时发送请求,这对设备群组管理来说是关键功能。

观察机制: 客户端可以“订阅”某个资源,服务器会在资源状态变化时主动推送更新,实现了高效的实时数据监测。

安全性: 支持基于DTLS的加密,为数据传输提供了安全保障。

RESTful架构: 直接使用GET、POST、PUT、DELETE这些HTTP语义,使得与现有Web服务的集成变得异常简单。

Californium的核心组件

要上手Californium,先得熟悉它的几个核心“积木”:

CoapClient: 用来构建CoAP客户端,负责发送请求并处理来自服务器的响应。

CoapServer: 用来构建CoAP服务器,负责监听并处理客户端发来的各种请求。

CoapResource: 用于定义服务器上的资源。每个资源对应一个特定的URI路径,并处理到达该路径的请求。

CoapExchange: 它封装了一次请求-响应的完整上下文,让你在处理具体业务逻辑时,能方便地访问请求信息和发送响应。

代码实操

理论说再多,不如动手搭一个。下面我们用一个Spring Boot项目,快速构建一个具备设备管理功能的CoAP服务器。首先,引入必要的依赖:


    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-ja va
    runtime

application.properties

# MySQL 数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/iot_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=rootpassword
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# Hibernate 配置
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

Device实体类

我们需要一个实体来映射数据库中的设备表:

package com.example.coapserver.entity;

import ja vax.persistence.Entity;
import ja vax.persistence.GeneratedValue;
import ja vax.persistence.GenerationType;
import ja vax.persistence.Id;

@Entity
public class Device {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 设备ID,自增主键
    private String deviceId; // 设备唯一标识符
    private String type; // 设备类型
    private double temperature; // 温度数据
    private boolean active; // 设备是否激活

    // 此处省略了标准的Getter和Setter方法
    ...
}

仓库接口

通过JPA仓库接口,我们可以方便地操作设备数据:

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

这里是业务逻辑的核心,一个控制器同时处理HTTP和CoAP请求:

package com.example.coapserver.controller;

// 导入省略...

@RestController
@CoapController
@RequestMapping(“/api”)
public class SensorDataController {
    private static final Logger logger = LoggerFactory.getLogger(SensorDataController.class);

    @Autowired
    private DeviceRepository deviceRepository;

    private ConcurrentHashMap sensorDataMap = new ConcurrentHashMap<>();
    private AtomicInteger observeCounter = new AtomicInteger(0);

    // HTTP接口:注册新设备
    @PostMapping(“/register”)
    public ResponseEntity registerDevice(@RequestBody Device device) {
        if (deviceRepository.findByDeviceId(device.getDeviceId()) != null) {
            return new ResponseEntity<>(“设备已注册”, HttpStatus.BAD_REQUEST);
        }
        device.setActive(true);
        deviceRepository.sa ve(device);
        logger.info(“注册设备: {}”, device.getDeviceId());
        return new ResponseEntity<>(“设备注册成功”, HttpStatus.CREATED);
    }

    // CoAP接口:更新传感器数据 (PUT请求)
    @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.sa ve(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);
        }
    }

    // CoAP接口:获取传感器数据 (GET请求)
    @CoapGetMapping(“/sensors/{sensorId}”)
    public String getSensorData(@PathVariable String sensorId) {
        return sensorDataMap.getOrDefault(sensorId, “无数据”).toString();
    }

    // CoAP接口:提供一个可观察的资源,用于订阅变化
    @CoapObserveRelation
    @CoapGetMapping(“/observe”)
    public String observeSensors() {
        int count = observeCounter.get();
        logger.info(“观察传感器,计数器: {}”, count);
        return String.valueOf(count); // 返回计数器值以触发观察者通知
    }

    // HTTP接口:获取所有设备
    @GetMapping(“/devices”)
    public List getAllDevices() {
        return deviceRepository.findAll();
    }

    // 私有方法:高温警报检查
    private void checkAndAlert(String sensorId, double temperature) {
        if (temperature > 30.0) {
            logger.warn(“高温警报:传感器 {} 的温度为 {}°C”, sensorId, temperature);
            // 此处可集成邮件、信息等报警通知
        }
    }
}

Application

最后,标准的Spring Boot应用启动类:

package com.example.coapserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class CoapServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(CoapServerApplication.class, args);
    }
}

测试

服务搭好了,怎么验证它是否正常工作呢?最直接的方式就是使用Californium自带的命令行工具(CF-CLI)来模拟设备发送请求。这个工具可以从Californium的GitHub仓库(https://github.com/eclipse/californium)获取并编译,安装过程非常简单。

更新传感器数据

我们尝试用PUT请求向传感器`sensor1`上报温度值25.5:

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

如果一切正常,你将看到类似以下的响应,其中“2.04 Changed”代表更新成功:

Sending PUT request to coap://localhost:5683/api/sensors/sensor1
Response from coap://localhost:5683/api/sensors/sensor1:
Code: 2.04 Changed
Payload:

获取传感器数据

接着,我们用GET请求查询一下刚才上报的数据:

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

成功的响应会直接返回数据内容,并标明内容格式为文本:

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

看到这里,一个具备设备注册、数据上报、状态查询甚至简单警报功能的CoAP服务器框架就已经搭建完成了。通过这个例子,你应该能感受到,借助Californium这样成熟的库,在物联网领域实现高效、轻量的设备通信,并没有想象中那么复杂。

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

相关攻略

【IT之家众测作品】小米AIoT路由器AX3600能否担当的起时代先锋?
业界动态
【IT之家众测作品】小米AIoT路由器AX3600能否担当的起时代先锋?

本文系众测第六期作品。稿件内容、照片均为众测作者原创。 2020年的春天,在经历了一个特别的春节之后,如约而至。科技圈的节奏也随之加快,各大厂商的春季发布会陆续拉开帷幕。这一次,舞台中央的主角是小米AIoT路由器AX3600。单从型号上,就能读出不少信息:“AIoT”巧妙地融合了AI与IoT两大热词

热心网友
04.21
极域 MXC
web3.0
极域 MXC

MXC极域协议深度解析:区块链如何重塑低功耗物联网未来 在万物互联与价值互联网加速融合的时代,物联网设备产生的海量数据如何安全、高效地确权、交易与流转,成为制约行业发展的核心瓶颈。MXC极域基金会及其核心成果——MXProtocol极域协议,正是瞄准这一前沿领域,通过将低功耗广域物联网(LPWAN)

热心网友
04.21
全球首例!中国电信完成5G-A eRedCap端网互通商用验证
业界动态
全球首例!中国电信完成5G-A eRedCap端网互通商用验证

全球首例!中国电信完成5G-A eRedCap端网互通商用验证 近日,通信行业迎来里程碑式突破:中国电信携手中国联通,在浙江、贵州等五省现网环境中,成功完成了全球首个全频段、全制式、全场景的5G RedCap商用验证。这一成果标志着5G RedCap技术正式迈入全国百城规模商用的新阶段,为物联网规模

热心网友
04.20
低碳转型催生绿色新职业,现存生态环保相关企业超234万家
科技数码
低碳转型催生绿色新职业,现存生态环保相关企业超234万家

随着我国经济社会全面绿色转型,以“低碳、环保、循环”为特征的绿色新职业蓬勃兴起 你发现了吗?一场深刻的绿色变革,正在重塑我们的就业版图。以“低碳、环保、循环”为核心特征的绿色新职业,正以前所未有的势头蓬勃兴起。像储能电站运维管理员、风电场叶片维修工这类几年前还颇为陌生的工种,如今已应运而生,成为产业

热心网友
04.17
国内物联网常用的平台有哪些?
业界动态
国内物联网常用的平台有哪些?

物联网平台全景解析:连接万物的核心引擎 在万物互联的时代,物联网平台扮演着怎样的角色?简单来说,它就是那个将海量设备、数据与应用无缝串联起来的“中枢神经系统”。无论是工业生产线上的传感器,还是智能家居里的一个小开关,都需要通过这样一个平台来实现高效的连接、管理与监控。今天,我们就来深入聊聊市面上几个

热心网友
04.17

最新APP

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

热门推荐

iPhone16之间如何快速传输App?详细步骤解析
iphone
iPhone16之间如何快速传输App?详细步骤解析

通过AirDrop功能,可在iPhone16之间快速传输已安装的App,无需重新下载。 省去重新下载的等待,直接在两部iPhone 16之间“搬运”已经安装好的App——这个用AirDrop传App的功能,确实方便。不过,想顺利操作,有几个关键前提得先摆正。 准备工作与条件确认 开始之前,最好花一分

热心网友
04.22
iPhone17设备名称怎么修改?详细步骤教程
iphone
iPhone17设备名称怎么修改?详细步骤教程

修改iPhone17设备名称的核心步骤 想给你的iPhone17换个独具特色的名字吗?其实很简单,整个操作的核心路径就在「设置」>「通用」>「关于本机」>「名称」里,几步就能完成自定义。 为什么要修改iPhone17的设备名称? 给iPhone17改个名,可不仅仅是图个新鲜。它在蓝牙配对、使用Air

热心网友
04.22
iPhone14隐藏ID怎么解除?详细步骤与注意事项
iphone
iPhone14隐藏ID怎么解除?详细步骤与注意事项

解除iPhone14隐藏ID的核心方法是联系原机主或提供购买凭证,通过官方渠道重置Apple ID 手里突然多出一台被锁的iPhone 14,用起来处处受限,这事儿确实头疼。好消息是,只要遵循官方路径,问题基本都能解决。关键在于,你得有耐心走完正规流程。 什么是iPhone隐藏ID? 简单来说,iP

热心网友
04.22
怎么查找我的iPhone17位置?
iphone
怎么查找我的iPhone17位置?

通过“查找”应用或iCloud网站,登录Apple ID即可实时定位iPhone 17,即使设备离线也能显示最后已知位置。 使用“查找”应用定位iPhone 17 如果你手边还有别的苹果设备,比如iPad或者Mac,最省事的方法就是直接用上面的“查找”应用。打开应用,登录和iPhone 17同一个

热心网友
04.22
iPhone 16通知权限设置与微信提示音修复指南
iphone
iPhone 16通知权限设置与微信提示音修复指南

iPhone 16通知权限设置与微信提示音修复指南 微信消息突然“静音”了?先别急着怀疑手机坏了。在iPhone 16上,通知体系和声音管理比以往更精细,有时只是某个开关没到位。接下来,咱们就把系统通知中心、应用权限、勿扰模式这几个关键环节捋清楚,帮你快速找回失联的提示音,避免错过重要信息。 iPh

热心网友
04.22