天气预报,基于ESP8266,彩屏显示

ESP8266 Arduino 发送 GB2312 编码的中文到串口屏 小项目使用8266接收WebHook,需要提取消息展示到串口屏一切顺利,显示数量,图标,时间都很好到了最后一步显示内容时碰壁了,Arduino发送的是UTF-8编码的串口屏支持 GB2312 好一些,网上查了一番有人用 直接定义编码数组的方式,可以展示一些固定的字符串文本有人将文件编码从改为的但这两种方法我都没有尝试,我们要展示的内容是接口收到的内容,内容不可控.不能改编码也是因为要从接口获取数据,修改了编码,请求数据又会出现问题最后在Github上,看到了一个别人几年前做的8266气象站:esp8266 阅读详情

成品展示:

功能介绍:

【1】联网获取心知天气下发的当日天气信息,如:温度、湿度、风向、风力等级等;

【2】自带RTC时钟,支持人机交互时间修改;

【3】支持2.4Gwifi连接,支持更换地点后直接修改重联wifi信息(含wifi名称、wiif密码,暂不支持中文wifi名称),支持大小写切换、修改后需重启方可重新连接;

【4】实时获取室内温湿度信息;

【5】上述参数交互均在屏幕上完成。

后续功能:过去及未来天气、天气出行信息。。。 。。。

制作过程:

(1)材料清单(含购买链接):3.2寸淘晶驰HMI串口屏(增强版)、ESP8266、DHT11(温湿度传感器)、TF卡(用于屏幕数据下载)、MicroUSB线

注:上述材料仅供参考(老板没给广告费)

(2)软件清单:Arduino IDE、USART HMI

开始:

心知天气进行账号注册,获取你的API私钥,在这里你可以查看官方给的学习文档。

如下图所示,免费提供的信息非常少,请大家申请试用版本!!!

 String url = "/v3/weather/now.json?key=Ak47j5BQpzYGO6jnvCBG&location=changsha&language=zh-Hans&unit=c";

如上代码所示,Key=“输入你的API私钥”,Location=“changsha”,这是你的所在地,其他参数无需修改

//因为使用屏幕输入wifi信息,因此这里ssid、password里面的参数为空,第一次使用后需要进入wifi设置配置
String ssid = "";
String password = "";

由于ESP8266的固有特性,连接一次wifi后,该wifi信息会保存在ESP8266里面,只有更换wifi才需重新配置,修改完后记得重启设备。

如何进入wifi配置页面?

答:点击屏幕上的“wifi”图标,点击无线名称或无线密码的输入框,需要有光标闪烁,方可输入信息,点击“Enter”确认退出

如何修改时间?

答:点击时间进入时间设置界面,设置完后点击空白处确认退出

电路搭建部分(省略),因为太简单了

其中DHT11温湿度传感器接ESP8266的GPIO5,屏幕则是串口通讯(TX-RX、RX-TX),ESP8266引脚图如下:

程序讲解:

int k1 = 0;//中间数
	  if (Serial.available() > 0)//判读是否串口有数据
	  {
		String comdata = "";//缓存清零
		while (Serial.available() > 0)//循环串口是否有数据
		{
		  comdata += char(Serial.read());//叠加数据到comdata
		  delay(2);//延时等待响应
		}
		string_length = comdata.length(); //将数据长度赋给string_length
		if(string_length > 0) { //如果有数据
			//Serial.print(comdata);
			//Serial.println(" " + String(string_length));
			for (int i = 0; i <= string_length; i = i + (1)) { 
/*从comdata第0个数据开始判断是否有'h'(作为wifi名称和密码之间的间隔符号)*/
				if(comdata[i] == 'h') { 
/*如果判断到'h',则将该字符位置赋给k1,并从comdata【0】开始到k1-1(除去h的位置)累加字符存进ssid里面去,作为WiFi名称*/
					k1 = i;
					for(int i = 0; i <= k1-1; i = i + (1)) {
						ssid += comdata[i];
					}
					ssid = ssid;
					Serial.print("ssid:");Serial.println(ssid);
				}
				if(comdata[k1+1] == 'h') {
/*判断'h'后面那个字符时候为'h',因为屏幕这边会输出两个hh作为wifi名称和密码之间的间隔符号*/
/*然后从这个位置到最后开始累加condata的数据,并赋给password作为WiFi密码,执行完后跳出循环*/
					for(int i = k1 + 2; i <= string_length-3; i = i + (1)) {
						password += comdata[i];
					}
					password = password;
					Serial.print("password:");Serial.println(password);
					break;
				}
			}
		}
	  }
