STM32传感器系列:GPS定位模块
简介
我们在做一些项目的时候,可能需要使用到GPS模块,我们可以通过这个模块获得当前的位置以及时间,我这里就教大家如何去使用GPS定位模块,并且把示例代码开源到评论区下面,有需要自取即可,我我这里用到的是GPS NEO-6M模块搭配吸盘天线或者陶瓷天线。

实验所需材料
一块 STM32F103C8T6 小系统板、一个下载器、一个 4针 I2C 通讯的 OLED 液晶、一个GPS 驱动板、一套吸盘天线套装(吸盘天线可以搁置在窗户外无遮挡的地方)或陶瓷天线(陶瓷天线必须户外空旷地实验)、一个面包板、若干杜邦线。
实验步骤
1、通过 STLINK 下载器给小系统板烧录我开源的GPS示例代码。
2、拔掉小系统板上连接的 STLINK 杜邦线,用 4根杜邦线连接系统板和 OLED 液晶屏,用 4 根杜邦线连接系统板和 GPS 模块。
最小系统板和 OLED 液晶屏的接线方式:
| VCC | 5V/3.3V |
| GND | GND |
| SCL | PB12 |
| SDA | PB13 |
最小系统板和 GPS 模块的接线方式:
| VCC | 5V |
| GND | GND |
| RX | PA2 |
| TX | PA |
3、连接好后,用 USB 数据线给开发板上电
4、可以看到 OLED 液晶屏幕显示“爱学电子的刻刻帝”以及“模块同步中“。
5、等有信号后,GPS 模块上的 LED 灯会闪烁,获取到数据后,OLED 液晶屏幕上会显示 GPS 的经纬度以及时间会按北京时间走动。

模块介绍
引脚介绍

其中,PPS引脚同时连接到了模块自带了的状态指示灯:PPS,该引脚连接在UBLOX NEO-6M模组的TIMEPULSE端口,该端口的输出特性可以通过程序设置。PPS指示灯(即PPS引脚),在默认条件下(没经过程序设置),有2个状态:
1, 常亮,表示模块已开始工作,但还未实现定位。
2, 闪烁(100ms灭,900ms亮),表示模块已经定位成功。
指令解析
NMEA 0183是美国国家海洋电子协会(National Marine Electronics Association)为海用电子设备
制定的标准格式。目前业已成了GPS导航设备统一的RTCM标准协议。NMEA-0183协议采用ASCII码来传递GPS定位信息,我们称之为帧。帧格式形如:$aaccc,ddd,ddd,…,ddd*hh(CR)(LF)
1、“$”:帧命令起始位
2、aaccc:地址域,前两位为识别符(aa),后三位为语句名(ccc)
3、ddd…ddd:数据
4、“*”:校验和前缀(也可以作为语句数据结束的标志)
5、hh:校验和(check sum),$与*之间所有字符ASCII码的校验和(各字节做异或运算,得到
校验和后,再转换16进制格式的ASCII字符)
6、(CR)(LF):帧结束,回车和换行符

