物联网Lora模块从入门到精通(七)串口通讯

2023-10-27

一、前言

        在Lora模块的程序设计中,串口通信一定是一个极其重要且常用的通信方式,借助串口通信,我们不但可以向外传输我们获取的数据,还可以根据外部指令做出相应。

        同样的,在例程中,为我们提供了一个名为usart1-board.c的库,帮助我们更好更快的完成串口通信任务的开发。

二、代码实现

        本文的任务是当取到的数据通过串口以ASCII格式向外发送,并通过串口调试助手接受来着上位机的指令做出对应的操作。

        具体任务如下:

        单片机间隔一秒向上位机发送光照数据,并记录发送次数,当收到来自上位机的复位指令FA 00 FB时,清空发送次数。

        通过分析usart1-board.c库,我们常会使用下列方法:

void USART1_Init(uint32_t bound);
//初始化串口 bound为波特率
void USART1_SendStr(uint8_t *Data, uint16_t length);
//发送uint8_t类型数据数组 length为发送的长度
uint16_t USART1_ReadRxBuffer( uint8_t *payload);
//接受来自串口的内容并存入传入的数据数组内 返回接受到的数据长度

        代码示例:

#include <string.h>
#include "board.h"
#include "hal_key.h"
#include "tim-board.h"
#include "timer_handles.h"
#include "led_light.h"
#include "adc_reader.h"
#include <math.h>          //library 
#include <stdio.h>
#include "stm32l1xx_hal.h" // controller register definitions 
#include "sht1x.h"         // controller register definitions 
#include "sht3x.h"
#include "usart1-board.h"

void Init() {
    BoardInitMcu();
    BoardInitPeriph();
    keys_init();//按键初始化
    setTimer2Callback(Time2Handler);
    Tim2McuInit(1);//定时器初始化,设置定时中断1ms中断一次
};

int count=0;//用于记录发送次数
float temp=0,hum=0,light=0;

uint8_t data[30];
int main( void )
{
    Init();
		ADCS_Init();//初始化ADC
		hal_temHumInit();//初始化温湿度模块
		USART1_Init(115200);
    while( 1 )
    {
				HAL_Delay(1000);//延时1000ms
				memset(data,'\0',30);//清空数组内容
				if(USART1_ReadRxBuffer(data)!=0)//如果接收到内容
				{
					if(data[0]==0xfa)//如果指令正确
						if(data[1]==0x00)
							if(data[2]==0xfb)
								count=0;//计数器清零
				}
				AdcScanChannel();//更新通道值
				light=((5.0/2.0)*AdcReadCh0())*100.0;//获取光照并通过公式计算
				call_sht11(&temp,&hum);//获取温湿度
				memset(data,'\0',30);//清空数组内容
				sprintf((char *)data,"Count=%d,Light=%.2f Lx",count+1,light);//将内容存入数组
				USART1_SendStr(data,30);//发送数据
				count++;//发送完一次数据计数器增加
    }
}

        效果展示:

        

        此时,我们已经完成了串口数据的接受与发送,但这仅仅是我们学习串口通信的基础。

        串口通信的数据一般有两种解析的方式:ASCII、Hex。但其本质上都是以二进制传输的,不过是对数据的处理不同。

三、关于数据的处理

        关于数据的处理,一般分为基础知识与数据解析,学习可以帮助我们完善编程的思维,更好更快的写出我们需要的程序。

        如果你想要掌握,下面两篇文章是你必须熟悉的:

Zigbee、STM32单片机串口收发必会数据传输-uint8、uint16等数据的解析-串口传输多数据与解析-物联网

数据传输中的数据转换与处理的常用方法-物联网开发-单片机通信

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

物联网Lora模块从入门到精通(七)串口通讯 的相关文章

  • 四种常见的登录方案

    1 Cookie Session 登录 HTTP 是一种无状态的协议 客户端每次发送请求时 首先要和服务器端建立一个连接 在请求完成后又会断开这个连接 这种方式可以节省传输时占用的连接资源 但同时也存在一个问题 每次请求都是独立的 服务器端
  • Mysql高可用高性能存储应用系列4 - 分库分表、中间件

    概述 为什么要分库的原因 1 很多时候接口性能慢都是数据库造成的 2 并发量比较大时 大量的数据库请求 会带来磁盘I O的性能瓶颈 3 来越多 导致sql查询数据 即使走了索引也比较慢 分库分表的场景 分库和分表是不同的两个概念 解决的问题

