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

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

  • 软硬件准备
    • 接线及模块划分
    • 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模块的开发

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

初始JavaEE篇 —— Spring Web MVC入门(上)

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;JavaEE 目录 RequestMappingg 注解介绍 Postman的介绍与使用 PostMapping 与 GetMapping 注解 构造并接收请求 接收简单参数 接收对象…

浅谈Unity中Canvas的三种渲染模式

Overview UGUI通过 Canvas 组件渲染和管理UI元素。Canvas 是 UI 元素的容器&#xff0c;它决定了 UI 元素的渲染方式以及它们在屏幕上的显示效果。Canvas 有三种主要的渲染模式&#xff0c;每种模式有不同的用途和特点。本文将介绍这三种渲染模式 1. Screen Space - Overlay 模…

C++17 std::variant 详解:概念、用法和实现细节

文章目录 简介基本概念定义和使用std::variant与传统联合体union的区别 多类型值存储示例初始化修改判断variant中对应类型是否有值获取std::variant中的值获取当前使用的type在variant声明中的索引 访问std::variant中的值使用std::get使用std::get_if 错误处理和访问未初始化…

NoteGen:记录、写作与AI融合的跨端笔记应用

在信息爆炸的时代,如何高效地捕捉灵感、整理知识并进行创作成为了许多人关注的问题。为此,我们开发了 NoteGen,一款专注于记录和写作的跨端 AI 笔记应用。它基于 Tauri 开发,利用其强大的跨平台能力支持 Mac、Windows 和 Linux 系统,并计划未来扩展到 iOS 和 Android 平台…

SET alter system reload

目录标题 alter system 只是 写 auto 文件SET & alter system1. **会话级别参数&#xff08;Session-level parameters&#xff09;**2. **系统级别参数&#xff08;System-level parameters&#xff09;**3. **某些特定的超级用户参数**4. **修改时生效的参数**总结&#…

Ubuntu20.04 磁盘空间扩展教程

Ubuntu20.04 磁盘空间扩展教程_ubuntu20 gpart扩容-CSDN博客文章浏览阅读2w次&#xff0c;点赞38次&#xff0c;收藏119次。执行命令查看系统容量相关的数据&#xff1a;df -h当前容量为20G&#xff0c;已用18G&#xff08;96%&#xff09;&#xff0c;可用844M&#xff0c;可用…

无心剑七绝《除夕快乐》

七绝除夕快乐 除旧迎新瑞气扬 夕阳烂漫映红妆 快言美酒佳肴味 乐享天伦福满堂 2025年1月28日 平水韵七阳平韵 无心剑这首七绝以“除夕快乐”为题&#xff0c;巧妙地运用了藏头手法&#xff0c;将“除夕快乐”四字分别嵌入诗的每一句首字&#xff0c;构思精巧&#xff0c;富有新…

WebSocket 详解:全双工通信的实现与应用

目录 一、什么是 WebSocket&#xff1f;&#xff08;简介&#xff09; 二、为什么需要 WebSocket&#xff1f; 三、HTTP 与 WebSocket 的区别 WebSocket 的劣势 WebSocket 的常见应用场景 WebSocket 握手过程 WebSocket 事件处理和生命周期 一、什么是 WebSocket&#xf…

机器人抓取与操作概述(深蓝)——1

工业机器人&#xff1a;① “臂”的形态 ② “手”的形态 ③ 视觉&#xff0c;力和触觉 1 机器人的不同形态 “臂”的形态 “手”的形态 2 常见的操作任务 操作&#xff1a;插入、推和滑 抓取&#xff1a;两指&#xff08;平行夹爪&#xff09;抓取、灵巧手抓取 落地-产…

人物传记之新月篇

相关故事链接&#xff08;及时更新&#xff09;&#xff1a;Python的那些事第四篇&#xff1a;编程中的智慧之光控制结构-CSDN博客 目录 1. C语言程序&#xff1a;增强版加密与解密工具 2. Python程序&#xff1a;增强版加密与解密工具 功能对比表格 详细功能解释 人物传记…

