
转载:http://www.adobex.com/android/source/details/00000131.htm
stm32控制ESP8266获取指定城市天气并且在led屏幕上显示
使用:
- 在ATK_ESP8266文件夹下面的wifista.c第14行修改wifi的ssid号和密码。编译烧录后即可使用。
- 在ATK_ESP8266文件夹下面的weather.c中修改85行修改天气api。
- 在PICTURE文件夹下面的picture.c修改led显示的背景图片。
- 时间的显示可以使用stm32的实时时钟模块,然后串口授时;使用时间API获取北京时间。
实验器材:
- 战舰V3\精英STM32F103开发板
- ESP8266wifi模块
实验目的:
- 学习ATK_ESP8266高性能UART_WIFI模块的使用,掌握基本的TCP,UDP通信串口AT指令配置方法.
- 获取天气api,获得天气并且显示。
硬件资源:
1,DS0(连接在PB5)
2,串口1(波特率:115200,PA9/PA10连接在板载USB转串口芯片CH340上面)
3,串口3(波特率:115200,PB10/PB11)
4,ALIENTEK 2.8/3.5/4.3/7寸TFTLCD模块(通过FSMC驱动,FSMC_NE4接LCD片选/A10接RS)
5,按键KEY0(PE4)/KEY1(PE3)/KEY_UP(PA0,也称之为WK_UP)
6,SD卡,通过SDIO(SDIO_D0D4(PC8PC11),SDIO_SCK(PC12),SDIO_CMD(PD2))连接
7,W25Q128(SPI FLASH芯片,连接在SPI2上)
8,24C02
9,ATK_ESP8266 WIFI模块1个
10.3.5寸LCD屏幕连接方式:
模块与带有无线网卡的电脑或其他wifi设备连接:采用wifi连接
模块与开发板连接(TTL串口方式):
ATK-ESP8266 WIFI模块与精英板连接方式(通过4根杜邦线连接):
ATK-ESP8266 WIFI模块 战舰V3\精英STM32开发板
TXD<------------>PB11
RXD<------------>PB10
GND<------------>GND
VCC<------------>3.3V\5V项目地址:demo
有问题欢迎提Issues,喜欢可以给个star( ˶‾᷄࿀‾᷅˵ )实验现象:
通过api获取网络天气并且图文并茂显示,led上可以显示北京时间。
转载于:https://my.oschina.net/androidcode/blog/103858
简介:该作品使用的屏幕为3.2寸淘晶驰HMI(增强版),这是一款可以通过串口控制的屏幕,优点咱就简单将几个:
1、为主控制器减压,让它能更好更快速的处理我们的任务,而不必花太多精力去处理怎么让屏幕亮起来、显示什么内容,在哪个位置显示等内容;
2、减少对主控制器端口的占用,串口屏只需要2根通讯线(TX、RX),占用的端口少了,是不是就意味着你可以接更多的传感器、模块;
3、开发简单、快捷,软件:USART HMI(含下载链接)。
软件界面
新建工程流程:文件 - 新建 - 保存文件 - 工程设置
根据你的屏幕型号选择,一般在屏幕的背面有型号注明
显示方向根据个人需求而定
到此,工程就创建完成,当然你也可以直接下载天气预报的工程,工程的拓展名为*.HMI
链接:https://pan.baidu.com/s/1wAgzKtOzy6ubKfUwXRXGTw
提取码:h1qz天气预报的工程如下所示:
点击组件,均会有该组件的详细参数
如何输出工程文件:
点击"输出"后,稍等10秒左右,会在输出目录文件下有刚输出的文件,文件拓展名为*.tft,将此文件复制到你的TF卡,给屏幕断电,将TF卡插到屏幕上的TF卡槽中,给屏幕通电,屏幕就会自动的将刚输出的文件下载到屏幕中,当出现Success,说明已经成功,此时应该先断电,然后取出TF卡再通电,屏幕就开始工作了,这个过程中出现错误提示error的可能性极低,如果出现尝试将TF卡格式化,格式为TAT32,然后重复上述步骤。
本教程演示如何创建一个气象站,该气象站使用传感器读数在LCD屏幕上解释和显示天气数据。
使用ESP32的本教程介绍了如何使用ESP32和BMP280和SSD1306来构建气象站。 该ESP32项目使用LCD显示屏显示传感器读数。 使用ESP32构建气象站是一个简单的IoT项目,但对ESP32入门并探索其主要功能很有用。 在这个项目中,为了监控压力和温度,我们将使用BMP280。 因此,本ESP32教程探讨了如何:
使用BMP280或BME280获取当前温度和压力
使用SSD1306的LCD显示屏将显示传感器的读数
为了构建这个项目,我们将使用带有PlatformIO插件的VS Code。 这是一个非常有趣的IDE,可以为我们提供帮助。
最终结果如下图所示:
要遵循本教程,您需要以下组件:
如果没有BMP280传感器,可以使用BME280。如果你使用BME280传感器,你也可以监测湿度。
BMP280是一个测量压力和温度的传感器模块。如果你有BME280,也可以测量湿度。这种传感器有几种型号。ESP32气象站采用I2C通信协议。
SSD1306是一个LCD显示器,用于显示传感器的读数。这种液晶显示器有几种型号。它们在像素方面有不同的宽度和高度。本项目使用的是128×64单色显示器。SSD1306使用I2C协议,但也可以使用SPI版本。在这种情况下,您必须更改连接
首先,让我们看看如何将ESP32连接到BMP280和SSD1306。架构如下所示:
BMP280和SSD1306是I2C设备,因此我们必须连接四个管脚:
Vcc引脚
接地引脚
时钟时钟插针
数据SDA pin
时钟和数据管脚连接到EPS32I2C管脚,如上图所示。
在第一步中,我们将从连接到ESP32的传感器(BMP280)读取数据。这很简单。首先,我们必须导入Adafruit库来管理BMP280。如果你不知道怎么做,请阅读设置ESP32 IDE段落,了解如何开始使用ESP32和PlatformIO。
#include <Arduino.h>
#include <WiFi.h>
#include <Wire.h>
#include <Adafruit_BMP280.h>
#define BMP_SDA 21
#define BMP_SCL 22
Adafruit_BMP280 bmp280;
void setup() {
Serial.begin(9600);
Serial.println("Initializing BMP280");
boolean status = bmp280.begin(0x76);
if (!status) {
Serial.println("Not connected");
}
}
void loop() {
Serial.println(WiFi.localIP());
float temp = bmp280.readTemperature();
float press = bmp280.readPressure() / 100;
Serial.println("Temperature:");
Serial.println(temp);
}
代码很简单。在包含这些定义之后,ESP32代码在第9行声明我们将用来连接BMP280传感器的对象。在setup()方法中,我们在ESP32和BMP280之间建立连接。正如您可能注意到的,代码使用地址0x76。确保您的传感器具有相同的I2C地址,或根据需要进行更改。
最后,在loop()方法中,我们读取温度和压力:
- bmp280.readTemperature()
- bmp280.readPressure()
温度以摄氏度为单位,压力以帕斯卡为单位。要转换为毫巴,必须将传感器读数除以100。
如果你用的是BME280,你也可以用同样的方法读取湿度。仅此而已,我们准备展示结果。
在ESP32项目的最后一部分中,我们将显示从传感器读取的值,并使用LCD显示器(SSD1306)显示这些值。您可以使用其他兼容的显示器来显示结果。让我们看看代码:
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 display(128, 64, &Wire, -1);
void setup() {
...
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3c)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;); // Don't proceed, loop forever
}
display.setTextSize(1);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
void loop() {
Serial.println(WiFi.localIP());
float temp = bmp280.readTemperature();
float press = bmp280.readPressure() / 100;
Serial.println("Temperature:");
Serial.println(temp);
display.clearDisplay();
display.setCursor(0,0);
display.print("Temperature:");
display.println(temp);
display.print("Pressure:");
display.println(press);
display.display();
delay(6000);
}
在这段ESP32代码中需要注意的一些事情。首先,如果您不知道如何导入库来管理SSD1306,请转到下一段。在导入定义之后,在第4行,我们定义将处理显示的对象。这个ESP32气象站使用的显示器是一个128×64的LCD,宽度和高度是定义中使用的值。如果显示的尺寸不同,请将值替换为宽度和高度。在第8行,代码试图连接到显示器。最后,它配置显示设置文本大小和文本颜色。
在loop()方法中,我们只显示从传感器读取的温度和压力。就这些。你已经用ESP32建立了你的气象站。
ESP32是一个很好的设备,它可以在多种情况下使用。例如,您可以阅读如何将ESP32连接到AWS IoT Core。
连接引脚后,我们可以将注意力集中在如何设置用于构建ESP32气象站项目的IDE上。 如前所述,我们将结合使用Visual Studio Code和Platform IO插件。 您可以从此链接下载Visual Studio。 然后单击左侧菜单上的扩展,然后查找PlatformIO插件。 安装后,您将获得以下内容:
我们已经准备好使用IDE了。
是时候创建一个新的ESP32项目了。打开PlatformIO插件并创建一个新项目。然后,选择ESP32平台。仅此而已…现在您可以创建一个新项目,我们将开发ESP32气象站入门。
创建项目后,我们可以导入库来处理BMP280和SSD1306。单击库(左侧菜单)并查找:
- BMP280
- SSD1306
一旦找到Adafruit库,就可以将其导入到项目中,并准备好使用它们。
结束…。
在本文的最后,您将了解如何从ESP32开始构建一个简单的气象站。本教程介绍了如何将ESP32与BMP280连接,以及如何使用SSD1306显示传感器读数。您可以进一步改进这个ESP32项目,添加新传感器或新功能。
附国内说明: