RT-Thread基础学习(四)-桌面迷你时钟

第一节-基于探索者创建工程

开发板是探索者STM32F407,配置选择默认,直接基于开发板创建新工程。
在这里插入图片描述通过串口配置终端。
在这里插入图片描述
打印界面如图所示:
在这里插入图片描述
下载完毕之后,复位运行。可以看到开发板每隔0.5S闪烁一次。
在这里插入图片描述
在这里插入图片描述
实验一配置完成,结束。

方式2,按照例程配置,终端打印出Hello RT-Thread。之后按照例程继续配置。
在这里插入图片描述
之后添加点灯代码。
在这里插入图片描述

第二节- 获取温湿度传感器数据

在软件添加包中,添加DHT11的包到工程中,修改引脚到PF9,运行结果如下,由于添加包已经在创建的时候完成了线程的创建,所以在这里就不需要重新为包创建线程了。
在这里插入图片描述

第二节- 获取NTP时间

第一步,在工程中添加lic组件,如图所示。
在这里插入图片描述

添加完成ESP8266的包之后,修改无线网络的参数以及客户端串口名称。
在这里插入图片描述

添加串口的宏定义,配置串口。
在这里插入图片描述

修改uart的缓冲区大小。
在这里插入图片描述

配置完成之后,打开终端界面如图所示。
在这里插入图片描述

打印当前的网卡配置。

在这里插入图片描述
连接百度成功
在这里插入图片描述

添加ntp组件并且开启RTC。
在这里插入图片描述

打开服务器配置。
在这里插入图片描述

测试ntp功能成功。
在这里插入图片描述
在这里插入图片描述
之后添加代码,开启自动对时功能。

第四节-显示时间和温度

添加C++组件到工程中。
在这里插入图片描述

重新构建工程,并且测试代码,代码没有问题。
在这里插入图片描述

因为没有小屏幕,仅仅在这里实现了包的添加。
在这里插入图片描述
有硬件的情况下,接下来要做的就是勾选OLED和开发板的软件通信IIC。并且配置引脚。紧接着测试代码没有错误之后编写线程函数。

线程函数如下所示: 对程序进行的说明和修改。

#include <rthw.h>
#include <rtthread.h>
#include <rtdevice.h>
#include <U8g2lib.h>
#include <stdio.h>

#include <drv_soft_i2c.h>//软件IIC头文件

extern "C"
{
#include <sht3x.h>//包含温湿度传感器的头文件
}
extern "C"
{
sht3x_device_t sht3x_init(const char *i2c_bus_name, rt_uint8_t sht3x_addr);
rt_err_t sht3x_read_singleshot(sht3x_device_t dev);
}


#define OLED_I2C_PIN_SCL                    7   // PA7
#define OLED_I2C_PIN_SDA                    20  // PB4

static U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0,\
                                         /* clock=*/ OLED_I2C_PIN_SCL,\
                                         /* data=*/ OLED_I2C_PIN_SDA,\
                                         /* reset=*/ U8X8_PIN_NONE);

#define SUN 0
#define SUN_CLOUD  1
#define CLOUD 2
#define RAIN 3
#define THUNDER 4

static void drawWeatherSymbol(u8g2_uint_t x, u8g2_uint_t y, uint8_t symbol)
{

  switch(symbol)
  {
    case SUN:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 69);
      break;
    case SUN_CLOUD:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 65);
      break;
    case CLOUD:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 64);
      break;
    case RAIN:
      u8g2.setFont(u8g2_font_open_iconic_weather_6x_t);
      u8g2.drawGlyph(x, y, 67);
      break;
    case THUNDER:
      u8g2.setFont(u8g2_font_open_iconic_embedded_6x_t);
      u8g2.drawGlyph(x, y, 67);
      break;
  }
}

static void drawWeather(uint8_t symbol, int degree)
{
  drawWeatherSymbol(0, 63, symbol);
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(55, 63);
  u8g2.print(degree);
  u8g2.print("C");
}
static void drawHumidity(uint8_t symbol, int humidity)
{
  drawWeatherSymbol(0, 63, symbol);
  u8g2.setFont(u8g2_font_logisoso32_tf);
  u8g2.setCursor(55, 63);
  u8g2.print(humidity);
  u8g2.print("%");
}


void oled_display()
{
    u8g2.begin();
    u8g2.clearBuffer();

    u8g2.setFont(u8g2_font_logisoso32_tf);
    u8g2.setCursor(48+3, 42);
    u8g2.print("Hi~");     // requires enableUTF8Print()

    u8g2.setFont(u8g2_font_6x13_tr);            // choose a suitable font
    u8g2.drawStr(30, 60, "By Mculover666");   // write something to the internal memory
    u8g2.sendBuffer();

    sht3x_device_t  sht3x_device;
    sht3x_device = sht3x_init("i2c1", 0x44);

    rt_thread_mdelay(2000);

    int status = 0;
    char mstr[3];
    char hstr[3];
    time_t now;
    struct tm *p;
    int min = 0, hour = 0;
    int temperature = 0,humidity = 0;

    while(1)
    {
        switch(status)
        {
            case 0:
                now = time(RT_NULL);
                p=gmtime((const time_t*) &now);
                hour = p->tm_hour;
                min = p->tm_min;
                sprintf(mstr, "%02d", min);
                sprintf(hstr, "%02d", hour);


                u8g2.firstPage();
                do {
                     u8g2.setFont(u8g2_font_logisoso42_tn);
                     u8g2.drawStr(0,63,hstr);
                     u8g2.drawStr(50,63,":");
                     u8g2.drawStr(67,63,mstr);
                   } while ( u8g2.nextPage() );


                rt_thread_mdelay(5000);
                status = 1;
                break;
           case 1:
               if(RT_EOK == sht3x_read_singleshot(sht3x_device))
               {
                   temperature = (int)sht3x_device->temperature;
               }
               else
               {
                   temperature = 0;
               }
               u8g2.clearBuffer();
               drawWeather(SUN, temperature);
               u8g2.sendBuffer();
               rt_thread_mdelay(5000);
               status = 2;
               break;
           case 2:
               if(RT_EOK == sht3x_read_singleshot(sht3x_device))
              {
                   humidity = (int)sht3x_device->humidity;
              }
              else
              {
                  humidity = 0;
              }
              u8g2.clearBuffer();
              drawHumidity(RAIN, humidity);
              u8g2.sendBuffer();
              rt_thread_mdelay(5000);
              status = 0;
              break;
        }
    }
}
MSH_CMD_EXPORT(oled_display, oled start);

第五节-使用内置 Git 插件管理项目

在首选项的GIT中华配置进入配置界面。
在这里插入图片描述

由于本机没有GIT,所以要在官网上下载git项目。安装完成界面:
在这里插入图片描述
在这里插入图片描述
紧接着创建共享项目。
在这里插入图片描述选择Show in Repositories View,进入仓库界面,

在这里插入图片描述

历史界面。
在这里插入图片描述

对工程进行提交操作。
在这里插入图片描述
提交成功。工程完结。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值