NewAskSin库:Arduino实现Homematic协议兼容设备开发

news2026/3/23 18:35:25
1. NewAskSin 库概述面向 Homematic 兼容设备的 Arduino 底层通信框架NewAskSin 是一个专为构建 Homematic简称 HM协议兼容设备而设计的开源 C 库其核心目标是将标准 Arduino 硬件平台如 ATmega328P、ATmega2560、ESP32 等转化为功能完备、可被 Homematic CCUCentral Control Unit原生识别与管理的无线传感器/执行器节点。该库并非简单的协议解析工具而是一套完整的嵌入式固件开发框架深度整合了射频通信驱动、消息状态机、设备模型抽象、EEPROM 配置管理及低功耗调度机制。Homematic 协议采用私有但高度结构化的双向无线通信机制工作在 868.3 MHz ISM 频段物理层基于 GFSK 调制数据链路层定义了严格的帧格式、重传策略、ACK/NACK 机制及设备地址绑定逻辑。NewAskSin 的工程价值在于它将这些复杂且易出错的底层细节全部封装使开发者得以聚焦于应用逻辑——例如温湿度采集算法、继电器控制时序或门窗磁状态检测——而无需从零实现 RF 芯片寄存器配置、曼彻斯特编码解码、CRC-16 校验计算或 CCU 同步握手流程。该库的典型硬件载体是基于 TI CC1101 射频收发芯片的模块。CC1101 因其高灵敏度-110 dBm、可编程输出功率-30 至 10 dBm、内置前导码检测与同步字识别能力成为 HM 兼容设备的事实标准。NewAskSin 通过精简高效的寄存器操作序列对 CC1101 进行初始化、信道扫描、接收/发送模式切换及中断事件处理其驱动代码已针对 ATmega 系列的 SPI 时序约束和中断响应延迟进行了深度优化确保在 16 MHz 主频下仍能稳定处理每秒数帧的协议交互。从系统架构看NewAskSin 采用分层设计硬件抽象层HAL封装 SPI 读写、GPIO 控制、定时器中断、EEPROM 访问等 MCU 特定操作为跨平台移植如从 Uno 迁移至 ESP32提供统一接口RF 驱动层直接操控 CC1101 寄存器实现载波检测CCA、自动增益控制AGC、RSSI 读取及 FIFO 管理协议栈层解析 HM 的 ASK/SIN 帧结构含 Preamble、Sync Word、Length、Address、Payload、CRC维护设备地址ID、密钥Key、通道号Channel等关键参数设备模型层以 C 类继承体系建模 HM 设备类型如 HM-Sec-SCo 门窗磁、HM-CC-RT-DN 恒温控制器每个子类定义其特有的参数集、状态上报周期及命令响应逻辑应用管理层提供loop()中调用的run()接口协调 RF 收发、传感器采样、状态更新与低功耗休眠。这种架构使 NewAskSin 不仅是一个通信库更是一个嵌入式设备开发操作系统。开发者只需继承Device基类重写init()、loop()和onMessage()等虚函数即可快速生成符合 HM 生态规范的固件。其设计哲学体现了嵌入式开发的核心原则确定性Determinism、可预测性Predictability与最小化资源占用Minimal Footprint。在 ATmega328P 上典型固件仅占用约 24 KB Flash 和 1.2 KB RAM为传感器融合与本地决策预留充足空间。2. 核心协议机制解析ASK/SIN 帧结构与 CCU 交互逻辑NewAskSin 的生命力源于其对 Homematic 私有协议 ASK/SIN 的精准实现。该协议名称中的 “ASK” 指代幅移键控Amplitude Shift Keying调制方式“SIN” 则源于其帧头标识符Sync Word:0xD3 0x91。理解其帧结构是掌握 NewAskSin 工作原理的前提。2.1 ASK/SIN 帧格式详解一个完整的 ASK/SIN 帧由以下字段构成总长度可变通常 12–32 字节所有字段均以大端序Big-Endian传输字段名长度字节说明Preamble4固定值0x00 0x00 0x00 0x00用于接收机时钟同步与 AGC 建立Sync Word2固定值0xD3 0x91标志有效帧起始CC1101 硬件可配置为自动检测此序列并触发中断Length1有效载荷Payload长度不包含 Preamble、Sync Word、Length 自身及 CRCAddress (ID)4设备唯一 ID32 位无符号整数格式为0xHHHHHHHH由 NewAskSin 在首次上电时自动生成并存储于 EEPROMChannel1通道号0–31用于区分同一设备上的多个功能单元如双路继电器的 CH1/CH2Flags1控制标志位• Bit 7: ACK 请求位1要求 CCU 回复 ACK• Bit 6: 重复帧标记1当前帧为重传• Bit 5–0: 保留或协议扩展位PayloadLength可变长数据区内容取决于设备类型与命令类型• 传感器上报温度值16-bit signed、湿度8-bit、电池电压8-bit• 执行器命令开关状态1-bit、设定温度16-bit• 系统命令学习模式请求、参数读取/写入CRC-162基于 CRC-16-CCITT初始值 0xFFFF多项式 0x1021计算的校验码覆盖 Address 至 Payload 全部字节NewAskSin 在RFDriver::send()函数中严格按此格式组装帧。关键代码片段如下void RFDriver::send(const uint8_t* data, uint8_t len) { // 1. 写入 Preamble (4 bytes) spiWriteBurstReg(CC1101_REG_TXFIFO, preamble, 4); // 2. 写入 Sync Word (2 bytes) spiWriteBurstReg(CC1101_REG_TXFIFO, syncWord, 2); // 3. 写入 Length (1 byte) spiWriteReg(CC1101_REG_TXFIFO, len); // 4. 写入 Address (4 bytes) spiWriteBurstReg(CC1101_REG_TXFIFO, deviceID, 4); // 5. 写入 Channel Flags (2 bytes) uint8_t header[2] {channel, flags}; spiWriteBurstReg(CC1101_REG_TXFIFO, header, 2); // 6. 写入 Payload (len bytes) spiWriteBurstReg(CC1101_REG_TXFIFO, data, len); // 7. 计算并写入 CRC-16 (2 bytes) uint16_t crc calcCRC16(data, len, deviceID, channel, flags); spiWriteReg(CC1101_REG_TXFIFO, (crc 8) 0xFF); spiWriteReg(CC1101_REG_TXFIFO, crc 0xFF); // 8. 触发发送 setTxState(); }2.2 CCU 交互状态机NewAskSin 并非被动收发而是主动参与 CCU 的双向会话。其核心交互流程如下学习模式Teach-In设备上电后进入学习态持续广播TEACH_IN_REQUEST帧Payload 包含设备类型 ID、固件版本、支持的通道数。CCU 捕获此帧后向设备发送TEACH_IN_RESPONSE其中包含分配的唯一 ID 和加密密钥。NewAskSin 将此 ID 与 Key 永久写入 EEPROM并切换至正常工作模式。周期上报Periodic Reporting设备按预设间隔如温湿度传感器每 300 秒主动向 CCU 发送状态帧。NewAskSin 通过Timer类管理此周期避免依赖millis()的累积误差。命令响应Command HandlingCCU 向设备发送控制命令如SWITCH_ON。NewAskSin 的RFDriver::receive()在中断中捕获完整帧经 CRC 校验、地址匹配后调用Device::onMessage()将解析后的命令对象传递给应用层。开发者在此函数中执行实际动作如digitalWrite(RELAY_PIN, HIGH)并可选择性地回复 ACK。ACK/NACK 机制若发送帧设置了 ACK 请求位NewAskSin 会启动超时定时器通常 100 ms等待 CCU 的 ACK 帧。若超时未收到则根据MAX_RETRIES参数默认 3 次进行重传每次重传前翻转 Flags 的“重复帧”位。此机制保障了关键命令如安防报警的可靠投递。该状态机完全在 NewAskSin 的Device::run()循环中驱动不依赖 RTOS体现了裸机开发的高效性与确定性。3. 关键 API 接口与使用范式NewAskSin 以面向对象方式组织 API核心类及其职责如下表所示。所有类均设计为单例或全局实例避免动态内存分配符合嵌入式实时性要求。类名主要职责关键成员函数Device设备抽象基类定义通用生命周期与消息处理接口init(),loop(),onMessage(),send()RFDriverCC1101 射频驱动封装硬件访问与帧收发init(),send(),receive(),setRxState(),setTxState()EEPROMHelperEEPROM 配置管理提供类型安全的读写接口read(),write(),commit()Timer精确定时器基于micros()实现毫秒级精度start(),elapsed(),expired()Sensor/Actuator传感器/执行器抽象简化数据采集与控制read(),write(),update()3.1 设备初始化与生命周期管理设备固件的setup()函数需完成 NewAskSin 的初始化链#include NewAskSin.h #include CC1101.h // 全局实例 CC1101 radio; Device myDevice; void setup() { // 1. 初始化串口用于调试 Serial.begin(115200); // 2. 初始化 RF 驱动指定 SPI 引脚、GDO0/GDO2 中断引脚 radio.init(10, 2, 3); // SS10, GDO02, GDO23 // 3. 初始化设备传入 RF 驱动引用、设备类型 ID、通道数 myDevice.init(radio, HM_DEVICE_TYPE_HM_Sec_SCo, 1); // 4. 加载 EEPROM 中保存的设备 ID 与密钥 myDevice.loadConfig(); // 5. 若为新设备进入学习模式 if (!myDevice.isValid()) { myDevice.enterTeachInMode(); } } void loop() { // NewAskSin 的主循环入口处理 RF、定时器、状态更新 myDevice.run(); }Device::init()内部执行关键操作校验 RF 驱动状态、注册中断服务程序ISR、初始化 EEPROM 助手、设置默认通道参数。loadConfig()从 EEPROM 地址0x0000开始读取 12 字节4 字节 ID 8 字节 Key若读取值全为0xFF则判定为新设备。3.2 消息处理与命令响应onMessage()是应用逻辑的核心入口。NewAskSin 将原始帧解析为Message对象开发者可便捷访问其字段void MyDoorSensor::onMessage(const Message msg) { // 1. 解析命令类型HM 协议定义的标准命令 ID switch (msg.command()) { case HM_CMD_SWITCH_ON: // CCU 命令开启对门磁无意义忽略 break; case HM_CMD_SWITCH_OFF: // CCU 命令关闭同上 break; case HM_CMD_QUERY_STATUS: // CCU 查询当前状态需立即回复 sendStatus(); break; case HM_CMD_SET_PARAMETER: // CCU 设置参数如上报周期 handleSetParameter(msg.payload()); break; } } void MyDoorSensor::sendStatus() { // 构造状态帧 PayloadByte0Contact State (0open, 1closed), Byte1Battery Level uint8_t payload[2]; payload[0] digitalRead(DOOR_PIN) ? 0 : 1; // 低电平有效 payload[1] readBatteryLevel(); // 自定义电池电压映射 // 调用基类 send() 发送自动添加 Header 与 CRC send(payload, sizeof(payload), HM_CMD_REPORT_STATUS); }send()函数内部自动填充 Address、Channel、Flags并调用RFDriver::send()。开发者无需关心底层帧组装细节极大降低了出错概率。3.3 低功耗与定时器集成NewAskSin 内置的Timer类是实现低功耗的关键。以电池供电的门窗磁为例其典型工作模式为深睡眠Power Down→ 唤醒 → 检测门磁状态 → 若状态变化则发送报警帧 → 返回深睡眠。Timer提供精确的唤醒间隔class MyDoorSensor : public Device { private: Timer wakeTimer; bool lastState; public: void init(...) { Device::init(...); wakeTimer.start(300000); // 5 分钟唤醒一次 lastState digitalRead(DOOR_PIN); } void loop() { Device::loop(); // 处理 RF 接收等 // 检查定时器是否到期 if (wakeTimer.expired()) { wakeTimer.start(300000); // 重置定时器 bool currentState digitalRead(DOOR_PIN); if (currentState ! lastState) { // 状态变化发送报警 uint8_t payload[2] {currentState ? 0 : 1, readBatteryLevel()}; send(payload, sizeof(payload), HM_CMD_ALARM); lastState currentState; } // 进入深睡眠ATmega 特定 set_sleep_mode(SLEEP_MODE_PWR_DOWN); sleep_enable(); sleep_cpu(); sleep_disable(); } } };此范式将功耗降至微安级一节 CR2032 电池可支撑数年完美契合 HM 传感器的设计目标。4. CC1101 射频驱动深度剖析与硬件配置要点NewAskSin 的 RF 驱动层是其稳定性的基石其对 CC1101 的配置远超基础通信需求直指 HM 协议的严苛时序与抗干扰要求。以下解析其关键寄存器配置逻辑与硬件设计注意事项。4.1 核心寄存器配置策略CC1101 的 58 个寄存器中NewAskSin 重点配置以下几组每项均服务于 HM 协议特性寄存器推荐值工程目的HM 协议关联IOCFG2 (GDO2)0x02(Assert when sync word is received)将 GDO2 引脚配置为同步字检测中断源实现零延迟帧捕获确保0xD3 0x91被硬件即时识别避免软件轮询引入的丢帧IOCFG0 (GDO0)0x06(Assert when packet is received/sent)GDO0 作为 RX/TX 完成中断通知 MCU 处理 FIFO配合RFDriver::receive()的中断服务程序实现异步收发PKTCTRL00x05(White data, CRC enable, Auto flush RX)启用 CRC 校验、白化Whitening以降低长连零风险HM 协议强制 CRC-16 校验白化提升抗干扰性符合 ETSI EN 300 220 标准MCSM10x0C(RXOFF_MODEIDLE, TXOFF_MODEIDLE)接收/发送完成后保持空闲态便于快速切换支持 HM 的突发式通信模式避免信道独占FREQ2:FREQ1:FREQ00x21:0x62:0x76(868.30 MHz)精确设置中心频率HM 标准频点偏差 ±5 kHz 将导致 CCU 无法解调MDMCFG20x73(GFSK, 50/100 kBaud, Manchester off)选择 GFSK 调制禁用曼彻斯特编码HM 使用自定义编码与 HM 物理层完全匹配禁用硬件曼彻斯特以避免解码错误NewAskSin 在CC1101::init()中按严格时序写入这些寄存器尤其注意FSCTRL1频率合成器电流与PA_TABLE0功率放大器表的配置确保发射功率稳定在10 dBm最大值满足 ETSI 辐射杂散限制。4.2 硬件设计关键考量成功的 NewAskSin 项目不仅依赖软件更取决于硬件实现质量。以下是经过量产验证的设计要点天线匹配网络必须采用 π 型匹配电路L-C-L 或 C-L-C将 CC1101 的 50Ω 输出阻抗转换为天线的实部阻抗。典型值L112 nH,C12.2 pF,C23.3 pF。未匹配将导致发射效率下降 50% 以上接收灵敏度劣化 10 dB。电源去耦CC1101 的AVDD和DVDD引脚需各自配备100 nF陶瓷电容 10 µF钽电容紧邻芯片放置。电源噪声是接收误码率BER升高的主因。PCB 布局RF 走线应为 50Ω 微带线长度尽量短 10 mm远离数字信号线与电源平面。GND 铺铜必须完整避免 RF 地回路断裂。GDO 引脚连接GDO0 与 GDO2 必须连接至 MCU 的外部中断引脚如 ATmega328P 的 INT0/INT1且需添加10 kΩ上拉电阻确保中断电平稳定。一个常见陷阱是使用廉价的 CC1101 模块如某些“HM 兼容”模块其晶振精度仅 ±20 ppm而 HM 要求 ±10 ppm。这会导致频率漂移超出 CCU 接收带宽±15 kHz表现为设备偶发失联。选用10 ppm温补晶振TCXO是工业级部署的必要条件。5. 实际项目集成案例基于 ESP32 的多功能环境传感器NewAskSin 的跨平台能力在 ESP32 平台上得到充分体现。以下是一个集成温湿度SHT3x、光照BH1750、大气压BMP280及电池监测的实战案例展示其与现代 MCU 的协同。5.1 硬件架构与引脚分配功能芯片ESP32 引脚备注RF 通信CC1101GPIO5 (SS), GPIO18 (SCK), GPIO19 (MISO), GPIO23 (MOSI), GPIO4 (GDO0), GPIO15 (GDO2)使用 VSPI 总线温湿度SHT3xGPIO21 (SDA), GPIO22 (SCL)I²C 总线光照BH1750GPIO21 (SDA), GPIO22 (SCL)共享 I²C气压BMP280GPIO21 (SDA), GPIO22 (SCL)共享 I²C电池监测ADC1_CH6GPIO34通过电阻分压接入5.2 ESP32 专用适配与优化NewAskSin 为 ESP32 提供了ESP32Hal类覆盖其特有外设SPI 驱动利用 ESP32 的硬件 VSPI 总线spiWriteReg()直接调用spi_device_transmit()吞吐量达 8 Mbps远超软件模拟 SPI。中断处理GDO0/GDO2 中断注册为ESP32Hal::attachInterrupt()支持ESP_INTR_FLAG_LEVEL3级别确保 RF 事件优先级最高。低功耗esp_sleep_enable_timer_wakeup()替代 ATmega 的sleep_cpu()配合esp_deep_sleep_start()待机电流可低至 10 µA。固件核心逻辑如下#include NewAskSin.h #include ESP32Hal.h #include Wire.h #include SHT3x.h #include BH1750.h #include Adafruit_BMP280.h ESP32Hal hal; CC1101 radio(hal); MultiSensor device; void setup() { Wire.begin(); // 初始化 I²C radio.init(5, 4, 15); // SS5, GDO04, GDO215 device.init(radio, HM_DEVICE_TYPE_HM_WDS40, 1); // WDS40: Weather Sensor device.loadConfig(); // 初始化传感器 sht3x.begin(0x44); bh1750.begin(); bmp280.begin(0x76); } void loop() { device.run(); // NewAskSin 主循环 // 每 300 秒执行一次完整采样 if (device.getTimer().expired()) { device.getTimer().start(300000); // 采集多参数 float temp sht3x.readTemperature(); float humi sht3x.readHumidity(); float press bmp280.readPressure() / 100.0; // hPa uint16_t lux bh1750.readLightLevel(); uint8_t batt readBatteryLevel(); // 组装 HM 兼容 Payload (WDS40 格式) uint8_t payload[10]; memcpy(payload, temp, 2); // Temp (int16_t, *10) memcpy(payload2, humi, 2); // Humi (int16_t, *10) memcpy(payload4, press, 3); // Press (uint24_t, hPa) payload[7] lux 8; // Lux (uint16_t) payload[8] lux 0xFF; payload[9] batt; // Battery (%) device.send(payload, sizeof(payload), HM_CMD_REPORT_STATUS); } }此案例证明 NewAskSin 不仅适用于经典 Arduino更能驾驭 ESP32 的丰富外设与强大处理能力为构建高性能 HM 兼容设备提供了坚实基础。其成功关键在于将协议复杂性锁死在库内部将硬件差异性隔离在 HAL 层最终向开发者交付一个纯粹、稳定、可预测的应用接口。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…