//JSON解析
//利用ArduinoJson库解析心知返回的json天气数据
//可以利用 https://arduinojson.org/v5/assistant/ Arduinojson助手生成相关json解析代码  很方便!!!
const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(6) + JSON_OBJECT_SIZE(13) + 370;
DynamicJsonBuffer jsonBuffer(capacity);

const char* json = "{\"results\":[{\"location\":{\"id\":\"WX4FBXXFKE4F\",\"name\":\"北京\",\"country\":\"CN\",\"path\":\"北京,北京,中国\",\"timezone\":\"Asia/Shanghai\",\"timezone_offset\":\"+08:00\"},\"now\":{\"text\":\"多云\",\"code\":\"4\",\"temperature\":\"12\",\"feels_like\":\"11\",\"pressure\":\"1014\",\"humidity\":\"87\",\"visibility\":\"5.0\",\"wind_direction\":\"南\",\"wind_direction_degree\":\"183\",\"wind_speed\":\"14.04\",\"wind_scale\":\"3\",\"clouds\":\"90\",\"dew_point\":\"\"},\"last_update\":\"2019-04-27T17:40:08+08:00\"}]}";

JsonObject& root = jsonBuffer.parseObject(json_weather_data);

JsonObject& results_0 = root["results"][0];

JsonObject& results_0_location = results_0["location"];
const char* results_0_location_id = results_0_location["id"]; // "WX4FBXXFKE4F"
const char* results_0_location_name = results_0_location["name"]; // "北京"
const char* results_0_location_country = results_0_location["country"]; // "CN"
const char* results_0_location_path = results_0_location["path"]; // "北京,北京,中国"
const char* results_0_location_timezone = results_0_location["timezone"]; // "Asia/Shanghai"
const char* results_0_location_timezone_offset = results_0_location["timezone_offset"]; // "+08:00"

JsonObject& results_0_now = results_0["now"];
const char* results_0_now_text = results_0_now["text"]; // "多云" 当地天气
const char* results_0_now_code = results_0_now["code"]; // "4"    天气代码
const char* results_0_now_temperature = results_0_now["temperature"]; // "12" 当前温度
const char* results_0_now_feels_like = results_0_now["feels_like"]; // "11"
const char* results_0_now_pressure = results_0_now["pressure"]; // "1014"  气压
const char* results_0_now_humidity = results_0_now["humidity"]; // "87"    湿度
const char* results_0_now_visibility = results_0_now["visibility"]; // "5.0"
const char* results_0_now_wind_direction = results_0_now["wind_direction"]; // "南"  风向
const char* results_0_now_wind_direction_degree = results_0_now["wind_direction_degree"]; // "183"
const char* results_0_now_wind_speed = results_0_now["wind_speed"]; // "14.04"  风速
const char* results_0_now_wind_scale = results_0_now["wind_scale"]; // "3"    风速等级
const char* results_0_now_clouds = results_0_now["clouds"]; // "90"
const char* results_0_now_dew_point = results_0_now["dew_point"]; // ""

const char* results_0_last_update = results_0["last_update"]; // "2019-04-27T17:40:08+08:00"

上图截图来源:https://docs.seniverse.com/api/weather/now.html

