收藏官网首页
查看: 22441|回复: 9

【SOC】OLED显示温湿度

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
跳转到指定楼层
楼主
发表于 2018-3-26 22:00:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
注册成为机智云开发者,手机加虚拟设备快速开发
    近几天,为学习SPI、单总线,参考了另人的代码,编了DHT11SPI口的OLED显示驱动。
接口:
DHT11    DATA <---- > GPIO4   esp8266
OLED      SCL < ---- >  GPIO13 ESP8266
OLED      SDA < ---- >  GPIO12  ESP8266
OLED      RST < ---- >  GPIO14  ESP8266
OLED      D/C < ---- >  GPIO16  ESP8266
          OLED可显示字符、汉字、带小数点的数字。
由于无法连上math.h库,不能使用pow、log10函数,发帖求助,又没人帮忙,只好自编了2个简单函数。
现共享驱动给大家,不当地方请指正。
DHT11.zip (1.05 KB, 下载次数: 85)


SSD1306.zip (4.2 KB, 下载次数: 92)


0

主题

2

帖子

273

积分

中级会员

Rank: 3Rank: 3

积分
273
沙发
发表于 2018-3-27 12:41:29 | 只看该作者
henhaoyong
板凳
发表于 2018-3-27 17:28:22 | 只看该作者
i2c的oled我今天在写,温湿度传感器直接移植就行了,不明白的加我QQ我给你看一下,1083791810
发烧友

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
地板
 楼主| 发表于 2018-3-27 21:06:59 | 只看该作者
i2c的我也编了,烧录后才发现我的OLED并不支持i2c,所以就改为spi了。编这个主要是学习总线的时序关系。

9

主题

81

帖子

1256

积分

金牌会员

Rank: 6Rank: 6

积分
1256
5#
发表于 2018-3-28 09:30:52 | 只看该作者
校园创客福利
您这个是SDK开发的么?还是Andunio ,我有SDK的
1、机智云Adnroid开源框架QQ交流群: 434878850

QQ群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
2、机智云微信公众号: 机智云 gizwits /   机智云智能宠物屋go-iot
关注机智云Gizwits官方公众号随

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
6#
 楼主| 发表于 2018-3-28 13:55:17 | 只看该作者
这是在ESP8266上SOC方案SDK加的,因为这个ESP8266的没有找到,所以参考Arduino自己编了一个。我觉得ESP8266还有很大能力完成一些功能,没必要交给Arduino做,虽然Ardino有很多开源的资源,但体积大,所以我喜欢用SOC方案。

15

主题

135

帖子

2189

积分

金牌会员

Rank: 6Rank: 6

积分
2189
7#
发表于 2018-8-31 14:40:22 | 只看该作者

我把SSD1306_spi.c及SSD1306_spi.h文件分别添加到生成的SOC工程(RGB,DH11,Motor已移植验证)当中对就的路径,并在user_main.c中添加了头文件包含,在User_Init函数中添加了SSD1306_spi的初始化函数,然后编译,不能够通过,请问你这部分是怎么移植的?

13

主题

81

帖子

1241

积分

金牌会员

Rank: 6Rank: 6

积分
1241
8#
 楼主| 发表于 2018-9-1 08:30:34 | 只看该作者
本帖最后由 海底沙 于 2018-9-1 08:43 编辑
Seasonic 发表于 2018-8-31 14:40
我把SSD1306_spi.c及SSD1306_spi.h文件分别添加到生成的SOC工程(RGB,DH11,Motor已移植验证)当中对就的 ...

       其实现在的SOC固件已经优化的很好了,绝大部分自己要的功能只添加到gizwits_product.c就行,其他文件可以不动的,其中
                        初始化加到   void ICACHE_FLASH_ATTR userInit(void),
       下传数据执行控制加到   int8_t ICACHE_FLASH_ATTR gizwitsEventProcess(eventInfo_t *info, uint8_t *data, uint32_t len),
上传数据或运行的功能加到   void ICACHE_FLASH_ATTR userHandle(void),ESP8266采用定时中断方式运行,userHandle() 1秒钟(可修改)运行一次,所以,可把自己编写的函数或功能代码放到userHandle() 运行。
       因此添加如下代码到gizwits_product.c就行:

#include "driver/SSD1306_spi.h"
#include "driver/dht.h"

double tem,hum;
extern uint8_t humidity;
extern uint8_t temperature;
protocolTime_t sntp_time;  //定义时间结构体

void ICACHE_FLASH_ATTR userHandle(void)
{
  gagentGetNTP(&sntp_time); //读取时间

//显示时间
ssd1306_spi_double(0,0,6,sntp_time.month,2,0);
ssd1306_spi_P8x16Str(16,6,"-");
ssd1306_spi_double(0,24,6,sntp_time.day,2,0);
ssd1306_spi_double(0,48,6,sntp_time.hour,2,0);
ssd1306_spi_P8x16Str(64,6,":");
ssd1306_spi_double(0,72,6,sntp_time.minute,2,0);
ssd1306_spi_P8x16Str(88,6,":");
ssd1306_spi_double(0,96,6,sntp_time.second,2,0);

//每分钟刷新一次温、湿度,并上报数据至机智云
if(sntp_time.second == 0)
{
  dht_read();
  ssd1306_spi_cls();
  ssd1306_spi_P16x16Ch(0,2,0);  //温
  ssd1306_spi_P16x16Ch(16,2,2);  //度
  ssd1306_spi_P8x16Str(32,2,":");
  ssd1306_spi_P16x16Ch(96,2,3);
  ssd1306_spi_P16x16Ch(0,4,1);   //湿
  ssd1306_spi_P16x16Ch(16,4,2);  //度
  ssd1306_spi_P8x16Str(32,4,":");
  ssd1306_spi_P8x16Str(96,4,"%");
  ssd1306_spi_double(1,87,2,temperature,1,1);
  ssd1306_spi_double(1,87,4,humidity,1,1);

  currentDataPoint.valuetemp = temperature * 1.0;   //Add Sensor Data Collection
  currentDataPoint.valuehumi = humidity * 1.0;   //Add Sensor Data Collection
  
  system_os_post(USER_TASK_PRIO_2, SIG_UPGRADE_DATA, 0);
}
}

void ICACHE_FLASH_ATTR userInit(void)
{
    gizMemset((uint8_t *)¤tDataPoint, 0, sizeof(dataPoint_t));

    dht_init();
    ssd1306_spi_init();
}

3

主题

52

帖子

918

积分

高级会员

Rank: 4

积分
918
10#
发表于 2019-5-1 15:46:34 | 只看该作者
注册成为机智云开发者,手机加虚拟设备快速开发
谢谢aaaaaaaaaaaaaaaaaaaaaaaaa
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表