AI 大模型与智能应用
实践与技术

专注分享 AI 大模型、Agent 开发、深度学习等技术实战与架构设计;兼具 C#/.NET 后端开发经验

118
技术文章
8
文章分类
537
技术标签
29971
累计字数
使用NTP协议获取时间(连接wifi) - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-02-01 • 0k

使用NTP协议获取时间(连接wifi) - Arduino开发ESP8266(NodeMcu)学习记录

所需硬件 ESP8266 开发板(NodeMcu) x1 第三方库 ESP8266WiFi NTP介绍 网络时间协议,英文名称:Network Time Protocol(NTP)是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP的目的是在无序的Internet环境中提供精确和健壮的时间服务。 ——【百度百科】 代码: /** 作者: Raikay (raikay.cn) 时间: 2021/01/30 说明: 通过NTP服务器获取网络时间(连接wifi) **/ #include <ESP8266WiFi.h> //wifi库 #include <time.h> //时间库 const char* ssid = "Ziroom211"; //wifi账号 const char* password = "40010022222"; //wifi密码 const char* NTP_SERVER = "ntp.aliyun.com"; //NTP服务器 #define TZ_INFO "UTC-8" //时区 void setup() { Serial.begin(115200); Serial.setDebugOutput(true); //将串口设为调试输出模式 WiFi.disconnect();//断开之前的连接 WiFi.mode(WIFI_STA); //设为STA模式 WiFi.begin(ssid, password);//连接wifi Serial.println("\nConnecting to WiFi"); //连接失败 while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(1000); } //设置时区、NTP服务器地址 configTime(TZ_INFO, NTP_SERVER); Serial.println("\nWaiting for time"); while (!time(nullptr)) { Serial.print("."); delay(1000); } Serial.println(""); } //循环 void loop() { time_t now = time(nullptr); //获取当前时间 时间戳 struct tm *p = localtime(&now); //转换为tm结构 //格式化输入 Serial.print(String(1900 + p->tm_year) + "年" + String(1 + p->tm_mon) + "月" + String(p->tm_mday) + "日"); Serial.println(" " + String(p->tm_hour) + ":" + String(p->tm_min) + ":" + String(p->tm_sec)); delay(1000); }

esp8266 Arduino NodeMcu
阅读更多
Arduino-Ide安装第三方库
嵌入式
2021-01-21 • 0k

Arduino-Ide安装第三方库

用温湿度传感器DHT11/DHT22库DHT为例 方法一 【项目】 –》 【加载库】 –》【管理库】 安装 弹出窗口后,搜索、安装即可 查看示例代码 安装之后, 【文件】 –》【示例】 ,就可以查看库带的示例代码,大多数库都有,这个示例代码是很好的教程。 方法二 直接下载库第三方库,下载的库放在库文件夹即可。通过 【文件】 –> 【首选项】 –> 【项目文件夹位置】 查看库文件夹位置

Arduino 库安装 第三方库
阅读更多
CP2102版和CH340版两种NodeMcu的区别和HW-628有什么不同
嵌入式
2021-01-21 • 0k

CP2102版和CH340版两种NodeMcu的区别和HW-628有什么不同

NodeMcu 常见的有两个版本,一般用通讯模块区分 CP2102版 : NodeMcu V1.0 ,作者是amica CH340版 : NodeMcu v3,作者是Lolin v3不是V1.0的升级版,可能是两个分支。 区别: 1、外观上v3比V1.0 大一些。 2、CP2102版 A0附近两个RSV引脚,在CH340版上是GND和VU(可以输出5v电压)。 3、usb供电时v1.0版vin引脚可以5V电压输出,v3版vin引脚没有5V输出,v3版5v电压输出在VU引脚上。 看网上有说ch340版在烧写时需按flash -> reset。我在操作的时候,没按也是可以烧写的,烧写后也正常工作。 新款 除了上面两款常见版本外,发现某宝上有一款“新款NodeMcu”挺多的,看上面标有 HW-628字样,暂且称他是HW-628。 有额外32M flash,价格很划算。 在引脚、外观尺寸上完全兼容NodeMcu V1.0 (CP2102)版,有人说信号弱一些,我简单测了一下,不影响使用。而且vin引脚也可以5v电压输出,也就是说,除了外观长的不一样,应该可以替代cp2012版NodeMcu。 下面是三款的合影: 引脚原理图: 注意事项 1、NodeMcu的IIC(I2C)管脚是GOIO04和GPIO05,就是上面丝印的D1和D2。