code = String(results_0_now_code).toInt(); 
/*将获取到的天气代码转换成整形数据,并判断控制屏幕显示的天气图片*/
	switch (code) {  //天气代码
		case 0:Serial.print("p1.pic=11");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=11");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 1:Serial.print("p1.pic=12");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=12");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 2:Serial.print("p1.pic=13");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=13");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 3:Serial.print("p1.pic=14");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=14");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 4:Serial.print("p1.pic=15");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=15");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 5:Serial.print("p1.pic=16");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=16");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 6:Serial.print("p1.pic=17");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=17");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 7:Serial.print("p1.pic=18");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=18");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 8:Serial.print("p1.pic=19");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=19");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 9:Serial.print("p1.pic=20");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   Serial.print("p1.pic=20");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			   break;
		case 10:Serial.print("p1.pic=21");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=21");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    break;
		case 11:Serial.print("p1.pic=22");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=22");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 12:Serial.print("p1.pic=23");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=23");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 13:Serial.print("p1.pic=24");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=24");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 14:Serial.print("p1.pic=25");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=25");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 15:Serial.print("p1.pic=26");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=26");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 16:Serial.print("p1.pic=27");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=27");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 17:Serial.print("p1.pic=28");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=28");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 18:Serial.print("p1.pic=29");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=29");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 19:Serial.print("p1.pic=30");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=30");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 20:Serial.print("p1.pic=31");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=31");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 21:Serial.print("p1.pic=32");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=32");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 22:Serial.print("p1.pic=33");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=33");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 23:Serial.print("p1.pic=34");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=34");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 24:Serial.print("p1.pic=35");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=35");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 25:Serial.print("p1.pic=36");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=36");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 26:Serial.print("p1.pic=37");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=37");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 27:Serial.print("p1.pic=38");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=38");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 28:Serial.print("p1.pic=39");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=39");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 29:Serial.print("p1.pic=40");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=40");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 30:Serial.print("p1.pic=41");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=41");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 31:Serial.print("p1.pic=42");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=42");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 32:Serial.print("p1.pic=43");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=43");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 33:Serial.print("p1.pic=44");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=44");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 34:Serial.print("p1.pic=45");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=45");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 35:Serial.print("p1.pic=46");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=46");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 36:Serial.print("p1.pic=47");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=47");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 37:Serial.print("p1.pic=48");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=48");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 38:Serial.print("p1.pic=49");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=49");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;
		case 99:Serial.print("p1.pic=50");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
			    Serial.print("p1.pic=50");Serial.write(0xff);Serial.write(0xff);Serial.write(0xff);delay(10);
				break;	
	}

存在的问题:

【1】风向信息JSON解析过来的是中文,使用串口直接发送 t1.txt="东北",屏幕这边会显示错误信息,使用HMI的调试工程是正常的;

【2】wifi信息尽量避免出现“h”,可能出现无法正确设置wifi信息,我的程序是判断连续出现两个“hh”,hh的前面是wifi名称,hh的后面是wifi密码;

【3】wifi信息配置完成需要重启,才能连接重新配置的wifi。

注:以上问题不应该该作品的正常使用。

资料下载:源代码、工程均开源

 

程序、HMI

到此,该作品的制作过程及重点需要讲解的部分已经完成。

后续的外观结构部分,后期补上

最终成品:

作品欣赏:

                                         

                                                                                     主界面

                                             

                                                                                     时间设置

                                            

                                                                                     WiFi配置

                      

                                                                                     正常工作

 

欲知详情,可添加微信,咱们一对一交流。

 

ESP8266驱动ST7789 TFT彩屏:从零配置TFT_eSPI库到图形化界面实战 本文详细介绍了如何使用ESP8266驱动ST7789 TFT彩屏,从硬件连接到TFT_eSPI库配置,再到图形化界面实战。通过清晰的接线指南、库配置技巧和常见问题排查,帮助开发者快速实现动态仪表盘和动画效果。文章还提供了性能优化建议,如双缓冲技术和内存管理,适合Arduino爱好者和硬件开发者。 阅读详情

相关推荐

esp8266 天气_基于ESP8266 12E的天气显示屏

这几天一直在讲理论基础,估计大家都看腻了。今天带着大家一起来做一款天气显示屏。可以显示当地天气,气温,当前环境温度而且,这次我们要用到SPI模式的12864屏幕,U8G2库,18b20温度传感器,一键配网,HTTP协议等。算是对以前学过知识的补充吧。先上全套图:先说U8g2库头文件的引用,我们使用ESP8266的硬件SPI引脚,所以在引用的时候就不必再声明MISO,MOSI2个引脚了,需要声明的是...

weixin_36099549的博客 1352

详解:天气预报,基于ESP8266,彩屏显示 之 屏幕

简介:该作品使用的屏幕为3.2寸淘晶驰HMI(增强版),这是一款可以通过串口控制的屏幕,优点咱就简单将几个: 1、为主控制器减压,让它能更好更快速的处理我们的任务,而不必花太多精力去处理怎么让屏幕亮起来、显示什么内容,在哪个位置显示等内容; 2、减少对主控制器端口的占用,串口屏只需要2根通讯线(TX、RX),占用的端口少了,是不是就意味着...

老徐的博客 9630

ESP8266 Wi-Fi扫描仪实战:I2C LCD显示与嵌入式系统设计

