1.资源介绍
该项目主要为WIO TERMINAL开发板的体验项目。该开发板的主要功能如下图所示。
该模块拥有以下特点:
1.高集成度,MCU、LCD、Wi-Fi、蓝牙、IMU、麦克风、 蜂鸣器、microSD 卡、可配置的按钮、光传感 器、五向开关、红外发射器 (IR 940 nm) 和 CryptoAuthentication 就绪。
2.
由 Microchip ATSAMD51P19 驱动
· Arm® Cortex®-M4F 内核以 120 MHz 的频率运行(可倍频至 200 MHz)
· 4 MB 外部闪存,192 KB RAM
· 全面的协议支持
· SPI、I2C、I2S、ADC、DAC、PWM 和 UART
3.
强大的无线连接
· 由 Realtek RTL8720DN 提供技术支持
· 双频 2.4 GHz/5 GHz Wi-Fi (802.11 a/b/g/n)
· BL/BLE 5.0
4.
Grove 生态系统
· 用于探索物联网的 300 多个 Grove 模块
· 两个板载多功能 Grove 端口可用于数字、模拟、 I2C 和 PWM
· 简洁易懂的100%开源硬件设计
· 使用 LCD 屏幕和紧凑型外壳,无需费力从零搭建
· 用易于使用的图形元素和漂亮的可视化编辑工具创 建嵌入式GUI
5.
· USB OTG 支持
· USB 主机
· 辅助设备:鼠标、键盘、MIDI 设备、Xbox/PS 游戏控制 器和3D 打印机
· USB 客户端
· 模拟设备:鼠标、键盘和 MIDI 设备)
2.功能介绍
本次任务主要是制作一个天气预报站,通过获取心知天气的api数据,将数据显示在屏幕上,包括当天的天气信息,温度、天气、空气质量以及夜间空气质量,除此之外还能显示未来三天的天气信息。
3.代码
void setup(){
pinMode(WIO_KEY_A, INPUT_PULLUP);
pinMode(WIO_KEY_B, INPUT_PULLUP);
pinMode(WIO_KEY_C, INPUT_PULLUP);
lis.begin(Wire1);
lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ);
lis.setFullScaleRange(LIS3DHTR_RANGE_2G);
Serial.begin(9600);
Serial.println("");
tft.begin();
tft.setRotation(1);
tft.fillScreen(TFT_BLACK);
tft.setFreeFont(FMB12);
tft.setCursor((320 - tft.textWidth("天气预报站"))/2, 120);
tft.print("天气预报站");
delay(2000);
// 连接WiFi
connectWiFi();
}
void loop(){
int i=0;
// 建立心知天气API当前天气请求资源地址
String reqRes1 = "/v3/weather/daily.json?key=" + reqUserKey +
+ "&location=" + reqLocation + "&language=en&unit=" +
reqUnit + "&start=0&days=3";
String reqRes2 = "/v3/air/daily.json?key=" + reqUserKey1 +
+ "&language=en" +"&location=" + reqLocation;
// 向心知天气服务器服务器请求信息并对信息进行解析
httpRequest1(reqRes1);
if(i<=5000)
{
httpRequest2(reqRes2);
i++;
}
//按键换页函数
if (digitalRead(WIO_KEY_A) == LOW)
{
p2lcd();
Serial.println("A Key pressed");
delay(500);
}
if (digitalRead(WIO_KEY_B) == LOW)
{
showfirstdata();
Serial.println("B Key pressed");
delay(500);
}
//显示主函数
// pwmlcd();
if(ii==0)
{
showfirstdata();
ii=1;
}
}
其中,两个界面的代码分别是:
void showfirstdata() {
tft.fillScreen(TFT_WHITE);
tft.fillRoundRect(10, 30, 140, 90, 5, tft.color565(173,216,230));
tft.fillRoundRect(170,30, 140, 90, 5, tft.color565(173,216,230));
tft.fillRoundRect(10, 140,140, 90, 5, tft.color565(173,216,230));
tft.fillRoundRect(170,140,140, 90, 5, tft.color565(173,216,230));
tft.setFreeFont(FMB9);
tft.setTextColor(TFT_BLACK);
tft.drawString("Temp:", 25, 40);
tft.drawString("Weather:",180, 40);
tft.drawString("Quality:",25, 150);
tft.drawString("Night:",180, 150);
tft.setTextColor(tft.color565(0,225,0));
tft.drawFloat(tem,1 , 25, 80);//获取温度
tft.drawString("°C",100, 80);
tft.drawString(dw, 180, 80);//获取天气状况
tft.drawString("Good",25,190);
tft.drawString(nw,180, 190); //获取晚上天气
}
//未来三天的天气情况
void p2lcd()
{
digitalWrite(LCD_BACKLIGHT, HIGH);
tft.fillScreen(TFT_WHITE);
tft.fillRoundRect(10, 40, 90, 180, 5, tft.color565(40,40,86));
tft.fillRoundRect(115, 40, 90, 180, 5, tft.color565(40,40,86));
tft.fillRoundRect(220, 40, 90, 180, 5, tft.color565(40,40,86));
//
tft.setTextColor(tft.color565(125,125,232));
tft.setFreeFont(FMB12);
tft.drawString("Qingdao "+ date,25, 10);
tft.setTextColor(tft.color565(224,225,232));
tft.setFreeFont(FMB12);
tft.drawString("Today", 10, 55);
tft.drawString("Tomo",125, 55);
tft.drawString("TDAT",235, 55);//The Day After Tomorrow
tft.setTextColor(tft.color565(0,225,0));
tft.setFreeFont(FMB9);
tft.drawString(d0,20,110);
tft.drawString(d1,125,110);
tft.drawString(d2,230,110);
tft.setTextColor(tft.color565(0,191,255));
tft.setFreeFont(FMB9);
tft.drawFloat(t0,2,20,135);
tft.drawFloat(t1,2,125,135);
tft.drawFloat(t2,2,230,135);
tft.drawString("C",75, 135);
tft.drawString("C",180, 135);
tft.drawString("C",280, 135);
tft.setTextColor(tft.color565(238,221,130));
tft.setFreeFont(FMB9);
tft.drawString(w0,20,160);
tft.drawString(w1,125,160);
tft.drawString(w2,230,160);
tft.drawFloat(wa0,0,40,160);
tft.drawFloat(wa1,0,145,160);
tft.drawFloat(wa2,0,250,160);
tft.setTextColor(tft.color565(173,216,230));
tft.setFreeFont(FMB9);
tft.drawFloat(h0,1,20,180);
tft.drawFloat(h1,1,125,180);
tft.drawFloat(h2,1,230,180);
tft.drawString("RH",65,180);
tft.drawString("RH",170,180);
tft.drawString("RH",275,180);
}
4.功能展示
详见视频
5.心得体会
此次使用wio terminal的经历让我学到了很多,也是第一次使用Arduino的编译器编写代码,中间过程犯了许多错,起初连加载库都会 出现很多问题。同时,也感谢我的好朋友,这个设计也向他学到了很多。感谢电子森林的活动,下次还参加。