最好的电子音响科技diy制作网站

haoDIY_音响电子电脑科技DIY小制作发明

物联网简单:与nodemcu家气象站和OLED

时间:2017-05-23 22:15来源:未知 作者:admin 点击:
VCC(我们可以连接到外部5V或3.3V的nodemcu); 数据输出; 没有连接 地面。 一旦你通常会使用传感器的距离小于20m,10K欧姆的电阻应连接数据和VCC引脚之间。 输出引脚将被连接到nodemcu引脚D3(见上图)。 一旦传
物联网简单:与nodemcu家气象站和OLED
下面是一个“<strong>传感器</strong>”大赛获奖并入围“<b style="font-style: italic;">微控制器</b>”竞赛。谢谢你所有的票!;-)

让我们持续我们的物联网的探索,与nodemcu。在本教程中,我们将开发一个家气象站,在那里我们将户外信息温度和气候条件包括目前天和3天的预测显示。本站也将室内温度和空气湿度的显示信息。

上面的图为我们提供了项目概述。

在贝娄的视频你可以看到最终的项目工作:

步骤1:物料清单(BOM)

比尔材料(BOM)

(所有的值都是参考美元)

  1. nodemcu esp8266-12e(8.79美元)
  2. 0.96“I2C IIC串行128X64白色OLED液晶显示模块显示(8.99美元)
  3. am2302 DHT22温湿度传感器(9.88美元)
  4. 迷你板(1美元)
  5. 男性与女性的杜邦电缆(1美元)
  6. 外部5V电源或电池

步骤2:安装在nodemcu OLED

安装在nodemcu OLED
我认为你有你的Arduino IDE已经准备好所需的图书馆运行nodemcu代码。如果不是,请访问我的授予教程:从blynk眨眼,对nodemcu esp-12e翅膀IOT的旅程

现在是时候安装OLED显示屏,我们的老朋友,SSD1306,这主要特点:

  • 显示尺寸:0.96“
  • IIC串行I2C
  • 128x64
  • 白光OLED液晶LED

连接器件引脚的nodemcu,如波纹管在以上电气图所示:

  • SDA的= = > D1(5)
  • SCL * = = > D2(4)*你也可以找到“A”中的文本
  • VCC = = >的SSD1306可采用5V或3.3V(外部)直接从nodemcu模块。
  • GND = = > GND

一旦我们有了连接显示器,让我们下载我们的Arduino IDE安装它的图书馆。我们利用以前的项目使库的版本,但这一次我们将探讨另一个:“ESP8266 OLED为SSD1306显示“Daniel Eichhorn开发的驱动程序(确保你使用的版本3.0.0或更大!)

贝娄图书馆必须下载并安装在你的Arduino IDE:

https://github.com/squix78/esp8266-oled-ssd1306

一旦你重新启动IDE,图书馆应该已经安装。

该库支持I2C协议,使用内置的有线接入的OLED显示屏。H库:

#包括<<丝。”
 #包括“SSD1306。H”
 SSD1306显示(地址,SDA,SDC);

我们列出了一些重要的API将使用我们的OLED显示器。完整的列表可以在上面提供的GitHub创立。

A.显示控制:

无效();//初始化显示
无效resetdisplay(void);//循环通过初始化
无效显示(void);/ /打开
无效displayoff显示(void);//将显示产品
清空(void);//清除局部像素缓冲
无效invertdisplay(void);/ /倒置显示模式
虚空(void);正常/正常显示模式
无效setcontrast(char对比);//设置显示对比
无效flipscreenvertically();//把显示器颠倒

B.像素图

无效设置颜色(oleddisplay_color颜色);//设置所有像素操作
空隙SetPixel颜色(int16_t X,Y int16_t);/ /画一个像素在给定的位置
空隙DrawLine(int16_t x0,int16_t Y0,int16_t int16_t X1,Y1);//画一条线从0到1 
 POS POS无效drawhorizontalline(int16_t X,Y int16_t,int16_t长度);//画一条水平线
无效drawverticalline(int16_t X、Y int16_t,int16_t长度);//画林垂直
无效drawfastimage(int16_t X,Y int16_t,int16_t int16_t宽度,高度,const char *图像);/ /画一个位图图像格式的内部

C.文本操作:

无效的束带(int16_t X,Y int16_t,字符串文本);
 /写的文字在给定的位置
 uint16_t getstringwidth(const char *的文字,uint16_t长度);
 /字符串的当前字体设置