在物联网和嵌入式系统开发中,无线网络通信是核心技术之一。Wi-Fi扫描作为无线网络感知的基础功能,其原理是通过设备主动探测周围的无线接入点,获取SSID、信号强度和加密类型等信息。这项技术对于网络诊断、环境感知和设备定位具有重要价值,广泛应用于智能家居、工业物联网和网络优化等场景。在资源受限的微控制器上实现高效的Wi-Fi扫描与实时显示,需要综合运用状态机设计、内存优化和人机交互等工程实践技巧。本文以ESP8266和I2C LCD为例,深入探讨了如何通过硬件选型、电路设计和软件架构,打造一个稳定可靠的无线网

weixin_34194829的博客 331

基于STM32F4+ESP8266+OLED的天气查询系统

心知天气是一家提供高精度气象数据和行业气象解决方案的企业,通过标准的 Restful API 接口,为各行各业提供实时、准确、全面的天气数据服务。心知天气的数据覆盖全国的每个角落,实现分钟级天气数据更新频率,基于 AI 增强更准确的天气预报。在嵌入式系统领域,利用 STM32 和 ESP8266 实现天气查询并在 LCD 屏幕上显示的项目已经有很多文章和教程了。得到的 JSON 数据需要解析,本文只给出解析的步骤,其中有关 JSON 数据的内容可以参考附录中的文章。需要打开串口调试助手,看到交互过程。

m_qingbo的博客 3608

基于NodeMCU ESP8266与OLED屏打造Wi-Fi电子公告板:从硬件连接到云端控制

物联网(IoT)项目开发的核心在于实现物理设备与网络服务的互联互通。其基本原理是通过微控制器(如ESP8266)内置的Wi-Fi模块接入互联网,利用HTTP或MQTT等通信协议与远程服务器进行数据交换,从而赋予硬件远程控制和信息更新的能力。这种技术方案的价值在于能够以极低的成本和复杂度,将传统的静态显示设备升级为可动态管理、实时响应的智能终端。在智能家居、办公自动化、零售信息展示等应用场景中,这种可无线更新的信息显示方案尤为实用。本文以热门的NodeMCU ESP8266开发板和OLED显示屏为核心,详细解

weixin_29194693的博客 335

ESP8266驱动带有2个I2C接口的OLED屏幕示例程序(Arduino)

本文中,我们展示了如何使用ESP8266和Arduino IDE来驱动带有两个I2C接口的OLED屏幕。在loop()函数中,我们首先清除两个屏幕的显示内容,然后使用setCursor()和println()函数在每个屏幕上显示一些文本。在本篇文章中,我将向您展示如何使用ESP8266微控制器和Arduino开发环境来驱动带有两个I2C接口的OLED屏幕。然后,在setup()函数中,我们初始化了两个OLED屏幕,设置其文本大小和颜色。函数中,我们初始化了两个OLED屏幕,设置其文本大小和颜色。

PnServer的博客 1400

ESP8266获取天气预报信息,并使用CJSON解析天气预报数据

当前文章介绍如何使用ESP8266和STM32微控制器,搭配OLED显示屏,制作一个能够实时显示天气预报的智能设备。将使用心知天气API来获取天气数据,并使用MQTT协议将数据传递给STM32控制器,最终在OLED显示屏上显示。

4078

2.8英寸TFT触摸屏与Arduino的使用

额外的好处是,该显示器已经装有电阻式触摸屏,因此您可以检测屏幕上任何位置的手指按下。

ESP32 天气预报 彩屏

资料下载:https://download.youkuaiyun.com/download/u010533607/16775596 前因 最近太空人表盘狠狠的火了一把,刷刷抖音竟然看到有大神用ESP8266结合ST7789驱动的屏幕,白嫖到程序后,一顿操作猛如虎,无奈的将主控换成ESP32(因为手头就这家伙多),程序嘛,没有BUG那是不可能的,基本能保证运行,但是...作为一个啥都想搞搞的大虾来说,不折腾就不作死,所以就有了下文的后果 后果 1、修改配置引脚文件 目录:CLOCK\libraries\TF...

老徐的博客 3277

RTAB-MAP实战:用Realsense D435i在ROS中搭建室内3D地图(附避坑指南)

本文详细介绍了如何在ROS环境下,使用Intel Realsense D435i深度相机和RTAB-MAP算法进行室内3D地图构建的完整实战流程。内容涵盖环境配置、核心节点数据流解析、关键参数调优、地图保存与重定位,并提供了实用的避坑指南,帮助机器人开发者和研究者快速实现稳定的视觉SLAM应用。

weixin_29095049的博客 490

逆向学习:从已上线微信小游戏反推Cocos工程结构(以切水果跑酷为例)