esp8266 NodeMcu CH340
阅读更多
DHT11温湿度传感器 - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-18 • 0k

DHT11温湿度传感器 - Arduino开发ESP8266(NodeMcu)学习记录

所需硬件 ESP8266 开发板(NodeMcu) x1 DHT11温湿度传感器 x1 面包板 x1 杜邦线 若干 第三方库 DHT 可以直接安装 项目–>加载库–>管理库–> 搜索"DHT"安装 或者手动下载 下载地址:https://github.com/adafruit/DHT-sensor-library 线路图 实物图 代码 /** 作者: Raikay (raikay.cn) 时间: 2021/01/18 说明: ESP8266接收DHT11温湿度传感器数据 NodeMcu DHT11 3V3 - 正极 D5 - out GND - 负极 **/ #include <DHT.h> #define DHTPIN 14 //GPIO14 即NodeMcu D5 #define DHTTYPE DHT11 // 定义你DHT11 DHT dht(DHTPIN, DHTTYPE); //读取DHT的温度值 String readDHTTemperature() { float t = dht.readTemperature(); if (isnan(t)) { Serial.println("Failed to read from DHT sensor!"); return "--"; } else { return String(t); } } //读取DHT的湿度值 String readDHTHumidity() { float h = dht.readHumidity(); if (isnan(h)) { Serial.println("Failed to read from DHT sensor!"); return "--"; } else { return String(h); } } void setup() { pinMode(DHTPIN, OUTPUT); digitalWrite(DHTPIN, HIGH); Serial.begin(9600); dht.begin(); } void loop() { //温度 temperature Serial.print("温度:"); Serial.println(readDHTTemperature().c_str()); //湿度 Humidity Serial.print("湿度:"); Serial.println(readDHTHumidity().c_str()); delay(1000); Serial.println("---------------"); } 串口显示

esp8266 Arduino NodeMcu
阅读更多
发射红外信号控制美的空调 - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-17 • 0k

发射红外信号控制美的空调 - Arduino开发ESP8266(NodeMcu)学习记录