宽度/返回const uint16_t getstringwidth(文本/方便的方法为const char版);
 / 
无效settextalignment(oleddisplay_text_alignment TextAlignment);
 / text_align_left,text_align_center,text_align_right,text_align_center_both 
无效设置字体(const char* fontdata);
 /。
 
 /可用的默认字体:arialmt_plain_10,arialmt_plain_16

D.帧(“UI库”)

UI库是用来提供一个基本的用户界面元素,<em>框架</em>和<em>覆盖</em>。一个框架是用来提供默认行为是显示某个确定的时间比移动到下一个信息(如“页”)。标准库还提供了一个指标,会相应的更新。另一方面,一个覆盖是一件信息(如时钟)显示总是在相同的位置。

无效();//初始化显示
无效settargetfps(uint8_t FPS);/ /配置内部目标FPS 
无效enableautotransition();/ /启用自动过渡到下一帧
无效disableautotransition();/ /禁用自动过渡到下一帧。
无效setautotransitionforwards();//设置方向如果自动转换
无效setautotransitionbackwards();//设置方向如果自动转换
无效settimeperframe(uint16_t时间);//设置约时间框显示
无效settimepertransition(uint16_t时间);//设置约时间的过渡将
无效setframeanimation(animationdirection目录);//设置动画是用来过渡
无效setframes(framecallback * framefunctions,uint8_t frameCount);//加框的绘图功能
 int8_t update();//这需要召集主要是

一旦两OLED本身及其库安装,让我们写一个简单的“Hello World程序来测试它。输入以下代码在您的IDE,结果应该显示在上面的照片所示:

/* Hello World OLED Test */
#include   // Only needed for Arduino 1.6.5 and earlier
#include "SSD1306.h" // alias for `#include "SSD1306Wire.h"`
SSD1306  display(0x3c, 5, 4); // Initialise the OLED display using Wire library
void setup() 
{
  Serial.begin(115200);
  display.init(); // Initialising the UI will init the display too.
  display.flipScreenVertically();
  
  display.clear();
  drawHelloWorld(); 
  display.display();
}
void loop() 
{
  
}
void drawHelloWorld() 
{
    display.setTextAlignment(TEXT_ALIGN_LEFT);
    display.setFont(ArialMT_Plain_10);
    display.drawString(0, 0, "Hello world");
    display.setFont(ArialMT_Plain_16);
    display.drawString(0, 10, "Hello world");
    display.setFont(ArialMT_Plain_24);
    display.drawString(0, 26, "Hello world");
}

现在,上传素描:<em>ssd1306simpledemo.ino</em>,部分实例库。在运行代码,改变OLED引脚连接一致:

//初始化OLED显示器使用钢丝库
 SSD1306显示(0x3C,5,4);

视频显示的OLED播放演示测试代码:

步骤3:拿到室内数据

拿到室内数据

我们的nodemcu正在同世界现在!所以,让我们给它一些真实的东西展现出来!我们将安装数字温湿度传感器。旧的和良好的dhtxx(DHT11 DHT22)。这个Adafruit网站这些传感器提供重要信息。波纹管,从那里获取一些信息:

简介

低成本的DHT的温湿度传感器是非常基本的和缓慢的,但都是伟大的爱好者谁想要做一些基本的数据记录。DHT的传感器是由两部分组成,电容式湿度传感器和热敏电阻。还有一个非常基本的芯片里面做一些模拟到数字的转换,吐出一个温湿度数字信号。数字信号是相当容易使用任何单片机读取。

DHT11 VS DHT22

我们有两个版本的DHT的传感器,它们看起来有点相似,具有相同的引脚,但具有不同的特点。这里的规格:

DHT11

  • 超低成本
  • 3到5V的电源和I / O
  • 2.5ma最大电流在转换(同时请求数据)
  • 为20-80%湿度读数精度好5%
  • 为0-50°C温度读数±2°C精度好
  • 不超过1 Hz采样率(每秒一次)
  • 车身尺寸15.5mm x 12mm x 5.5mm
  • 4引脚间距0.1”

DHT22

  • 低成本
  • 3到5V的电源和I / O
  • 2.5ma最大电流在转换(同时请求数据)
  • 好为0-100%湿度2-5%的准确性
  • 好的- 40至125°C温度读数±0.5°C精度
  • 不超过0.5 Hz采样率(每2秒一次)
  • 车身尺寸15.1mm x 25mm x 7.7mm
  • 4引脚间距0.1”