本文以“切水果跑酷”为例,详细介绍了如何通过逆向分析已上线的微信小游戏,反推其基于Cocos Creator的原始工程结构。文章深入拆解了编译后的目录骨架、资源加载逻辑与依赖关系,并重点解析了微信平台API的调用特征,为开发者提供了一种高效学习游戏架构与设计模式的实用方法。

kk1234的博客 1073

推荐开源项目:ThingPulse ESP8266 天气站彩色显示

![ThingPulse logo](https://thingpulse.com/assets/ThingPulse-w300.svg) 随着智能家居的普及,将环境信息直观展示变得尤为重要。今天向大家强烈推荐一个专为科技爱好者和物联网初学者打造的开源项目 —— **ThingPulse ESP8266 天气站彩色显示**。这个项目利用了高效的ESP8266芯片和高分辨率的ILI9341 240

gitblog_00836的博客 712

CentOS 9 Stream 上安装 MySQL 8.0+

根据提示进行设置,包括设置新的 root 密码、禁用远程 root 登录等。MySQL 在首次安装时会生成一个临时密码。这样就完成了 MySQL 8.0.37 的安装。这将安装最新的 MySQL 8.0 版本。

小强不是坑 1679

esp8266 天气_天气变化莫测,9个小型气象站方案帮你监测

小型气象站广泛应用于气象、农业、环境检测和治理等领域。小型气象站对空气温湿度、光照、风速、风向、雨量、土壤湿度、蒸发量、大气压力等环境气象要素进行全天候现场检测。整理了9个小型气象站方案,需要的可以学习下,练练手也不错。1、基于机智云GoKit4.0(G)和MDM9206的 小型智能气象站本气象站以MDM9206模块作为SOC控制器,使用机智云平台提供的软硬件平台开发工具进行开发本项目。...

weixin_28771631的博客 1147

<视觉>——单目相机的标定(简单原理+Opencv实现)

单目相机的标定原理大致如下: 世界坐标到像素坐标的转换。 期间的参数有S尺度因子,内参矩阵K,旋转矩阵R,平移矩阵T,一共八个未知数。 在Opencv中我们可以方便的根据相机拍摄不同位姿的标定板图片来标定相机,从而求得这些参数,从而可以将相机下的坐标和实际的世界坐标联系起来,求取单应性矩阵H 参考: 单目相机综述:写的特别好 https://www.cnblo...

Kano365的博客 1万+

强化学习:Distributed PPO (DPPO) 学习笔记

DPPO = Distributed + Proximal Policy Optimization Distributed:多个智能体并行训练 Proximal:限制策略更新幅度,确保稳定性 Policy Optimization:基于策略梯度的优化方法 核心思想:多个智能体并行探索环境,共享经验,通过裁剪策略更新确保训练稳定

只是个人学习笔记 1331

ESP8266制作天气预报海藻球微景观生态缸记录(二)-人体感应开关灯实现

生态缸到货了,迅速组装完毕,比想象的小,只怪买的时候没有看好参数。 鉴于已经提前编好程序并在面包板上插好线路,所以直接无损对接就可以工作了,已经实现了人体感应控制开关。 【】 下一步就开始着手解析天气预报并以不同颜色驱动彩灯了,正努力实现中…… 【】 话说人的欲望果然是无尽的。 一开始只想用ESP01S做个根据未来天气换颜色的东西,现在又想加入亮度根据环境自动控制(晚上的时候不要太亮)的功能,还想把闲置的1.4村彩屏用上以显示准确的天气图标。 这样一来,ESP01S可就不够了。 其实越是晚上

tansuo2005的专栏 1912

RK356X linux系统移植RTL8723BU模块遇到的坑

RK356X linux系统移植RTL8723BU模块遇到的坑

目前从事linux驱动开发,多交流多学习吧 954

基于ESP32与TFT彩屏的桌面气象站:从硬件选型到3D打印外壳全流程

在物联网和嵌入式开发领域,微控制器与传感器结合实现数据采集与显示是基础且核心的技术路径。其原理是通过主控芯片(如ESP32)连接各类传感器和显示屏,经由Wi-Fi获取网络数据或读取本地环境参数,最终驱动UI进行可视化呈现。这种技术方案的价值在于将抽象数据转化为直观的物理实体,极大地提升了信息的可及性与交互体验。在智能家居、环境监测、桌面个性化设备等场景中,此类DIY项目尤为流行。本文聚焦于构建一个桌面气象站,详细探讨了以ESP32为主控、搭配TFT彩屏和BME280传感器的硬件选型,并深入解析了从3D打印外

weixin_30847939的博客 372

[VT虚拟化驱动]正式启动VT

文章目录前言一、vmlaunch正式开始虚拟化二、使用步骤1.引入库2.读入数据总结 前言 本章开始真正实现一个最简单的VT框架,当然,只是能跑起来一个VT驱动了,没有并包括EPT,EPT后面再讲 提示:以下是本篇文章正文内容,下面案例可供参考 一、vmlaunch正式开始虚拟化 执行VMLAUNCH指令执行后,就正式进入虚拟化了,再该指令执行之前,得先保存Guest当前的环境,执行完VMLAUNCH后,要恢复Guest的环境,让Guest就像什么都没发生一样,所以需要保存和恢复Guest的各种寄存器的值

吾无法无天的博客 3661

【PCIe硬件】PCIe引脚PRSNT与热插拔

热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。

smartvxworks的博客 2806

#第七届立创电赛# 基于N32G430与ESP8266的智能天气闹钟项目全解析(一)

本文详细解析了基于国民技术N32G430C8L6主控与ESP8266 Wi-Fi模块的智能天气闹钟硬件设计。项目核心采用双MCU架构,通过串口通信实现联网获取天气数据、驱动3.5寸彩屏显示时间与天气、设置闹钟及控制小风扇等功能。文章重点阐述了最小系统电路、模块连接方式及PCB设计要点,为电子竞赛与DIY爱好者提供实用参考。

weixin_36303305的博客 198

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

NodeMCU驱动ST7735彩屏:从硬件连接到动态界面实战

SPI(串行外设接口)是一种高速、全双工的同步通信协议,广泛应用于微控制器与显示屏、传感器等外设的连接。其通过主从架构和简单的时钟与数据线实现高效数据传输,极大节省了GPIO资源。在嵌入式开发中,SPI的价值在于为资源受限的MCU提供了驱动彩色TFT屏等复杂外设的可行方案,常见于智能家居状态面板、便携式仪表等需要本地图形化显示的DIY项目。本文聚焦于NodeMCU ESP8266与1.8英寸ST7735 SPI TFT彩屏的驱动实战,详细解析了硬件SPI引脚配置、电平匹配、Adafruit图形库的初始化与优

weixin_32263417的博客 257

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

关闭网页能否监测到_天气变化莫测,9个小型气象站方案帮你监测

小型气象站广泛应用于气象、农业、环境检测和治理等领域。小型气象站对空气温湿度、光照、风速、风向、雨量、土壤湿度、蒸发量、大气压力等环境气象要素进行全天候现场检测。整理了9个小型气象站方案,需要的可以学习下,练练手也不错。1、基于机智云GoKit4.0(G)和MDM9206的 小型智能气象站本气象站以MDM9206模块作为SOC控制器,使用机智云平台提供的软硬件平台开发工具进行开发本项目。...

weixin_39658318的博客 272

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

基于ESP32的桌面信息屏DIY:温湿度监测、天气显示与NTP校时全攻略

在物联网硬件开发领域,ESP32凭借双核处理、内置WiFi与丰富外设,已成为智能终端原型的首选主控。从环境感知到信息可视化,一块TFT彩屏与DHT22温湿度传感器的组合,便能构建出集时钟、天气、监测于一体的桌面信息屏。其核心逻辑涉及单总线数据采集、SPI屏幕驱动、NTP网络校时及API天气数据解析,每个环节都需要严格的时序与稳健的状态管理。这类设备在办公桌、智能家居等场景中极具实用性,既能提升信息获取效率,也是理解物联网数据链路的经典实践。本文以tuowei1项目为例,完整拆解基于ESP32的桌面信息屏从选

weixin_29170327的博客 297

STM32+ESP8266天气时钟:从硬件选型到软件调试的完整实战

嵌入式系统开发中,MCU与WiFi模块的协同工作是实现物联网应用的基础。通过串口通信和AT指令,主控芯片可以驱动网络模块获取云端数据,并结合本地传感器实现环境监测。这种架构在智能家居、气象站等场景中广泛应用,尤其适合需要实时数据展示的桌面设备。STM32与ESP8266的组合兼顾性能与成本,通过JSON解析和TFT屏幕驱动,能够构建功能完整的天气时钟系统。

weixin_33980459的博客 171
上一篇: 米思奇(Mixly)连接OneNet物联网平台(一)
下一篇: 详解:天气预报,基于ESP8266,彩屏显示 之 屏幕
老徐·
博客等级 码龄14年 47粉丝 4原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值