所需硬件 ESP8266 开发板(NodeMcu) x1 红外信号发射管Led x1 按键开关 x2 面包板 x1 杜邦线 若干 第三方库 IRremoteESP8266 下载地址:https://github.com/crankyoldgit/IRremoteESP8266 线路图 红外发射管 长的是正极,短的是负极。 实物图 按D3按键关闭空调,按D4开启空调 代码 红外信号原数据是从美的空调遥控器接收的 /** 作者: Raikay (raikay.cn) 时间: 2021/01/17 说明: 红外发射管控制美的空调 NodeMcu 红外发射管 GND - 负极 D2 - 正极 **/ #include <Arduino.h> #include <IRremoteESP8266.h> #include <IRsend.h> const uint16_t kIrLed = 4; // NodeMcu D2 const uint16_t On1 = 0; // d3 const uint16_t On2 = 2; // d4 IRsend irsend(kIrLed); // Set the GPIO to be used to sending the message. // 美的空调原数据 关闭空调 uint16_t rawData1[199] = {4500, 4404, 588, 1578, 590, 488, 590, 1578, 590, 1578, 590, 488, 588, 488, 590, 1578, 590, 488, 586, 490, 588, 1580, 588, 490, 588, 488, 588, 1578, 588, 1580, 586, 490, 588, 1578, 588, 490, 588, 1578, 588, 1578, 588, 1578, 588, 1580, 588, 490, 588, 1580, 588, 1580, 586, 1580, 588, 490, 588, 490, 588, 490, 586, 490, 586, 1580, 588, 490, 586, 490, 586, 1580, 588, 1580, 586, 1580, 586, 490, 588, 490, 588, 490, 586, 490, 586, 490, 588, 490, 586, 490, 586, 490, 586, 1580, 586, 1580, 586, 1580, 586, 1580, 586, 1580, 586, 5208, 4496, 4410, 586, 1580, 588, 490, 586, 1580, 588, 1578, 588, 490, 586, 490, 586, 1580, 588, 490, 586, 490, 586, 1580, 586, 490, 588, 490, 586, 1580, 586, 1580, 588, 490, 586, 1580, 586, 490, 588, 1580, 586, 1580, 586, 1580, 586, 1580, 588, 490, 586, 1580, 588, 1580, 586, 1580, 588, 490, 588, 490, 586, 490, 586, 490, 586, 1582, 584, 492, 586, 490, 586, 1582, 584, 1582, 586, 1580, 586, 490, 586, 490, 586, 490, 586, 490, 586, 490, 586, 492, 586, 490, 586, 490, 590, 1576, 586, 1580, 588, 1580, 586, 1580, 586, 1580, 586}; // COOLIX B27BE0 // 美的空调原数据 开启空调 29度 制热 uint16_t rawData2[199] = {4508, 4394, 600, 1568, 600, 478, 600, 1568, 600, 1568, 598, 480, 598, 478, 598, 1568, 600, 478, 598, 478, 598, 1568, 598, 478, 600, 478, 598, 1568, 598, 1568, 598, 478, 600, 1568, 598, 480, 598, 478, 598, 1568, 598, 1568, 598, 1568, 600, 1568, 600, 1566, 600, 1568, 598, 1568, 600, 1568, 600, 478, 600, 476, 600, 478, 598, 478, 600, 478, 600, 478, 600, 1568, 600, 478, 600, 1568, 600, 478, 600, 1568, 600, 1566, 600, 478, 598, 478, 600, 476, 600, 1568, 600, 478, 600, 1566, 600, 478, 600, 478, 600, 1566, 600, 1568, 600, 5194, 4508, 4398, 600, 1566, 604, 474, 600, 1566, 600, 1566, 600, 476, 600, 476, 600, 1566, 600, 476, 600, 476, 600, 1568, 600, 476, 600, 476, 602, 1566, 598, 1568, 600, 476, 600, 1566, 600, 476, 600, 476, 600, 1566, 600, 1566, 600, 1566, 602, 1566, 600, 1568, 600, 1566, 600, 1566, 600, 1566, 600, 476, 600, 476, 600, 476, 602, 476, 600, 478, 600, 476, 600, 1566, 600, 478, 600, 1568, 600, 476, 600, 1566, 600, 1566, 600, 478, 600, 478, 600, 478, 600, 1568, 600, 476, 600, 1568, 600, 476, 600, 476, 602, 1566, 600, 1568, 598}; // COOLIX B23FAC void setup() { irsend.begin(); #if ESP8266 Serial.begin(115200, SERIAL_8N1, SERIAL_TX_ONLY); #else Serial.begin(115200, SERIAL_8N1); #endif pinMode(On1, INPUT_PULLUP); pinMode(On2, INPUT_PULLUP); } void loop() { int buttonState1 = digitalRead(On1); int buttonState2 = digitalRead(On2); if (buttonState1 != HIGH) { irsend.sendRaw(rawData1, 199, 38); delay(5); irsend.sendRaw(rawData1, 199, 38); delay(5); irsend.sendRaw(rawData1, 199, 38); Serial.println("buttonState1:" + buttonState1); } if (buttonState2 != HIGH) { irsend.sendRaw(rawData2, 199, 38); delay(5); irsend.sendRaw(rawData2, 199, 38); delay(5); irsend.sendRaw(rawData2, 199, 38); Serial.println("buttonState2:" + buttonState2); } } 这里把信号发了三遍,是因为,发射一遍信号比较弱,必须角度找的非常准确,即使这样有的时候还接收不到,发射三遍时,可以在任意角度随意发射,空调都可以接收到信号,百发百中!~