正如你所看到的,是一个小的DHT22更准确,好一个稍大的范围。使用一个单一的数字引脚和“迟缓”,你不能查询超过每隔二(DHT11)或两个(DHT22)。

两传感器将可以让室内信息显示在我们家气象站。

有4的dhtxx引脚(面向传感器,引脚1是最左):

  • #p#分页标题#e#VCC(我们可以连接到外部5V或3.3V的nodemcu);
  • 数据输出;
  • 没有连接
  • 地面。

一旦你通常会使用传感器的距离小于20m,10K欧姆的电阻应连接数据和VCC引脚之间。输出引脚将被连接到nodemcu引脚D3(见上图)。

一旦传感器安装在我们的模块,下载DHT文库Adafruit GitHub库安装在你的Arduino的库文件。一旦你重新加载你的Arduino IDE,“DHT传感器库”应安装。

让我们来定义我们的传感器参数和相关的变量(我们将使用首先,DHT22):

/ * * / 
 DHT22 #包括“DHT。H”
 #定义dhtpin D3 
 #定义dhttype DHT22 
 DHT DHT(dhtpin,DHTTYPE);
 int localhum = 0;
 int localtemp;

现在,让我们创建一个函数来读取数据:

/ *************************************************** 
 *室内温度/湿度数据
 **************************************************** / 
无效getdht() 
 { 
浮tempini = localtemp;
浮humini = localhum;
 localtemp = DHT。readtemperature();
 localhum = DHT。readhumidity();
如果(isnan(localhum)| | isnan(localtemp))/检查是否有读失败和退出早期(再试一次)。
 { 
串行out.println(“无法读取;
 localtemp = tempini;
 localhum = humini;
回报;

一旦我们有了数据,让他们在我们的OLED显示器:

/***************************************************
* Draw Indoor Page
****************************************************/
void drawDHT() 
{
  int x=0;
  int y=0;
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(0 + x, 5 + y, "Hum");
  
  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(43 + x, y, "INDOOR");

  display.setFont(ArialMT_Plain_24);
  String hum = String(localHum) + "%";
  display.drawString(0 + x, 15 + y, hum);
  int humWidth = display.getStringWidth(hum);

  display.setFont(ArialMT_Plain_10);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawString(95 + x, 5 + y, "Temp");

  display.setFont(ArialMT_Plain_24);
  String temp = String(localTemp) + "°C";
  display.drawString(70 + x, 15 + y, temp);
  int tempWidth = display.getStringWidth(temp);
}

上面的照片显示了如何将数据显示在显示。

你可以下载完整的代码为室内操作从我的GitHub:
家气象站室内编码

或使用文件贝娄:

 
  • home_weather_station_indoor.inohome_weather_station_indoor.ino
    下载

步骤4:户外资料:地下气象服务

户外资料:地下气象服务

我们的室外气象数据将通过免费提供的服务,地下气象您将需要创建一个帐户,在他们的网站上,得到一个天气的API密钥。做以下说明贝娄链接:

https://www.wunderground.com/weather/api

我们的气象站是基于由Daniel Eichhorn完成伟大的工作(@ squix78)。按照他的指示去GitHub拨库。你至少需要安装图书馆贝娄:

  • Daniel Eichhorn气象站:https://github.com/squix78/esp8266-weather-station
  • JSON解析器的Daniel Eichhorn流:https://github.com/squix78/json-streaming-parser

在你的图书馆安装IDE重新开始下载程序从下面我的GitHub:

mjrobot家气象站代码

一旦你的代码加载到你的Arduino IDE,打开“stationcredentials。H”和你的人事数据代替虚拟数据:

/ * * / WiFi 
 const char* wifi_ssid =“你的SSID”;
 const char* wifi_pwd =“密码”;
 
 / * * / 
 wunderground设置常量布尔is_metric = true;
 const string wundergrround_api_key =“钥匙”;
 const string wundergrround_language =“en”;
 const string wunderground_country =“瘦肉精”;
;
请注意,我们将从地下服务检索天气信息将以圣地亚哥(城市)和Cl(国:智利)。你必须改变你自己城市的数据。

这就是它!你的站必须运行,现在你可以看见我的原型的照片。

步骤5:将站在盒子里

把站在盒子里

最后一个阶段是装配我们站在盒子。我只做了一个简单的例子,如上图所示。我也改变了DHT22与DHT11,只为乐趣

不要忘记更改文件“stationdefines适当的DHT的宣言。”)。

这是所有的人们!

步骤6:结论

结论

(责任编辑:admin)
织梦二维码生成器
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片