随机推荐

  • mac os操作系统如何降级

    降级方法 哔哩哔哩视频有相关讲解方法 一种是U盘启动方法 去app store下载相应版本操作系统 速度快 或者百度云 速度慢 做U盘启动盘 重启 键盘按住option键 抹掉硬盘数据 然后执行安装系统 过半个小时以上 完成安装 还有一种是
  • Linux jq 命令讲解与实战操作(json字符串解析工具)

    文章目录 一 概述 二 jq 命令安装 三 jq 命令语法与示例详解 1 基本用法 2 常用选项 3 查询和过滤 1 选择字段 2 过滤 3 遍历数组 4 组合操作 4 修改和创建 1 修改字段值 2 创建新字段 3 组合操作 4 条件修改
  • redis设计与实现读书笔记-数据结构

    简单动态字符串 数据结构 SDS与C字符串的区别 C语言使用长度为N 1的字符数组来表示长度为N的字符串 并且字符数组的最后一个元素总是空字符 0 C字符串并不记录自身的长度信息 所以为了获取一个C字符串的长度 程序必须遍历整个字符串 和C
  • write(byte b[], int off, int len)与write(byte b[])

    在进行写文件的时候有时候返现 通过write byte b 方式写文件比原来的文件大一些 流程代码 public static void main String args throws Exception long t1 System cu
  • 安防摄像头已分别接入乐橙云、萤石云,如何实现私有云平台的统一管理与向上级联?

    一 背景分析 科技创新对社会发展的重要性不言而喻 对于安防行业来说 人工智能和5G等新技术的应用 已经成为推动智能安防发展的一块关键踏板 从技术维度来看 人工智能 云计算 大数据 物联网等技术在安防视频监控领域产生了较多的交汇与融合 新技术
  • 冲刺必会代码100题(1-31)

    说在前面 链表章节 22题之前 多处用到了二级指针 有些地方可以选择使用一级指针也可 题目目录 1 顺序表01 2023 08 19 1 题目描述 2 算法思想 3 代码示例 4 总结 2 顺序表02 2023 08 19 1 题目描述 2
  • matlab如何输入数值,如何将数据输入到训练的神经网络算法 - MATLAB

    这是很基本的 但我似乎无法在网上找到答案 如何将数据输入到训练的神经网络算法 MATLAB 我已经开发了使用MATLAB进行分类的神经网络 但是 我想以预期的方式向训练算法提供用于预测的新数据集 我似乎无法弄清函数myNeuralNetwo
  • protected 权限方法调用.

    在同一个包中 子类可以调用父类的protected方法 子类的对象也可以调用父类的protected 方法 在不同的包中 在子类的内部可以调用父类 超类的protected 方法 但是子类的对象无法调用父类 超类的protected方法
  • MD5 算法流程

    先通过下面的命令对 md5算法有个感性的认识 md5sum tmp 1 txt 1dc792fcaf345a07b10248a387cc2718 tmp 1 txt md5sum 从键盘输入 ctrl d 结束输入 hello world
  • Unity 运行时到处fbx-Autodesk FBX SDK for Unity

    参考链接
  • VMware 虚拟机快照、克隆、磁盘扩容

    1 快照 快照是虚拟机某个时间点上完整系统的镜像 可以在虚拟机内部通过快照文件恢复系统到之前的节点 拍摄快照 恢复快照 2 克隆 克隆是原始虚拟机全部状态的一个拷贝 是脱离原始虚拟机独立存在的 可以在宿主机或其他机器上通过克隆文件创建一个完
  • Python初级到高级调试

    Python初级到高级调试 什么是Python调试 为什么调试很重要 如何在python中执行调试 需要调试的编码错误是什么 常见的调试技术有哪些 什么是Python调试器 Python模块 参考 这篇博客通过示例介绍调试的一些基本和常见用
  • JavaWeb详讲

    JavaWeb内容 一 Servlet简介 Servlet 就是 Sun 公司开发动态 Web 的一门技术 Sun 在这些 API Application Programming Interface 应用程序接口 中提供一个接口叫做 Ser
  • 区块链 - 分布式账本技术的应用优势

    区块链技术正在改变世界各地的工业 它将组织 政府 金融机构和支付平台引入一个新的数字时代 它改变了我们周围的一切 但很多人仍然不知道区块链是什么或区块链技术如何工作 今天 我们为您具体解释什么是区块链和区块链技术的核心内容 什么是区块链 区
  • 如何写好一篇拆书稿?

    前段时间报名参加了知乎写作课 其中有一节课程 介绍如何写好拆书稿 之后不久 看到有人在知乎提问相关问题 便简单整理课程笔记 增加了一些自己的理解 作为回答 算是现学现卖吧 虽然拆书稿不是写作变现的最好渠道 但是刻意练习拆解图书内容 有助于提
  • 万字攻略全面了解selenium_selenium教程

    今天带大家一起学习下python爬虫4小分队 scrapy beautifulsoup selenium以及pyppeteer 之一的Selenium库 主要用于模拟浏览器运行 是一个用于web应用测试的工具 Selenium直接运行在浏览
  • 小程序评论回复功能

  • 超级详细!!!node.js中读写文件方法总结

    nodejs中所有与文件相关的操作都在fs模块中 而读写操作又是我们会经常用到的操作 nodejs的fs模块针对读操作为我们提供了readFile read createReadStream三个方法 针对写操作为我们提供了writeFile
  • 使用OpenSSL进行RSA加密和解密(非对称)

    1 RSA加密和解密基础概念 RSA是一种非对称加密 RSA秘钥 私钥和公钥 一对私钥和公钥就像夫妻一样是唯一的 用私钥加密后必须用对应的公钥才能解密 用公钥加密后必须用对应的私钥才能解密 加密和解密方式 公钥加密 私钥解密 私钥加密 公钥
  • 物联网Lora模块从入门到精通(七)串口通讯

    一 前言 在Lora模块的程序设计中 串口通信一定是一个极其重要且常用的通信方式 借助串口通信 我们不但可以向外传输我们获取的数据 还可以根据外部指令做出相应 同样的 在例程中 为我们提供了一个名为usart1 board c的库 帮助我们