esp8266 Arduino NodeMcu
阅读更多
接收红外信号VS1838B - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-17 • 0k

接收红外信号VS1838B - Arduino开发ESP8266(NodeMcu)学习记录

所需硬件 VS1838B 红外接收头 ESP8266 开发板 (NodeMcu) 红外信号遥控器 杜邦线 x3 第三方库 IRremoteESP8266 下载地址:https://github.com/crankyoldgit/IRremoteESP8266 红外接收头图片 线路图 实物图 代码 /** 作者: Raikay (raikay.cn) 时间: 2021/01/17 说明: NodeMcu使用红外接收头接收红外信号 NodeMcu - VS1838B 3v3 - VCC GND - GND D5 - OUT **/ #include <Arduino.h> #include <IRrecv.h> #include <IRremoteESP8266.h> #include <IRac.h> //#include <IRtext.h> #include <IRutils.h> // 定义接收信号的引脚GPIO14,即NodeMcu的D5 const uint16_t kRecvPin = 14; // (接收引脚,接收信号大小,超时时间) IRrecv irrecv(kRecvPin, 1024, 50, true); // 存储结果 decode_results results; void setup() { Serial.begin(115200); #if DECODE_HASH // 过滤未知信号值 irrecv.setUnknownThreshold(12); #endif irrecv.setTolerance(kTolerance); // 启动接收器 irrecv.enableIRIn(); } void loop() { // 是否收到消息 if (irrecv.decode(&results)) { // 接收到的编码 Serial.print("输出编码:"); serialPrintUint64(results.value, HEX); Serial.println(); // 协议和编码 Serial.println("输出协议和编码:"); Serial.println(resultToHumanReadableBasic(&results)); yield(); // 说明 String description = IRAcUtils::resultAcToString(&results); Serial.println("输出说明:"); if (description.length()) { Serial.println("Mesg Desc.: " + description); } else { Serial.println("Mesg Desc.: 无"); } // 原数据 Serial.println("输出原数据:"); Serial.println(resultToSourceCode(&results)); Serial.println("------------------------分割线------------------------"); yield(); } } 使用的红外遥控器

esp8266 Arduino NodeMcu
阅读更多
控制继电器 - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-16 • 0k

控制继电器 - Arduino开发ESP8266(NodeMcu)学习记录

示例代码: 通过D5引脚(GPIO14输出高低电平)控制继电器开合 /** 作者: Raikay (raikay.cn) 时间: 2021/01/16 说明: 控制继电器 NodeMcu - 继电器 VU - VCC D5 - OUT GND - GND **/ //定义引脚GPIO14,即Nodemcu D5引脚 int relay = 14; void setup() { //设置引脚输出 pinMode(relay, OUTPUT); } void loop() { //程序灯带1秒(1000毫秒) delay(1000); //设置高电平 digitalWrite(relay, LOW); delay(1000); //设置低电平 digitalWrite(relay, HIGH); } 继电器 线路图 继电器是5v供电,NodeMcu两个版本输出5v的引脚不同。 CP2102版 :Vin引脚输出5v CH340版:VU引脚输出5v 也可以单独5v电源供电。 下图是CH340版 实物图

esp8266 Arduino NodeMcu
阅读更多
git命令备忘系列(八) - 使用技巧集合
工具与效率
2021-01-15 • 0k

git命令备忘系列(八) - 使用技巧集合

