Wio Terminal介绍
Wio Terminal 是基于SAMD51的微控制器,具有 Realtek RTL8720DN 支持的无线连接,与Arduino和MicroPython兼容。它的运行速度为 120MHz (最高可达200MHz), 4MB 外部闪存和 192KB RAM。它同时支持蓝牙和Wi-Fi,为物联网项目提供了骨架。Wio Terminal自身配有LCD屏幕, 板载IMU(LIS3DHTR),麦克风,蜂鸣器,microSD卡槽,光传感器和红外发射器(IR 940nm)。 最重要的是它还有两个用于Grove生态系统 的多功能Grove端口和40个Raspberry pi兼容的GPIO引脚,用于支持更多附加组件。
- MCU, LCD, WIFI, BT, IMU, 麦克风, 蜂鸣器, microSD Card, 光传感器, 五向开关, 光传感器和红外发射器 (IR 940nm), 加密验证
- 软件支持:Arduino、MicroPython、ArduPy、AT Firmware
Wio Terminal还有大量应用与案例,对于我们的使用提供了极大的帮助。
项目功能介绍
本次利用背部Raspberry pi兼容的GPIO引脚,通过杜邦线连3个传感器:热释电红外线传感器,MQ烟雾传感器,温度传感器。并将数据以折线图的形式展现在屏幕上。
热释电红外线传感器
MQ烟雾传感器
温度传感器
代码分析
这里使用Arduino IDE进行,在Wio Terminal入门教程中有着较为详细的介绍。
其中使用了seeed的折线图
#include"seeed_line_chart.h"//折线图头文件
TFT_eSPI tft;
折线图的设置
void setup()
{
tft.begin(); //初始化
tft.setRotation(3); //选择一个角落为原点(能填0~3)
spr.createSprite(TFT_HEIGHT,TFT_WIDTH); //定折线图的长和宽
pinMode(A7,INPUT);
Serial.begin(9600);
}
void loop()
{
//刷新屏幕
spr.fillSprite(TFT_WHITE);
if (data_1.size() == max_size) { //变量数目超过同屏最大值
data_1.pop(); //删除第一个数据
}
if (data_2.size() == max_size) {
data_2.pop(); //删除第一个数据
}
if (data_3.size() == max_size) {
data_3.pop(); //删除第一个数据
}
LCD显示设置
//标题设置
//标题1
auto header_1 =text(50, 0)//标题位置
.value("tem") //标题内容
.align(center) //标题水平???
.valign(vcenter) //标题垂直???
.width(6) //标题宽度
.thickness(3); //字体的粗细
header_1.height(header_1.font_height() * 2); //标题的高度是字体高度的两倍
header_1.draw();
//标题2
auto header_2 =text(200, 0)//标题位置
.value("smoke") //标题内容
.align(center) //标题水平???
.valign(vcenter) //标题垂直???
.width(6) //标题宽度
.thickness(3); //字体的粗细
header_2.height(header_2.font_height() * 2); //标题的高度是字体高度的两倍
header_2.draw();
//标题3
auto header_3 =text(200, 150)//标题位置
.value("infra-red") //标题内容
.align(center) //标题水平???
.valign(vcenter) //标题垂直???
.width(6) //标题宽度
.thickness(3); //字体的粗细
header_3.height(header_3.font_height() * 2); //标题的高度是字体高度的两倍
header_3.draw();
//设置折线图
//图1
auto content_1 = line_chart(0, 0);//折线图原点位置
content_1
.height(TFT_WIDTH/2) //折线图的实际高度
.width(TFT_HEIGHT/2-10) //折线图的实际宽度
.based_on(0.0) //不知道???
.show_circle(false) //在每个点绘制圆环时,默认设置为启用。
.value(data_1) //将数据传递到折线图
.color(TFT_PURPLE) //折线图线条的颜色
.draw();
//图2
auto content_2= line_chart(TFT_HEIGHT/2-10, 0);//折线图原点位置
content_2
.height(TFT_WIDTH/2) //折线图的实际高度
.width(TFT_HEIGHT/2-10) //折线图的实际宽度
.based_on(0.0) //不知道???
.show_circle(false) //在每个点绘制圆环时,默认设置为启用。
.value(data_2) //将数据传递到折线图
.color(TFT_PURPLE) //折线图线条的颜色
.draw();
//图3
auto content_3= line_chart(0,TFT_HEIGHT/2-50);//折线图原点位置
content_3
.height(TFT_WIDTH/2) //折线图的实际高度
.width(TFT_HEIGHT/2-10) //折线图的实际宽度
.based_on(0.0) //不知道???
.show_circle(false) //在每个点绘制圆环时,默认设置为启用。
.value(data_3) //将数据传递到折线图
.color(TFT_PURPLE) //折线图线条的颜色
.draw();
Arduino永远的神!!!!!!!
至于详细的分析,注释都写德很清楚了。
功能展示
这里我们可以看到目前的传感器数据:温度,烟雾,红外。
可以看到10C左右的室温,挺暖和的。
MQ的读数0.08以下,正常,这里没有人吸烟
热释电红外线传感器这里可以看到一个下降,手刚刚略过传感器,正常。
心得体会
这是第12期了从半路上来就一直坚持了下来,12月因为有事所以选择了项目一,Arduino永远的神,简单高效。
这应该是最后一期了,希望后面会有更多的类似活动。
硬禾学堂&得捷电子yyds!!!