第一节-基于探索者创建工程
开发板是探索者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,进入仓库界面,
历史界面。
对工程进行提交操作。
提交成功。工程完结。