# CW_ESP8266_SSD1306_I2C_4PIN_1
**Repository Path**: wangdong1995/cw_esp8266_ssd1306_i2c_4pin_1
## Basic Information
- **Project Name**: CW_ESP8266_SSD1306_I2C_4PIN_1
- **Description**: 莫尔斯电码练习器。在EPS8266开发板(NodeMCU)上使用Arduino实现。可以通过MQTT进行模拟通联。
- **Primary Language**: C
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: https://www.bilibili.com/video/av82431456/
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 25
- **Created**: 2022-06-21
- **Last Updated**: 2022-06-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 莫尔斯电码练习器
在ESP8266上使用ARDUUINO实现的莫尔斯电码练习器。
#### 此版本使用的OLED显示屏为SSD1306 I2C 4引脚版本。
### 详细的使用方法请关注B站 视频 内容
## 主要功能介绍
- 支持手动和自动电键
- 自动电键的点和划可以互换
- 可以通过WIFI将拍发的电码发送到指定的MQTT服务器,并接收指定MQTT服务器的其他练习器拍发的电码,并播报
- 拍发速度可调节
- 播放速度可调节
- 防抖时长可调节
- 开启网络功能时,停止拍发电码后1.5秒后自动发送电码到指定的MQTT服务器
## 关于备用WIFI
主WIFI和备用WIFI填写一个即可。启动网络后先搜索主WIFI信号,如搜索到则尝试连接,20秒连接超时过后会尝试连接备用WIFI。
## 硬件清单
|模块|数量|
|:---|:---:|
|ESP8266开发板(NodeMCU)|1|
|OLED显示屏 128×64分辨率 SSD1306驱动芯片 I2C通信 4引脚|1|
|旋转编码器 数字脉冲输出 可按压 5引脚|1|
|3.5毫米音频母座 3引脚|1|
|无源蜂鸣器|1|
|杜邦线|若干|
## 如何在Arduino的IDE中添加ESP8266开发板
打开Arduino的IDE,打开“首选项”,在“附加开发板管理器网址”中添加如下地址:`http://arduino.esp8266.com/stable/package_esp8266com_index.json `,添加完成后保存。再点击“工具”->“开发板”->“开发板管理器”。在顶部的搜索框中填写“ESP8266”并按下回车进行搜索,安装搜索到的项目即可。
## 接线方法
### OLED
|OLED|ESP8266|
| :---: | :---: |
| VCC | 3.3V |
| GND | GND |
|SCL|D1(GPIO 5)|
|SDA|D2(GPIO 4)|
### 自动电键(KEY)
|KEY|ESP8266|
|:---:|:---:|
|1|D4(GPIO 2)|
|2|D7(GPIO 13)|
|GND|GND|
### 手动电键
|KEY|ESP8266|
|:---:|:---:|
|1|D4(GPIO 2)|
|GND|GND|
#### 说明:以上两种电键接法根据自己的需要选择其中一种。自动电键的接法同时支持手动电键,但手动建的接法无法使用自动电键。
### 编码器
|ENCODER|ESP8266|
|:---:|:---:|
|GND|GND|
|+|3.3V|
|SW|D6(GPIO 12)|
|DT|D5(GPIO 14)|
|CLK|D3(GPIO 0)|
### 蜂鸣器
|BEE|ESP8266|
|:---:|:---:|
|VCC|3.3V|
|GND|GND|
|IO|D0(GPIO 16)|
#### 说明:以上蜂鸣器为无源蜂鸣器
## 依赖的库
ESP8266WiFi
EEPROM
PubSubClient (By Nick O'Leary)
Adafruit_SSD1306 (By Adafrult)
Adafruit GFX Library (By Adafrult)
U8g2_for_Adafruit_GFX (By ollver)
## 如何进入“设置”
在开机界面时,按下或旋转编码器,即可进入设置界面。
## “设置”项目说明
#### 返回
从设置页面返回到默认页面
#### 调整音调
更改蜂鸣器的鸣叫驱动频率,从而达到调整蜂鸣器鸣叫音调的目的。
#### 电键类型
设置所使用的电机按类型。可设置为“手动电键”(Manual)或“自动电键”(Auto)。
#### 按键方向
设置自动电键中,左、右浆按下后所键入的是“点”或“划”。默认左浆为点(L-Di),可以设置为右浆为点(R-Di)。
#### 是否播放
设置从MQTT服务器收到自己拍发的莫尔斯电码后是否播放出来。此设置仅对收到自己拍发的电码有效,对收到他人的电码此设置无效。
#### 是否转换
是否将从MQTT服务器收到的莫尔斯电码转换为对应的字符,并显示出来。
#### 拍发时长
不同于其他的莫尔斯电码练习器,此练习器的拍发速度调节以“点”的最大时长为调节依据(为了方便说明,后文将“点”的最大时长称为“单位时长”,即设置中的“拍发时长”)。使用手动电键拍发时,电键按下至释放的时长若小于“单位时长”,则认为此次键入为“点”。若大于“单位时长”,则认为此次键入为“划”。事实上“单位时长”可以认为是“点”和“划”的临界时长。
在使用自动键拍发时,“点”的时长为0.5倍“单位时长”,“划”的时长为1.5倍“单位时长”,电码之间的间隔为0.5倍“单位时长”。
#### 播放时长
在从MQTT服务器收到电码后,播放电码的“单位时长”。
#### 防抖时长
设置电键防抖的时长。
#### 连接网络
设置是否通过WIFI连接到指定的MQTT服务器。如此项目设置为Yes,需要自行确认当前的WiFi和MQTT服务器是否可用。
#### 重置为默认设置
将全部设置置为默认
### 详细的使用方法请关注B站 视频 内容
## 关于font.h
font.h为自定义的字体文件,使用的是 文泉驿开源字体。
感谢字体作者的无私奉献。
## 关于psc.h
psc.h和psc.cpp为PubSubClient(作者Nick O'Leary )库的源代码,由于默认情况下PubSubClient无法接收过长的内容,为了便于使用,故仅将限制变量稍作改动后转放至此,其他内容没有任何修改。再次感谢原作者的无私奉献!
## 更新日志
#### 2020-03-07
- 修正了由 山猫号 指正的判断语句错误。非常感谢!鞠躬!
#### 2020-01-18
- 增加备用WIFI。当开启网络时,首先连接主WIFI信号,如果连接失败,则尝试连接备用WIFI。(感谢 蜗牛_BD4TZG 的建议)
#### 2020-01-16
- 增加WiFi超时检查。尝试连接WiFi在30秒后如果无法正常连接,则关闭网络。
#### 2020-01-06
- 修复无法收发过长内容的错误
#### 2020-01-04
- 修复收到的莫尔斯电码会在每个字符后面多出一个空格错误
- 将WIFI控制文件名称更改为wifi.h。文件名net.h预留给其他功能使用。
#### 2020-01-03
- 调整抖动时长不能超过单位时长
#### 2020-01-02
- 修复有时首次上电运行时读取设置参数错误
#### 2020-01-01
- 修复使用手动电键时蜂鸣器鸣叫会产生抖动的情况
- 优化自动键的算法
- 调整默认音调频率更为1000Hz
- 调整默认抖动时长更为40毫秒
## 特别鸣谢建议提供者
#### 蜗牛_BD4TZG 山猫号