一 .EEPROM
在EPS32中已经将EEPROM弃用。对于ESP32上的新应用程序,建议使用NVS为首选项。提供EEPROM是为了向后兼容现有的Arduino应用程序。
Arduino core for the ESP32中的EEPROM是在flash中开辟的存储区域;
1. 调用EEPROM
调用#include <EEPROM.h>
来使用EEPROM;
2. 初始化EEPROM
/*
* 初始化EEPROM
* 参数: size:容量大小, 默认4096, size为需要读写的数据字节最大地址+1,取值1~4096;
* 返回值: 设置成功否?
*/
bool EEPROMClass::begin(size_t size)
EEPROM.begin(4096);
3. 往EEPROM中写一个字节的值
/*
* 初始化EEPROM
* 参数:
* address:地址
* val: 值
* 返回值: 无
*/
void EEPROMClass::write(int address, uint8_t val)
EEPROM.write(1,'a');
4. 真正的提交到EEPROM中保存
EEPROM.write();并不能保证断电不丢失,需要提交.
EEPROM.commit();
5. EEPROM中读取数据
/*
* 读EEPROM
* 参数:
* address:地址
* 返回值: 读取的字节
*/
uint8_t EEPROMClass::read(int address){}
例
通过串口往EEPROM中写入, 按x可以读取EEPROM中的数, 给ESP32断一次电,再上电读取
#include <Arduino.h>
#include <EEPROM.h>
bool flag = false;
void setup()
{
Serial.begin(115200);
EEPROM.begin(4096);
}
void loop()
{
if (Serial.available())
{
char temp = Serial.read();
if (temp != 'x')
{
EEPROM.write(1, temp);
EEPROM.commit();
Serial.print("写入EEPROM:");
Serial.println(EEPROM.read(1));
}
else
{
Serial.print("EEPROM里的数据是:");
Serial.println(EEPROM.read(1));
}
}
}
二. NTP对时
1. NTP对时原理
连接网络, 从网络中请求NTP对时数据, 这里我们选取了阿里云的NTP服务器 ntp1.aliyun.com
此外,我们在东八区, 所以应该偏移时间 8小时
2. 初始化一个NTP服务客户端
NTPClient(UDP& udp, const char* poolServerName, int timeOffset, int updateInterval);
/*
参数:
1. udp : 创建的UDP连接
2. poolServerName : 服务器地址, 字符串类型 默认: time.nist.gov
3. timeOffset: 偏移时间, 默认0, 单位秒, 北京时间需要偏移 3600*8
4. milliseconds : 更新时间间隔, 单位毫秒
*/
这里注意, 需要传入一个UPD连接, 详见后面的例子
3. 更新时间
timeClient.update();
4. 获取格式化的时间
timeClient.getFormattedTime();
5.获取时间戳(格林威治时间读秒)
timeClient.getEpochTime();
6.获取天(从NTP服务客户端开启至今的天数)
程序启动当天是1
timeClient.getDay();
7. 获取时分秒
Serial.println(timeClient.getHours());
Serial.println(timeClient.getMinutes());
Serial.println(timeClient.getSeconds());
8.单独设置时间偏移
timeClient.setTimeOffset(3600*8);
9. 单独设置更新频率
timeClient.setUpdateInterval(1000);
10. 例子
#include <Arduino.h>
#include "WiFi.h"
#include "NTPClient.h"
const char *ssid = "anleng";
const char *password = "al77776666";
WiFiUDP ntpUDP; // 创建一个WIFI UDP连接
NTPClient timeClient(ntpUDP, "ntp1.aliyun.com", 60*60*8, 30*60*1000);
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
timeClient.begin();
}
void loop() {
timeClient.update();
Serial.println(timeClient.getFormattedTime());
delay(1000);
}
三. 蓝牙透传
#include <Arduino.h>
#include "BluetoothSerial.h"
BluetoothSerial bt1;
void setup()
{
Serial.begin(115200);
delay(5000);
bt1.begin("ESP32BLUE");
Serial.println("蓝牙串口透传已经打开");
}
void loop()
{
if (Serial.available())
{
bt1.write(Serial.read());
}
if (bt1.available())
{
Serial.write(bt1.read());
}
delay(20);
}
网友评论