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烟雾传感器,温度传感器。并将数据以折线图的形式展现在屏幕上

1E541CCD9C592ED6C65FB43399AB18C6

5E4E0DB1014CFB090DB0A08BEE07E34C

E2674AF54B89E546F199FF7F23181FCD

代码分析

这里使用Arduino,使用了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永远的神!!!!!!!

功能展示

DC6158A1357A0C07ADC9A21FB2B96DB1

这里我们可以看到目前的传感器数据:温度,烟雾,红外。

可以看到10C左右的室温,挺暖和的。

MQ的读数0.08以下,正常,这里没有人吸烟

热释电红外线传感器这里可以看到一个下降,手刚刚略过传感器,正常。

心得体会

这是第12期了从半路上来就一直坚持了下来,12月因为有事所以选择了项目一,Arduino永远的神,简单高效。

这应该是最后一期了,希望后面会有更多的类似活动。

硬禾学堂&得捷电子yyds!!!