【自学嵌入式(6)天气时钟:软硬件准备、串口模块开发】

server/2025/2/3 21:19:43/

天气时钟:软硬件准备、串口模块开发

  • 软硬件准备
    • 接线及模块划分
    • ESP8266开发板引脚图
    • 软件准备
  • 串口模块编写
    • 串口介绍
    • Serial库介绍

近期跟着网上一些教学视频,编写了一个天气时钟,本篇及往后数篇都将围绕天气时钟的制作过程展开。本文先解决硬件准备、软件准备、串口模块开发等问题。

软硬件准备

此次实验中,我使用ESP8266开发板、0.96寸四针OLED屏幕、micro USB线及若干杜邦线。

接线及模块划分

在这里插入图片描述
在这里插入图片描述

ESP8266开发板引脚图

在这里插入图片描述

① 如上图所示,在很多介绍ESP8266以及NodeMCU的资料里会出现两种引脚命名方法。一种是GPIO编号,一种是NodeMCU引脚名。但这两者是不同的,千万不要混淆:

  • GPIO编号指的是ESP8266芯片的引脚编号,通常不会因为生产厂家不同而不同
  • NodeMCU引脚名指的是电路板上印刷的引脚名称,这通常会因为生产厂家不同而有所区别

② ESP8266芯片一共有17个GPIO引脚(GPIO0 ~ GPIO16),其中存在一些较为特殊的引脚:

  • GPIO6 ~ GPIO11通常被用于连接开发板的闪存(Flash Memory),在实际编写代码时,应当尽量避免使用这些引脚
  • GPIO2引脚在NodeMCU开发板启动时是不能连接低电平的
  • GPIO15引脚在开发板运行中一直保持低电平状态
  • GPIO0引脚在开发板运行中需要一直保持高电平状态,否则ESP8266将进入程序上传工作模式,无法正常工作,因此通常情况下,无需对GPIO0做任何改动

软件准备

本次实验需要使用Arduino IDE、CH340驱动以及u8g2库、ArduinoJson库、NTPClient库等。其中Arduino IDE和CH340驱动已经配置好,剩下三个库,只需在Arduino的库管理中搜索并下载相应的库文件包即可,我原先有库文件压缩包,因此使用添加.ZIP库的形式导入

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

串口模块编写

串口模块主要用于方便程序员调试功能,无需过于复杂,因此只需要封装用于初始化的函数 serialInit() 和用于输出信息的函数 serialPrint()即可。在之前的文章中,专门介绍过串口和Serial库,此处再来温习一下

串口介绍

串口,也称为串行接口或串行通信接口(通常指COM接口),是一种采用串行通信方式的扩展接口。它实现了数据一位一位地顺序传送,具有通信线路简单、成本低但传送速度慢的特点。只要一对传输线,串口就可以实现双向通信。

在这里插入图片描述

  1. 起始位(Start Bit):起始位为低电平时,告诉接收方数据传输即将开始,准备接收。在通信开始时,发送端首先会发送一个起始位,它是一个逻辑0(低电平)的信号,用于同步发送和接收设备之间的时钟。接收端在检测到起始位后,会开始准备接收后续的数据位。
  2. 有效数据位(Data Bits):数据位是由一系列二进制值组成,用于传输或接收实际的数据。数据位的数量决定了可以传输的不同二进制值的数量,常见的有5位、6位、7位、8位,LSB在前,MSB在后。数据位紧随起始位之后,包含了要传输的实际信息。
  3. 校验位(Parity Bit):校验位用于验证数据的完整性,以确保传输过程中没有出现错误。常见的校验位选项有None(无校验位)、Odd(奇校验位)和Even(偶校验位)。在发送数据时,校验位会根据数据位中1的个数进行计算,并加入到数据中一起传输。接收端则会根据校验位的值进行校验,以判断数据是否存在错误。
  4. 停止位(Stop Bit):停止位是一个逻辑高电平,用于指示数据传输的结束。当停止位出现时,接收端知道数据传输已经完成,并且可以开始处理接收到的数据。停止位位于数据位和校验位之后,它的作用是确保接收端有足够的时间来识别数据帧的结束,并为下一个数据帧的到来做好准备。

比特率:每秒能传输的二进制位数;

波特率:每秒传送的码元的个数;

二进制系统中,波特率数值上等于比特率。