Tensor 基本操作4 理解 indexing,加减乘除和 broadcasting 运算 | PyTorch 深度学习实战

前一篇文章&#xff0c;Tensor 基本操作3 理解 shape, stride, storage, view&#xff0c;is_contiguous 和 reshape 操作 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started Tensor 基本使用 索引 indexing示例代码 加减…

2024收尾工作

目录 开场白 栈与队列 LeetCode232. 用栈实现队列 LeetCode225. 用队列实现栈 LeetCode102. 二叉树的层序遍历 LeetCode103. 二叉树的锯齿形层序遍历 堆&#xff08;优先级队列&#xff09; 堆排序 LeetCode215. 数组中的第 k 个最大元素 总结 开场白 今天是除夕&…

【反悔堆】【hard】力扣871. 最低加油次数

汽车从起点出发驶向目的地&#xff0c;该目的地位于出发位置东面 target 英里处。 沿途有加油站&#xff0c;用数组 stations 表示。其中 stations[i] [positioni, fueli] 表示第 i 个加油站位于出发位置东面 positioni 英里处&#xff0c;并且有 fueli 升汽油。 假设汽车油…

PWM频率测量方法

测量PWM&#xff08;脉宽调制&#xff09;信号的频率是嵌入式系统中的常见需求&#xff0c;尤其是在电机控制、LED调光、传感器信号处理等场景中。 在这里介绍两种测量PWM频率的方法&#xff1a;测频法与测周法。 1、测频&#xff08;率&#xff09;法 原理&#xff1a;在闸门…

银行卡三要素验证接口:方便快捷地实现银行卡核验功能

银行卡三要素验证API&#xff1a;防止欺诈交易的有力武器 随着互联网的发展&#xff0c;电子支付方式也越来越普及。在支付过程中&#xff0c;银行卡是最常用的支付工具之一。然而&#xff0c;在一些支付场景中&#xff0c;需要对用户的银行卡信息进行验证&#xff0c;以确保支…

常见字符串相关题目

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a; 优选算法专题 目录 14.最长公共前缀 5.最长回文子串 67.二进制求和 43.字符串相乘 14.最长公共前缀 题目&#xff1a; 编写一个函数来查…

DeepSeek:突破传统的AI算法与下载排行分析

DeepSeek的AI算法突破DeepSeek相较于OpenAI以及其它平台的性能对比DeepSeek的下载排行分析&#xff08;截止2025/1/28 AI人工智能相关DeepSeek甚至一度被推上了搜索&#xff09;未来发展趋势总结 在人工智能技术飞速发展的当下&#xff0c;搜索引擎市场也迎来了新的变革。DeepS…

2025神奇的数字—新年快乐

2025年&#xff0c;一个神奇的数字&#xff0c;承载着数学的奥秘与无限可能。它是45的平方&#xff08;45&#xff09;&#xff0c;上一个这样的年份是1936年&#xff08;44&#xff09;&#xff0c;下一个则是2116年&#xff08;46&#xff09;&#xff0c;一生仅此一次。2025…

搭建Spark分布式集群

1&#xff0c;下载 下载 spark-3.5.4-bin-without-hadoop.tgz 地址&#xff1a; https://downloads.apache.org/spark/spark-3.5.4/ 2&#xff0c;安装 通过虚拟机设置共享文件夹将需要的安装包复制到linux虚拟机中 localhost1。虚拟机的共享盘在 /mnt/hgfs/。 将共享盘安装…

2025春晚刘谦魔术揭秘魔术过程

2025春晚刘谦魔术揭秘魔术过程 首先来看全过程 将杯子&#xff0c;筷子&#xff0c;勺子以任意顺序摆成一排 1.筷子和左边物体交换位置 2.杯子和右边物体交换位置 3.勺子和左边物体交换位置 最终魔术的结果是右手出现了杯子 这个就是一个简单的分类讨论的问题。 今年的魔术…