一、Git彻底删除一次提交 这样删除之后,在历史记录中也查不到 git rebase --onto SHA^ SHA SHA是错误的提交。 例如,删除cbe8527这次提交: git rebase --onto cbe8527^ cbe8527 这条记录就从历史记录中消失了 二、git stash 工作状态保存 解决方案1 将当前工作状态保存 git stash save "保存说明" 恢复保存内容 git stash pop 如果有冲突, pop恢复时会失败,需要处理冲突 查看当前所有stash #查看命令 $ git stash list #结果如下: stash@{0}: On stu_git_1: bug8 stash@{1}: On stu_git_1: bug3 stash@{2}: On stu_git_1: bug2 stash@{3}: On stu_git_1: bug1 恢复指定stash,恢复之后不删除stash $ git stash apply stash@{1} 恢复指定stash,恢复冰删除stash $ git stash pop stash@{1} 三、git cherry-pick用法 重演commit 场景: 如果应用已经发布了一个版本2.0, 代码分支叫release-2.0, 现在正在开发3.0, 代码的分支叫dev-3.0. 那么有一天产品说, 要把正在开发的某个特性提前上线, 也就是说要把dev-3.0分支上的某些更改移到2.x的版本上, 那么怎么办呢?

git git技巧 git stash
阅读更多
串口调试 - Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-15 • 0k

串口调试 - Arduino开发ESP8266(NodeMcu)学习记录

示例代码: void setup() { //初始化串口设置 Serial.begin(9600); } void loop() { //获取程序开始运行的毫秒数 long time = millis(); //输出调试日志 Serial.println(time); } 选择开发板 选择端口 这个端口 一般可能是 3、5、6根据设备和电脑环境不同有所区别,可以到电脑的设备管理器查看一下 (我机器插了两个板子,所以是下面这种情况,一般只会是COM3或COM5一个) 上传代码 查看串口调试窗口 【工具】–> 【串口调试】 说一下这个9600波特率,和代码上的一致就可以一般是9600、115200 我也可能会用esp8266系列的其他开发板,其实所有esp8266的板子代码是通用(比如 Wemos D1 R1、Wemos D1 R3 Uno、D1 mini、Wifiduino、ESPduino、WiFinfo),只要对照一下引脚图稍微改动一下差异的引脚就可以。

esp8266 Arduino NodeMcu
阅读更多
快速开始- Arduino开发ESP8266(NodeMcu)学习记录
嵌入式
2021-01-14 • 0k

快速开始- Arduino开发ESP8266(NodeMcu)学习记录

环境安装 下载Arduino-IDE 官网:https://www.arduino.cc/ 下载地址:https://www.arduino.cc/en/software 下载时不是一定要付费,选择JUST DOWNLOAD 免费下载 解压后双击EXE就可以打开了 安装驱动 驱动下载地址:https://gitee.com/raikay/elefiles/tree/main/tools/驱动 下载ESP8266库 文件–>首选项 把这个网址填到 【附加开发版管理器】 http://arduino.esp8266.com/stable/package_esp8266com_index.json 工具–> 开发板–>开发板管理器 如果没有梯子下载可能会非常慢,可以用下面的直接安装工具 工具下载地址:https://gitee.com/raikay/elefiles/tree/main/开发板/esp8266 点亮LED 新建项目 代码 //定义引脚GPIO14,即Nodemcu D5引脚 int led = 14; void setup() { //设置led引脚输出 pinMode(led, OUTPUT); } void loop() { //程序等待1秒(1000毫秒) delay(1000); //设置led引脚高电平 digitalWrite(led, LOW); delay(1000); //设置led引脚低电平 digitalWrite(led, HIGH); } 线路图 实物图 选择开发板 选择端口 这个端口 一般可能是 3、5、6根据设备和电脑环境不同有所区别,可以到电脑的设备管理器查看一下 (我机器插了两个板子,所以是下面这种情况,一般只会是COM3或COM5一个) 上传代码 运行效果 我也可能会用esp8266系列的其他开发板,其实所有esp8266的板子代码是通用(比如 Wemos D1 R1、Wemos D1 R3 Uno、D1 mini、Wifiduino、ESPduino、WiFinfo),只要对照一下引脚图稍微改动一下差异的引脚就可以。

esp8266 Arduino NodeMcu
阅读更多