Serial库介绍

  1. 初始化串口通信:

    • Serial.begin(baud_rate): 初始化串口通信,baud_rate是波特率,常用的波特率有9600、115200等。
  2. 发送数据

    • Serial.print(data): 发送数据到串口,不会自动换行。
    • Serial.println(data): 发送数据到串口,并在数据后添加换行符。
  3. 接收数据

    • Serial.available(): 返回串口缓冲区中可读取的字节数。
    • Serial.read(): 读取串口缓冲区中的一个字节。
    • Serial.readString(): 读取串口缓冲区中的字符串,直到超时或没有更多数据。
  4. 其他功能

    • Serial.flush(): 等待所有传输的数据发送完毕。
    • Serial.end(): 结束串口通信。

头文件

// serial.h头文件
#ifndef SERIAL_H  // 防止头文件被多次包含
#define SERIAL_H#include <Arduino.h>
void serialInit(int baud_rate);   // 初始化函数,输入波特率
void serialPrint(String message); // 串口输出信息#endif

cpp文件

#include "serial.h"// 初始化串口模块(指定波特率)
void serialInit(int baud_rate) {Serial.begin(baud_rate);
}// 打印调试信息
void serialPrint(String message) {// 打印出来的效果是  [时间戳] 消息内容Serial.print("[");Serial.print(millis()); // 打印从开始运行到现在的时间Serial.print("]");Serial.println(message);
}
millis()函数用于返回自程序开始运行以来经过的时间(以毫秒为单位),方便我们了解信息输出的时间

下一篇文章,我们将着重讨论WiFi模块和OLED模块的开发


http://www.ppmy.cn/server/164713.html

相关文章

STM32-时钟树

STM32-时钟树 时钟 时钟

11 Spark面试真题

11 Spark大厂面试真题 1. 通常来说&#xff0c;Spark与MapReduce相比&#xff0c;Spark运行效率更高。请说明效率更高来源于Spark内置的哪些机制&#xff1f;2. hadoop和spark使用场景&#xff1f;3. spark如何保证宕机迅速恢复?4. hadoop和spark的相同点和不同点&#xff1f;…

基于深度学习的视觉检测小项目(十六) 用户管理界面的组态

分组和权限&#xff1a; 用户分为三个组&#xff0c;管理员、普通用户、访客。 • 管理员的权限和作业范围&#xff1a; 添加和删除用户、更改所有用户的信息&#xff08;用户名、登录密码、所在分组等&#xff09;、查看和备份以及复制数据库&#xff1b; • 普通用户的权限和…

春晚舞台上的人形机器人:科技与文化的奇妙融合

文章目录 人形机器人Unitree H1的“硬核”实力传统文化与现代科技的创新融合网友热议与文化共鸣未来展望&#xff1a;科技与文化的更多可能结语 2025 年央视春晚的舞台&#xff0c;无疑是全球华人目光聚焦的焦点。就在这个盛大的舞台上&#xff0c;一场名为《秧BOT》的创意融合…

机器学习--概览

一、机器学习基础概念 1. 定义 机器学习&#xff08;Machine Learning, ML&#xff09;&#xff1a;通过算法让计算机从数据中自动学习规律&#xff0c;并利用学习到的模型进行预测或决策&#xff0c;而无需显式编程。 2. 与编程的区别 传统编程机器学习输入&#xff1a;规…

OSCP - Proving Grounds - Jordak

主要知识点 /usr/bin/env提权 具体步骤 执行nmap扫描 Starting Nmap 7.95 ( https://nmap.org ) at 2024-10-27 19:54 China Standard Time Nmap scan report for 192.168.221.109 Host is up (0.069s latency). Not shown: 65533 filtered tcp ports (no-response) PORT …

论文阅读(十一):基因-表型关联贝叶斯网络模型的评分、搜索和评估

1.论文链接&#xff1a;Scoring, Searching and Evaluating Bayesian Network Models of Gene-phenotype Association 摘要&#xff1a; 全基因组关联研究&#xff08;GWAS&#xff09;的到来为识别常见疾病的遗传变异&#xff08;单核苷酸多态性&#xff08;SNP&#xff09;&…

Python从零构建macOS状态栏应用(仿ollama)并集成AI同款流式聊天 API 服务(含打包为独立应用)

在本教程中,我们将一步步构建一个 macOS 状态栏应用程序,并集成一个 Flask 服务器,提供流式响应的 API 服务。 如果你手中正好持有一台 MacBook Pro,又怀揣着搭建 AI 聊天服务的想法,却不知从何处迈出第一步,那么这篇文章绝对是你的及时雨。 最终,我们将实现以下功能: …