UTC 时间即协调世界时,相当于本初子午线(0 度经线)上的时间,北京时间比 UTC 早 8 个小时。
指令讲解
1,$GPGGA(GPS定位信息,Global Positioning System Fix Data)
$GPGGA语句的基本格式如下(其中M指单位M,hh指校验和,CR和LF代表回车换行,下同):
$GPGGA,(1),(2),(3),(4),(5),(6),(7),(8),(9),M,(10),M,(11),(12)*hh(CR)(LF)
(1)UTC时间,格式为hhmmss.ss;
(2)纬度,格式为ddmm.mmmmm(度分格式);
(3)纬度半球,N或S(北纬或南纬);
(4)经度,格式为dddmm.mmmmm(度分格式);
(5)经度半球,E或W(东经或西经);
(6)GPS状态,0=未定位,1=非差分定位,2=差分定位;
(7)正在使用的用于定位的卫星数量(00~12)
(8)HDOP水平精确度因子(0.5~99.9)
(9)海拔高度(-9999.9到9999.9米)
(10)大地水准面高度(-9999.9到9999.9米)
(11)差分时间(从最近一次接收到差分信号开始的秒数,非差分定位,此项为空)
(12)差分参考基站标号(0000到1023,首位0也将传送,非差分定位,此项为空)
举例如下:
$GPGGA,023543.00,2308.28715,N,11322.09875,E,1,06,1.49,41.6,M,-5.3,M,,*7D
2,$GPGSA(当前卫星信息)
$GPGSA语句的基本格式如下:
$GPGSA,(1),(2),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(3),(4),(5),(6)*hh(CR)(LF)
(1) 模式,M = 手动,A = 自动。
(2) 定位类型,1=未定位,2=2D定位,3=3D定位。
(3) 正在用于定位的卫星号(01~32)
(4) PDOP综合位置精度因子(0.5-99.9)
(5) HDOP水平精度因子1(0.5-99.9)
(6) VDOP垂直精度因子(0.5-99.9)
举例如下:
$GPGSA,A,3,26,02,05,29,15,21,,,,,,,2.45,1.49,1.94*0E
注1:精度因子值越小,则准确度越高。
3,$GPGSV(可见卫星数,GPS Satellites in View)
$GPGSV语句的基本格式如下:
$GPGSV, (1),(2),(3),(4),(5),(6),(7),...,(4),(5),(6),(7)*hh(CR)(LF)
(1) GSV语句总数。
(2) 本句GSV的编号。
(3) 可见卫星的总数(00~12,前面的0也将被传输)。
(4) 卫星编号(01~32,前面的0也将被传输)。
(5) 卫星仰角(00~90度,前面的0也将被传输)。
(6) 卫星方位角(000~359度,前面的0也将被传输)
(7) 信噪比(00~99dB,没有跟踪到卫星时为空)。
注:每条GSV语句最多包括四颗卫星的信息,其他卫星的信息将在下一条$GPGSV语句中输出。
举例如下:
$GPGSV,3,1,12,02,39,117,25,04,02,127,,05,40,036,24,08,10,052,*7E
$GPGSV,3,2,12,09,35,133,,10,01,073,,15,72,240,22,18,05,274,*7B
$GPGSV,3,3,12,21,10,316,31,24,16,176,,26,65,035,42,29,46,277,18*7A
4,$GPRMC(推荐定位信息,Recommended Minimum Specific GPS/Transit Data)
$GPRMC语句的基本格式如下:
$GPRMC,(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)*hh(CR)(LF)
(1) UTC时间,hhmmss(时分秒)
(2) 定位状态,A=有效定位,V=无效定位
(3) 纬度ddmm.mmmmm(度分)
(4) 纬度半球N(北半球)或S(南半球)
(5) 经度dddmm.mmmmm(度分)
(6) 经度半球E(东经)或W(西经)
(7) 地面速率(000.0~999.9节)
(8) 地面航向(000.0~359.9度,以真北方为参考基准)
(9) UTC日期,ddmmyy(日月年)
(10)磁偏角(000.0~180.0度,前导位数不足则补0)
(11) 磁偏角方向,E(东)或W(西)
(12) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPRMC,023543.00,A,2308.28715,N,11322.09875,E,0.195,,240213,,,A*78
5,$GPVTG(地面速度信息,Track Made Good and Ground Speed)
$GPVTG语句的基本格式如下:
$GPVTG,(1),T,(2),M,(3),N,(4),K,(5)*hh(CR)(LF)
(1) 以真北为参考基准的地面航向(000~359度,前面的0也将被传输)
(2) 以磁北为参考基准的地面航向(000~359度,前面的0也将被传输)
(3) 地面速率(000.0~999.9节,前面的0也将被传输)
(4) 地面速率(0000.0~1851.8公里/小时,前面的0也将被传输)
(5) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPVTG,,T,,M,0.195,N,0.361,K,A*2A
6,$GPGLL(定位地理信息,Geographic Position)
$GPGLL语句的基本格式如下:
$GPGLL,(1),(2),(3),(4),(5),(6),(7)*hh(CR)(LF)
(1) 纬度ddmm.mmmmm(度分)
(2) 纬度半球N(北半球)或S(南半球)
(3) 经度dddmm.mmmmm(度分)
(4) 经度半球E(东经)或W(西经)
(5) UTC时间:hhmmss(时分秒)
(6) 定位状态,A=有效定位,V=无效定位
(7) 模式指示(A=自主定位,D=差分,E=估算,N=数据无效)
举例如下:
$GPGLL,2308.28715,N,11322.09875,E,023543.00,A,A*6A
7,$GPZDA(当前时间信息)
$GPZDA语句的基本格式如下:
$GPZDA,(1),(2),(3),(4),(5),(6)*hh(CR)(LF)
(1) UTC时间:hhmmss(时分秒)
(2) 日
(3) 月
(4) 年
(5) 本地区域小时(NEO-6M未用到,为00)
(6) 本地区域分钟(NEO-6M未用到,为00)
举例如下:
$GPZDA,082710.00,16,09,2002,00,00*64
NMEA-0183协议命令帧部分就介绍到这里,接下来我们看看NMEA-0183协议的校验,通过前面
的介绍,我们知道每一帧最后都有一个hh的校验和,该校验和是通过计算$与*之间所有字符
ASCII码的异或运算得到,将得到的结果以ASCII字符表示就是该校验(hh)。
例如语句:$GPZDA,082710.00,16,09,2002,00,00*64,校验和(红色部分参与计算)计算方法为:
0X47xor 0X50xor 0X5Axor 0X44xor 0X41xor 0X2Cxor 0X30xor 0X38xor 0X32xor 0X37xor
0X31xor 0X30xor 0X2Exor 0X30xor 0X30xor 0X2Cxor 0X31xor 0X36xor 0X2Cxor 0X30xor
0X39xor 0X2Cxor 0X32xor 0X30xor 0X30xor 0X32xor 0X2Cxor 0X30xor 0X30xor 0X2Cxor
0X30xor 0X30
得到的结果就是0X64,用ASCII表示就是64。
NMEA-0183协议我们就介绍到这里,了解了该协议,我们就可以编写单片机代码,解析
NMEA-0183数据,从而得到GPS定位的各种信息了。
程序设计
串口初始化程序
这里我们用到了串口2,我们初始化串口2。
void USART_Config_Init(void)
{USART_InitTypeDef USART_InitStructure;USART_InitStructure.USART_BaudRate = 38400;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_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(USART2, &USART_InitStructure);/* Enable USARTy Receive interrupts */USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);USART_ITConfig(USART2,USART_IT_IDLE,ENABLE);//使能空闲中断/* Enable the USART2 */USART_Cmd(USART2, ENABLE);delay_ms(10);//等待10ms
}
串口2接收中断回调函数
void USART2_IRQHandler(void)
{uint8_t temp;if(USART_GetFlagStatus(USART2, USART_FLAG_ORE) != RESET){ //防止溢出中断USART_ReceiveData(USART2); } if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET){ //USART接收中断temp = USART_ReceiveData(USART2);if(rx_index > RXBUFF_SIZE){ //溢出不再接收数据return;}aRxBuffer[rx_index++] = temp;}if(USART_GetFlagStatus(USART2, USART_FLAG_IDLE) != RESET){ //USART空闲中断USART_ReceiveData(USART2);RX_len=rx_index;memcpy(USART2_RX_BUF,aRxBuffer,RX_len);//把缓冲区的数据,放入需要解析的数组rx_index=0;}}
GPS模块初始化
//配置UBLOX NEO-6的更新速率
//measrate:测量时间间隔,单位为ms,最少不能小于200ms(5Hz)
//reftime:参考时间,0=UTC Time;1=GPS Time(一般设置为1)
//返回值:0,发送成功;其他,发送失败.
uint8_t Ublox_Cfg_Rate(uint16_t measrate,uint8_t reftime)
{_ublox_cfg_rate *cfg_rate=(_ublox_cfg_rate *)USART2_TX_BUF;if(measrate<200)return 1; //小于200ms,直接退出cfg_rate->header=0X62B5; //cfg headercfg_rate->id=0X0806; //cfg rate idcfg_rate->dlength=6; //数据区长度为6个字节.cfg_rate->measrate=measrate;//脉冲间隔,uscfg_rate->navrate=1; //导航速率(周期),固定为1cfg_rate->timeref=reftime; //参考时间为GPS时间Ublox_CheckSum((uint8_t*)(&cfg_rate->id),sizeof(_ublox_cfg_rate)-4,&cfg_rate->cka,&cfg_rate->ckb);HAL_UART_Transmit(USART2, (uint8_t *)&USART2_TX_BUF, sizeof(_ublox_cfg_rate));return Ublox_Cfg_Ack_Check();
}
解析GPS接收到的信息
//NMEA 0183 协议解析后数据存放结构体
__packed typedef struct
{ uint8_t svnum; //可见卫星数nmea_slmsg slmsg[12]; //最多12颗卫星nmea_utc_time utc; //UTC时间uint32_t latitude; //纬度 分扩大100000倍,实际要除以100000uint8_t nshemi; //北纬/南纬,N:北纬;S:南纬 uint32_t longitude; //经度 分扩大100000倍,实际要除以100000uint8_t ewhemi; //东经/西经,E:东经;W:西经uint8_t gpssta; //GPS状态:0,未定位;1,非差分定位;2,差分定位;6,正在估算. uint8_t posslnum; //用于定位的卫星数,0~12.uint8_t possl[12]; //用于定位的卫星编号uint8_t fixmode; //定位类型:1,没有定位;2,2D定位;3,3D定位uint16_t pdop; //位置精度因子 0~500,对应实际值0~50.0uint16_t hdop; //水平精度因子 0~500,对应实际值0~50.0uint16_t vdop; //垂直精度因子 0~500,对应实际值0~50.0 int altitude; //海拔高度,放大了10倍,实际除以10.单位:0.1m uint16_t speed; //地面速率,放大了1000倍,实际除以10.单位:0.001公里/小时
}nmea_msg; //提取NMEA-0183信息
//gpsx:nmea信息结构体
//buf:接收到的GPS数据缓冲区首地址
void GPS_Analysis(nmea_msg *gpsx,uint8_t *buf)
{NMEA_GPGSV_Analysis(gpsx,buf); //GPGSV解析NMEA_GPGGA_Analysis(gpsx,buf); //GPGGA解析 NMEA_GPGSA_Analysis(gpsx,buf); //GPGSA解析NMEA_GPRMC_Analysis(gpsx,buf); //GPRMC解析NMEA_GPVTG_Analysis(gpsx,buf); //GPVTG解析
}
显示GPS解析到的数据
//显示GPS定位信息
void Gps_Msg_Show(void)
{float tp; tp=gpsx.longitude; sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.ewhemi); //得到经度字符串OLED_ShowF16x16(2,1,13);//经OLED_ShowF16x16(2,3,14);//度OLED_ShowString(2,5,(char *)dtbuf);tp=gpsx.latitude; sprintf((char *)dtbuf,":%.5f %1c",tp/=100000,gpsx.nshemi); //得到纬度字符串OLED_ShowF16x16(3,1,15);//纬OLED_ShowF16x16(3,3,16);//度OLED_ShowString(3,5,(char *)dtbuf); if(gpsx.fixmode<=3) //定位状态{ gpsx.utc.hour = gpsx.utc.hour + 8; //已知的UTC时间,转换成北京时间,差8小时if(gpsx.utc.hour>=24){gpsx.utc.hour-=24;}sprintf((char *)dtbuf,":%02d:%02d:%02d",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //显示北京时间OLED_ShowF16x16(4,1,17);//时OLED_ShowF16x16(4,3,18);//间OLED_ShowString(4,5,(char *)dtbuf); }}
完整的工程代码
通过网盘分享的文件:实时显示当前位置GPS信息.zip
链接: https://pan.baidu.com/s/1rIcEV_G6ukU4uVn44VBgMA?pwd=grtu 提取码: grtu
相关文章:
STM32传感器系列:GPS定位模块
简介 我们在做一些项目的时候,可能需要使用到GPS模块,我们可以通过这个模块获得当前的位置以及时间,我这里就教大家如何去使用GPS定位模块,并且把示例代码开源到评论区下面,有需要自取即可,我我这里用到的…...
技术成长战略是什么?
文章目录 技术成长战略是什么?1. 前言2. 跟技术大牛学成长战略2.1 系统性能专家案例2.2 从开源到企业案例2.3 技术媒体大V案例2.4 案例小结 3. 学习金字塔和刻意训练4. 战略思维的诞生5. 建议 技术成长战略是什么? 1. 前言 在波波的微信技术交流群里头…...
【前端】Vue3与Element Plus结合使用的超详细教程:从入门到精通
文章目录 Moss前沿AI一、教程概述1.1 目标读者1.2 学习目标 二、为什么选择Vue3与Element Plus2.1 Vue3的优势2.2 Element Plus的优势2.3 二者结合的优势 三、环境搭建3.1 创建Vue3项目3.2 安装Element Plus3.3 引入Element Plus 四、Element Plus常用组件使用详解4.1 按钮&…...
Linux 35.6 + JetPack v5.1.4之 pytorch升级
Linux 35.6 JetPack v5.1.4之 pytorch升级 1. 源由2. 升级步骤1:获取二进制版本步骤2:安装二进制版本步骤3:获取torchvision步骤4:安装torchvision步骤5:检查安装版本 3. 使用4. 补充4.1 torchvision版本问题4.2 支持…...
旷视科技C++面试题及参考答案
在 Linux 系统下常用的命令有哪些? 在 Linux 系统中有许多常用命令。首先是文件和目录操作相关的命令。“ls” 命令用于列出目录的内容,它有很多选项,比如 “ls -l” 可以以长格式显示文件和目录的详细信息,包括文件权限、所有者、大小、修改时间等;“ls -a” 则会显示所有…...
C 语言函数指针 (Pointers to Functions, Function Pointers)
C 语言函数指针 {Pointers to Functions, Function Pointers} 1. Pointers to Functions (函数指针)2. Function Pointers (函数指针)2.1. Declaring Function Pointers2.2. Assigning Function Pointers2.3. Calling Function Pointers 3. Jump Tables (转移表)References 1. …...
66.基于SpringBoot + Vue实现的前后端分离-律师事务所案件管理系统(项目 + 论文)
项目介绍 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装律师事务所案件管理系统软件来发挥其高效地信息处理的作用…...
Docker容器中Elasticsearch内存不足问题排查与解决方案
在使用Docker运行Elasticsearch(ES)时,可能会遇到内存不足的问题,导致ES无法启动。以下是一次完整的排查和解决过程。 问题描述 在启动ES时,日志提示如下错误: # Native memory allocation (mmap) failed…...
Ubuntu 下测试 NVME SSD 的读写速度
在 Ubuntu 系统下,测试 NVME SSD 的读写速度,有好多种方法,常用的有如下几种: 1. Gnome-disks Gnome-disks(也称为“Disks”)是 GNOME 桌面环境中的磁盘管理工具,有图形界面,是测试…...
Neo4j的部署和操作
注:本博文展示部署哥操作步骤和命令,具体报告及运行截图可通过上方免费资源绑定下载 一.数据库的部署与配置 在单个节点上对进行数据库的单机部署 (1)上传neo4j-community-3.5.30-unix.tar.gz到hadoop1的/export/so…...
react axios 优化示例
使用 axios 是 React 项目中非常常见的 HTTP 请求库。为了提升 axios 在 React 中的性能、可维护性和用户体验,我们可以从 代码组织、请求优化 和 用户体验优化 多个角度进行详细的优化。 一、安装与基础配置 安装 axios npm install axios创建 Axios 实例 为了更好地管理…...
探索数字化展馆:开启科技与文化的奇幻之旅
在科技飞速发展的当下,数字展馆作为一种新兴的展示形式,正逐渐走进大众的视野。数字展馆不仅仅是传统展馆的简单“数字化升级”,更是融合了多媒体、数字化技术以及人机交互等前沿科技的创新产物。 数字展馆借助VR、AR、全息投影等高科技手段&…...
基于深度学习的视觉检测小项目(七) 开始组态界面
开始设计和组态画面。 • 关于背景和配色 在组态画面之前,先要确定好画面的风格和色系。如果有前端经验和美术功底,可以建立自己的配色体系。像我这种工科男,就只能从网络上下载一些别人做好的优秀界面,然后在photo shop中抠取色…...
AI赋能跨境电商:魔珐科技3D数字人破解出海痛点
跨境出海进入狂飙时代,AI应用正在深度渗透并重塑着跨境电商产业链的每一个环节,迎来了发展的高光时刻。生成式AI时代的大幕拉开,AI工具快速迭代,为跨境电商行业的突破与飞跃带来了无限可能性。 由于跨境电商业务自身特性鲜明&…...
【C/C++】nlohmann::json从文件读取json,并进行解析打印,实例DEMO
使用 json::parse 函数将JSON格式的字符串解析为 nlohmann::json 对象。这个函数支持多种输入源,包括字符串、文件流等。 #include <iostream> #include <nlohmann/json.hpp> #include <fstream>using json nlohmann::json;int main() {// 解析…...
安装Anaconda搭建Python环境,并使用VSCode作为IDE运行Python脚本
下面详细说明如何安装Anaconda搭建Python环境,并使用VSCode作为编辑器运行Python脚本的过程: 1. 下载Anaconda 访问Anaconda的官方网站:https://www.anaconda.com/products/distribution 3. 根据您的操作系统选择适合的版本下载。Anaconda支…...
我用AI学Android Jetpack Compose之入门篇(1)
这篇我们先来跑通第一个Android Jetpack Compose工程,现在新版本的Android Studio,新建工程选择Empty Activity默认就会开启Jetpack Compose的支持,再次声明,答案来自 通义千问Ai 文章目录 1.用Android Jetpack Compose需要安装什…...
使用 Docker 查看 Elasticsearch 错误日志
在使用 Elasticsearch(简称 ES)的过程中,我们可能会遇到各种问题。为了快速定位和解决这些问题,查看错误日志是关键。本文将介绍如何使用 Docker 查看 Elasticsearch 的错误日志,并提供一些实用技巧。 1. 安装 Docker…...
使用Apache Mahout制作 推荐引擎
目录 创建工程 基本概念 关键概念 基于用户与基于项目的分析 计算相似度的方法 协同过滤 基于内容的过滤 混合方法 创建一个推荐引擎 图书评分数据集 加载数据 从文件加载数据 从数据库加载数据 内存数据库 协同过滤 基于用户的过滤 基于项目的过滤 添加自定…...
Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询
作者:来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布,它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
