基于CW32F030与EC-01G模块的NBIoT+GPS定位与心知天气API接入实战

news2026/4/14 18:41:00
基于CW32F030与EC-01G模块的NBIoTGPS定位与心知天气API接入实战最近在做一个户外环境监测的小项目需要把GPS定位数据和传感器信息上传到云端同时还想获取当地的天气信息。我选择了国产的CW32F030C8T6单片机搭配安信可的EC-01G NBIoTGPS模块这个组合性价比很高特别适合对成本敏感但又需要稳定物联网连接的项目。今天我就来手把手教大家如何让这套系统跑起来从硬件连接到AT指令驱动再到通过HTTP协议从心知天气API获取数据并解析最后把天气信息显示出来。整个过程我会详细讲解包括我踩过的坑和调试技巧保证你跟着做一遍就能掌握。1. 硬件准备与连接1.1 硬件清单咱们先来看看需要哪些硬件CW32F030C8T6开发板这是主控芯片基于ARM Cortex-M0内核性价比很高EC-01G模块安信可的NBIoTGPS二合一模块支持全网通内置GPS/北斗定位NBIoT天线确保模块能连接到运营商网络GPS天线用于接收卫星信号注意GPS定位必须在室外进行USB转串口工具用于调试和查看打印信息杜邦线若干用于连接注意EC-01G模块的工作电压是3.0V-3.6V千万不要接5V否则会烧坏模块1.2 引脚连接EC-01G模块通过串口与CW32F030通信接线很简单CW32F030引脚EC-01G模块引脚功能说明PA2 (TX)RX单片机发送数据到模块PA3 (RX)TX单片机接收模块数据3.3VVCC电源必须是3.3VGNDGND地线这里我使用的是CW32F030的串口2UART2对应引脚就是PA2和PA3。如果你要用其他串口记得在代码里修改相应的配置。1.3 物联网卡准备NBIoT模块需要物联网卡才能上网。你可以在淘宝上搜索NBIoT物联网卡选择一家信誉好的商家购买。买回来后按照商家说明激活并插入EC-01G模块的SIM卡槽。2. 软件环境搭建与代码移植2.1 获取资料首先需要下载EC-01G模块的资料官方文档在这里https://docs.ai-thinker.com/nb-iot这个页面里有模块的数据手册、AT指令集、应用笔记等建议把nb-iot系列模组AT指令集v1.0.pdf下载下来后面调试AT指令时会用到。2.2 创建工程文件我在项目中创建了两个文件来管理EC-01G模块的驱动bsp_ec01g.c- 驱动程序源文件bsp_ec01g.h- 驱动程序头文件头文件里主要定义了一些宏和数据结构#ifndef _BSP_EC01G_H_ #define _BSP_EC01G_H_ #include string.h #include board.h // 是否开启串口调试查看模块回显数据 #define DEBUG 1 /**************************** 心知天气配置 ****************************/ // 秘钥需要修改为你自己的密钥 #define API_KEY SpUFyXp2YvP12yxQR // 要查询的城市输入城市拼音免费版只支持部分城市 #define QUERIED_CITY shenzhen // 天气实况API #define WEATHER_FACTS_API \/v3/weather/now.json?key API_KEY location QUERIED_CITY languageenunitc\ // 接收的数据保存结构体 typedef struct{ char city[20]; // 查询的城市 char country[20]; // 查询的国家 char path[50]; // 具体地址 char weather[10]; // 天气状态 char weather_code[5]; // 天气代码 char temperature[5]; // 温度 char last_update[50]; // 天气数据更新时间 }WEATHER_DATA; /**************************** 串口配置 ****************************/ #define RCC_EC01G_GPIO_ENABLE() __RCC_GPIOA_CLK_ENABLE() // GPIO时钟 #define RCC_EC01G_USART_ENABLE() __RCC_UART2_CLK_ENABLE() // 串口2时钟 #define BSP_GPS_AF_UART_TX() PA02_AFx_UART2TXD() // PA2复用为UART2_TX #define BSP_GPS_AF_UART_RX() PA03_AFx_UART2RXD() // PA3复用为UART2_RX #define PORT_EC01G_GPIO CW_GPIOA // GPIO端口 #define GPIO_EC01G_TX GPIO_PIN_2 // 发送引脚 #define GPIO_EC01G_RX GPIO_PIN_3 // 接收引脚 #define EC01G_USART CW_UART2 // 使用串口2 #define EC01G_USART_IRQ UART2_IRQn // 串口2中断号 #define EC01G_USART_IRQHandler UART2_IRQHandler // 串口2中断服务函数 #define EC01G_RX_LEN_MAX 4096 // 串口接收缓冲区大小 // 函数声明 void EC01G_Init(void); uint8_t EC01G_Seniverse_Init(void); void Get_Weather_Data(WEATHER_DATA* data); #endif重要记得把API_KEY和QUERIED_CITY改成你自己的心知天气的API密钥需要注册获取后面会讲到。3. 串口驱动与AT指令基础3.1 串口初始化EC-01G模块默认的通信波特率是9600所以我们需要先初始化串口。下面是串口初始化的代码void EC01G_USART_Init(unsigned int bund) { GPIO_InitTypeDef GPIO_InitStruct; // 1. 使能时钟 RCC_EC01G_GPIO_ENABLE(); // 使能GPIOA时钟 RCC_EC01G_USART_ENABLE(); // 使能UART2时钟 // 2. 配置TX引脚PA2为推挽输出 GPIO_InitStruct.Pins GPIO_EC01G_TX; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Speed GPIO_SPEED_HIGH; // 高速输出 GPIO_Init(PORT_EC01G_GPIO, GPIO_InitStruct); // 3. 配置RX引脚PA3为上拉输入 GPIO_InitStruct.Pins GPIO_EC01G_RX; GPIO_InitStruct.Mode GPIO_MODE_INPUT_PULLUP; // 上拉输入 GPIO_Init(PORT_EC01G_GPIO, GPIO_InitStruct); // 4. 引脚复用为串口功能 BSP_GPS_AF_UART_TX(); // PA2复用为UART2_TX BSP_GPS_AF_UART_RX(); // PA3复用为UART2_RX // 5. 配置串口参数 USART_InitTypeDef USART_InitStructure; USART_InitStructure.USART_BaudRate bund; // 波特率9600 USART_InitStructure.USART_Over USART_Over_8; // 8倍过采样 USART_InitStructure.USART_Source USART_Source_PCLK; // 时钟源 USART_InitStructure.USART_UclkFreq 64000000; // 时钟频率64MHz USART_InitStructure.USART_StartBit USART_StartBit_FE; // 起始位检测 USART_InitStructure.USART_StopBits USART_StopBits_1; // 1位停止位 USART_InitStructure.USART_Parity USART_Parity_No; // 无校验位 USART_InitStructure.USART_HardwareFlowControl USART_HardwareFlowControl_None; // 无硬件流控 USART_InitStructure.USART_Mode USART_Mode_Rx | USART_Mode_Tx; // 收发模式 USART_Init(EC01G_USART, USART_InitStructure); // 6. 配置串口接收中断 NVIC_SetPriority(EC01G_USART_IRQ, 0); // 设置中断优先级 NVIC_EnableIRQ(EC01G_USART_IRQ); // 使能中断 // 7. 使能接收中断 USART_ITConfig(EC01G_USART, USART_IT_RC, ENABLE); }这里有几个关键点需要注意引脚复用一定要配置正确否则数据发不出去也收不到中断优先级根据实际需求设置我这里设为0最高优先级记得使能接收中断这样模块返回的数据才能被及时处理3.2 AT指令发送与接收AT指令是模块通信的基础。我写了一个通用的发送指令并等待响应的函数char EC01G_Send_Cmd(char *cmd, char *ack, unsigned int waitms, unsigned char cnt) { Clear_EC01G_RX_BUFF(); // 先清空接收缓冲区 EC01G_USART_send_String((unsigned char*)cmd); // 发送AT指令 while(cnt--) { // 等待模块响应通过中断接收 if(EC01G_RX_FLAG 1) { // 在接收到的数据中查找期望的应答 if(strstr((char*)EC01G_RX_BUFF, ack) ! NULL) { return 1; // 找到了期望的应答 } } delay_ms(waitms); // 等待一段时间 } return 0; // 超时或未收到期望应答 }这个函数的参数说明cmd要发送的AT指令比如AT\r\nack期望模块返回的应答比如OKwaitms每次等待的毫秒数cnt重试次数实际使用中我一般这样调用// 测试模块是否正常 if(EC01G_Send_Cmd(AT\r\n, OK, 1000, 3) 0) { printf(模块无响应\r\n); return 1; }3.3 串口中断服务函数串口中断负责接收模块返回的数据。这里有个小技巧EC-01G模块返回的HTTP数据最后会有SPC字符我们可以利用这个来判断是否收到了完整的API响应。void EC01G_USART_IRQHandler(void) { if(USART_GetITStatus(EC01G_USART, USART_IT_RC) ! RESET) { // 接收一个字节 EC01G_RX_BUFF[EC01G_RX_LEN] USART_ReceiveData(EC01G_USART); // 防止缓冲区溢出 if(EC01G_RX_LEN EC01G_RX_LEN_MAX) EC01G_RX_LEN 0; // 字符串结尾补\0 EC01G_RX_BUFF[EC01G_RX_LEN] \0; EC01G_RX_FLAG 1; // 设置接收完成标志 // 检查是否收到API响应结束标志SPC if(EC01G_RX_BUFF[EC01G_RX_LEN - 1] C EC01G_RX_BUFF[EC01G_RX_LEN - 2] P EC01G_RX_BUFF[EC01G_RX_LEN - 3] S) { EC01G_RX_API_FLAG 1; // 设置API接收完成标志 } // 清除中断标志 USART_ClearITPendingBit(EC01G_USART, USART_IT_RC); } }4. 连接心知天气API实战4.1 获取心知天气API密钥首先需要注册心知天气账号访问心知天气官网https://www.seniverse.com注册账号并登录进入控制台在API密钥页面创建一个新的密钥免费版每天有1000次调用额度对于学习和测试完全够用4.2 初始化网络连接连接心知天气需要几个步骤我把它封装成了一个函数uint8_t EC01G_Seniverse_Init(void) { uint8_t ret 0; uint8_t i 0; // 1. 测试模块是否存在 if(EC01G_Send_Cmd(AT\r\n, OK, 1000, 3) 0) { return 1; // 模块无响应 } // 2. 关闭飞行模式 if(EC01G_Send_Cmd(ATCFUN1\r\n, OK, 1000, 3) 0) { return 2; // 关闭飞行模式失败 } // 3. 检查网络附着状态 if(EC01G_Send_Cmd(ATCEREG?\r\n, CEREG: 0,1, 5000, 3) 0) { // 第一次失败再试一次 ret EC01G_Send_Cmd(ATCEREG?\r\n, CEREG: 0,1, 1000, 3); if(ret 0) { return 1; // 网络附着失败 } } // 4. 创建HTTP客户端实例 again: // 先断开之前的连接如果有 EC01G_Send_Cmd(ATHTTPDESTROY0\r\n, OK, 1000, 10); i 0; while(EC01G_Send_Cmd(ATHTTPCREATE0,\http://116.62.81.138:80\\r\n, OK, 5000, 3) 0) { #if DEBUG printf(ATHTTPCREATE FAIL\r\n); #endif i; if(i 3) return 2; // 创建失败 goto again; } // 5. 连接服务器 i 0; while(EC01G_Send_Cmd(ATHTTPCON0\r\n, OK, 5000, 3) 0) { #if DEBUG printf(ATHTTPCON FAIL\r\n); #endif i; if(i 3) return 3; // 连接失败 goto again; } return 0; // 初始化成功 }这里有几个关键点需要注意网络附着检查ATCEREG?指令返回CEREG: 0,1表示网络附着成功。如果返回其他值可能是物联网卡没插好或没激活NBIoT天线没接好所在区域没有NBIoT信号覆盖HTTP连接心知天气的服务器地址是116.62.81.138:80。如果连接失败可以尝试检查网络信号强度确认服务器地址和端口是否正确等待几秒后重试4.3 发送HTTP请求获取天气数据连接建立后就可以发送HTTP GET请求获取天气数据了void Get_Weather_Data(WEATHER_DATA* data) { int timeout 10; // 10秒超时 unsigned char send_buff[250] {0}; char parse_buff[512] {0}; char *rev_buff NULL; // 1. 构造HTTP请求 sprintf((char*)send_buff, ATHTTPSEND0,0,%d,%s\r\n, strlen(WEATHER_FACTS_API)-2, WEATHER_FACTS_API); // 2. 发送请求 EC01G_USART_send_String((unsigned char*)send_buff); // 3. 等待响应带超时 while(timeout--) { delay_ms(1000); if(EC01G_RX_API_FLAG 1) { EC01G_RX_API_FLAG 0; // 找到HTTP响应数据开始位置 rev_buff strstr((const char*)EC01G_RX_BUFF, HTTPRESPC:); #if DEBUG printf(\r\nAPI响应\r\n); printf(%s\r\n, rev_buff); printf(\r\n\r\n); #endif break; } } // 4. 处理响应数据 if(rev_buff ! NULL) { int i 0; // 跳过HTTPRESPC:前缀 rev_buff 11; // 跳过前面的4个逗号分隔的参数 while(i 4) { if(*rev_buff ,) { i; } rev_buff; } // 5. 将16进制字符串转换为普通字符串 // 模块返回的JSON数据是16进制格式的需要转换 Hex_To_Text(rev_buff, parse_buff); #if DEBUG printf(\r\n转换后的JSON数据\r\n); printf(\r\n); printf(%s\r\n, parse_buff); printf(\r\n); #endif // 6. 解析JSON数据 Weather_Data_Analysis(parse_buff, data); } }这里有个重要的细节EC-01G模块返回的HTTP响应数据中JSON部分是以16进制字符串形式传输的。比如字符会被转换成22{会被转换成7B。所以我们需要先把这些16进制字符串转换回普通字符串。4.4 16进制字符串转换转换函数如下void Hex_To_Text(char *hex, char *text) { int string_length strlen((char*)hex) / 2; int i 0; // 每两个16进制字符转换成一个字节 for(i 0; i string_length; i) { char HEX[3]; memcpy(HEX, hex[i * 2], 2); HEX[2] \0; text[i] strtol(HEX, NULL, 16); // 16进制转十进制 } text[i] \0; // 字符串结束符 }4.5 JSON数据解析心知天气返回的JSON数据格式是这样的{ results: [{ location: { id: WS10730EM8EV, name: Shenzhen, country: CN, path: Shenzhen,Shenzhen,Guangdong,China, timezone: Asia/Shanghai, timezone_offset: 08:00 }, now: { text: Sunny, code: 0, temperature: 32 }, last_update: 2023-06-02T16:10:1508:00 }] }我写了一个简单的解析函数来提取需要的信息uint8_t Search_Data(char *original_data, char *weather_data, char *find_what) { char *buff; uint16_t i 0; if(strstr(original_data, find_what) ! NULL) { // 找到目标字段的开始位置 buff strstr(original_data, find_what); // 跳过字段名如name: buff strlen(find_what); // 找到结束的双引号 while(buff[i] ! ) { i; } // 复制字段值 strncpy(weather_data, buff, i); weather_data[i] \0; // 添加结束符 return 1; } return 0; } void Weather_Data_Analysis(char *original_data, WEATHER_DATA* weather_data) { // 提取各个字段 Search_Data(original_data, weather_data-city, name\:\); Search_Data(original_data, weather_data-country, country\:\); Search_Data(original_data, weather_data-path, path\:\); Search_Data(original_data, weather_data-weather, text\:\); Search_Data(original_data, weather_data-weather_code, code\:\); Search_Data(original_data, weather_data-temperature, temperature\:\); Search_Data(original_data, weather_data-last_update, last_update\:\); }这个解析方法虽然简单但对于这种结构固定的JSON数据完全够用。如果你需要处理更复杂的JSON可以考虑使用cJSON这样的库。5. 主程序与调试5.1 主函数实现最后在主函数中调用这些功能#include board.h #include stdio.h #include bsp_uart.h #include bsp_ec01g.h int32_t main(void) { WEATHER_DATA weather_data {0}; // 初始化系统 board_init(); uart1_init(115200); // 调试串口 printf(系统启动...\r\n); printf(API请求%s\r\n, WEATHER_FACTS_API); // 初始化EC-01G模块 EC01G_Init(); // 连接心知天气平台 if(EC01G_Seniverse_Init() 0) { printf(连接心知天气成功\r\n\r\n); // 获取天气数据 Get_Weather_Data(weather_data); // 打印解析结果 printf( 天气信息 \r\n); printf(城市%s\r\n, weather_data.city); printf(国家%s\r\n, weather_data.country); printf(详细地址%s\r\n, weather_data.path); printf(天气状况%s\r\n, weather_data.weather); printf(天气代码%s\r\n, weather_data.weather_code); printf(温度%s°C\r\n, weather_data.temperature); printf(更新时间%s\r\n, weather_data.last_update); printf(\r\n); } else { printf(连接心知天气失败\r\n); } while(1) { delay_ms(100); } }5.2 常见问题与调试技巧问题1模块无响应检查电源是否为3.3V检查TX、RX线是否接反检查波特率是否正确默认9600尝试发送AT\r\n看是否有OK返回问题2网络附着失败检查物联网卡是否已激活检查NBIoT天线是否连接良好尝试到窗口或室外信号好的地方用ATCSQ指令查看信号强度问题3HTTP连接失败检查服务器地址和端口是否正确检查网络是否正常ATCEREG?返回0,1尝试增加等待时间NBIoT网络连接较慢问题4API返回错误检查API密钥是否正确检查城市名称拼音是否正确查看心知天气控制台确认API调用是否成功调试技巧开启DEBUG宏定义可以看到详细的通信过程使用串口助手同时监听单片机和模块的通信分步测试先测试AT指令再测试网络最后测试HTTP6. 实际应用扩展这个基础框架搭建好后你可以根据自己的需求进行扩展定时获取天气添加RTC或定时器每隔一段时间如1小时获取一次天气数据。结合GPS定位EC-01G模块本身支持GPS你可以先获取当前位置坐标然后根据坐标查询天气实现真正的当前位置天气。数据上传将获取的天气数据通过NBIoT上传到你自己的服务器或物联网平台。低功耗优化NBIoT模块支持PSM省电模式在不需要通信时可以进入深度睡眠大幅降低功耗。错误重试机制网络不稳定时添加自动重试逻辑提高系统可靠性。这个项目最让我有成就感的地方是用国产的CW32F030和EC-01G模块只花了很少的成本就实现了一个完整的物联网天气站。虽然NBIoT的速率不如4G/5G但对于这种小数据量的应用完全够用而且功耗低、覆盖广特别适合户外或偏远地区的应用。如果你在实现过程中遇到问题可以多看看EC-01G的AT指令手册里面有很多有用的指令和示例。实际项目中网络稳定性是需要重点考虑的问题建议添加心跳包和断线重连机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412851.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…