| 
 | 
8#
 
 
 楼主 |
发表于 2018-9-1 08:30:34
|
只看该作者
 
 
 
 本帖最后由 海底沙 于 2018-9-1 08:43 编辑  
 
       其实现在的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(); 
} 
 |   
 
 
 
 |