head

2016年7月16日土曜日

OLED+ BME280で、天気情報の表示。




0.96インチ, 128×64 OLED(有機EL) を入手できたので、
BME280センサと組合せて、esp8266経由で
クラウド連携試してみました。

表示内容: 2パターン
1)
1行目:気温
2行目:湿度(%)
2)
 気圧(hPa)

通信: I2C のみで制御

*) OLEDは、eBayさんから入手しました。

# 動画 : センサー値はクラウド側へ送信


# クラウド側、ログ




# 表示側の基板
I2Cラインを引きまわして、esp8266からは
4本の配線。


*) BME配線は、LCD版とほぼ同じです。

# 配線


# ドライバ

/*
OLED 0.96 inch+ BME280
with esp8266
OLED:
https://github.com/squix78/esp8266-oled-ssd1306
*/
#include <Wire.h>
#include <BME280_MOD-1022.h>
#include "SSD1306.h"
#include <ESP8266WiFi.h>
//#include <WiFiClient.h>
//
SSD1306 display(0x3c, 4, 5);
const char* ssid = "";
const char* password = "";
const char* mHost = "api.thingspeak.com";
const char* mHostTime = "";
String mAPI_KEY="your-KEY";
String mTimeStr="0000";
float mTemp=0;
float mHumidity=0;
float mPressure=0;
uint32_t mNextHttp= 30000;
uint32_t mTimerTmpInit=30000;
uint32_t mTimerDisp;
uint32_t mTimerTime;
uint32_t mTimerTemp;
// Arduino needs this to pring pretty numbers
void printFormattedFloat(float x, uint8_t precision) {
char buffer[10];
dtostrf(x, 7, precision, buffer);
Serial.print(buffer);
}
// print out the measurements
void printCompensatedMeasurements(void) {
//float temp, humidity, pressure, pressureMoreAccurate;
float pressureMoreAccurate;
double tempMostAccurate, humidityMostAccurate, pressureMostAccurate;
char buffer[80];
mTemp = BME280.getTemperature();
mHumidity = BME280.getHumidity();
mPressure = BME280.getPressure();
pressureMoreAccurate = BME280.getPressureMoreAccurate(); // t_fine already calculated from getTemperaure() above
tempMostAccurate = BME280.getTemperatureMostAccurate();
humidityMostAccurate = BME280.getHumidityMostAccurate();
pressureMostAccurate = BME280.getPressureMostAccurate();
}
//
void init_BME280(){
uint8_t chipID;
//Serial.println("Welcome to the BME280 MOD-1022 weather multi-sensor test sketch!");
//Serial.println("Embedded Adventures (www.embeddedadventures.com)");
chipID = BME280.readChipId();
// find the chip ID out just for fun
Serial.print("ChipID = 0x");
Serial.print(chipID, HEX);
// need to read the NVM compensation parameters
BME280.readCompensationParams();
// Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingTemperature(os1x);
BME280.writeOversamplingHumidity(os1x);
// example of a forced sample. After taking the measurement the chip goes back to sleep
BME280.writeMode(smForced);
while (BME280.isMeasuring()) {
Serial.println("Measuring...");
delay(50);
}
Serial.println("Done!");
// read out the data - must do this before calling the getxxxxx routines
BME280.readMeasurements();
// Example for "indoor navigation"
// We'll switch into normal mode for regular automatic samples
BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms
BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16
BME280.writeOversamplingPressure(os16x); // pressure x16
BME280.writeOversamplingTemperature(os2x); // temperature x2
BME280.writeOversamplingHumidity(os1x); // humidity x1
BME280.writeMode(smNormal);
}
//
void proc_http(String sTemp, String sHum, String sPre){
//Serial.print("connecting to ");
//Serial.println(mHost);
WiFiClient client;
const int httpPort = 80;
if (!client.connect(mHost, httpPort)) {
Serial.println("connection failed");
return;
}
String url = "/update?key="+ mAPI_KEY + "&field1="+ sTemp +"&field2=" + sHum+ "&field3="+sPre;
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + mHost + "\r\n" +
"Connection: close\r\n\r\n");
delay(10);
int iSt=0;
while(client.available()){
String line = client.readStringUntil('\r');
//Serial.print(line);
}
}
//
void setup() {
Serial.begin(9600);
mTimerTemp= mTimerTmpInit;
Wire.begin();
Serial.println("#setup-Start");
init_BME280();
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
//OLED
display.init();
display.flipScreenVertically();
display.displayOn();
display.clear();
}
//
void display_OLED(String sTmp, String sHum, String sPre){
sTmp="Temp:"+ sTmp+ " C";
sHum="Hum :"+ sHum+ " %";
sPre=sPre+ " hPa";
display.setFont(ArialMT_Plain_24);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString( 0, 0, sTmp );
display.drawString( 0, 32, sHum );
display.display();
delay(2000);
display.clear();
//2
display.drawString( 0, 0, "Pressure:");
display.drawString( 0, 32, sPre );
display.display();
delay(2000);
display.clear();
}
//
void loop() {
delay(100);
while (BME280.isMeasuring()) {
}
String sTmp="";
String sHum="";
String sPre="";
if (millis() > mTimerDisp) {
mTimerDisp = millis()+ 3000;
// read out the data - must do this before calling the getxxxxx routines
BME280.readMeasurements();
printCompensatedMeasurements();
int itemp =(int)mTemp;
int iHum = (int)mHumidity;
int iPress = (int)mPressure;
Serial.print("dat=");
char cTemp[4+1];
char cHum[4+1];
char cPres[4+1];
sprintf(cTemp, "%04d", itemp);
sprintf(cHum, "%04d", iHum);
sprintf(cPres, "%04d", iPress);
Serial.print(cTemp);
Serial.print(cHum);
Serial.println(cPres);
sTmp= String(itemp);
sHum= String( iHum);
sPre= String( iPress);
display_OLED(sTmp, sHum, sPre);
//Serial.println( millis() );
} // if_timeOver
if (millis() > mTimerTemp) {
mTimerTemp = millis()+ mNextHttp+ mTimerTmpInit;
int itemp =(int)mTemp;
int iHum = (int)mHumidity;
int iPress = (int)mPressure;
sTmp=String(itemp);
sHum=String(iHum);
sPre=String(iPress);
proc_http(sTmp, sHum, sPre);
delay(100 );
}
}


# 謝辞と、お礼
今回も多くのブログ記事、ライブラリ等参考にさせて頂きました。
感謝申し上げます。

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



# 関連の記事
LCDで 気温/湿度/気圧/時刻の表示。AQM0802+BME280
http://knaka0209.blogspot.jp/2016/06/LCD-BME280-1.html

# 関連まとめ [IoT な電子工作まとめ]
http://knaka0209.blogspot.jp/2015/11/iot-matome.html



2016年7月5日火曜日

I2C対応、7セグ基板



7セグ関連の内容となります。

前回の、BME280の配線と似ていますが、
7セグ基板に I2Cの配線を追加して I2Cセンサ等も
接続できるようにしました。


# クラウド側のログ:気温/湿度



# 配置/ 回路
上列のピンが、7Pに増えています。(旧= 5P)
LED側のMCUだけで、I2Cセンサ値取得と7セグ表示が可能、

上ピン配置、右から
Pin Name
1 3V3
2 GND
3 A0
4 A4 / SDA
5 A5 / SCL
6 TX
7 RX




# esp側との配線が、クラウド送信の場合でも
UARTと電源ライン込みで3本で 可能となりました。


# ドライバ
前回のesp側の BME280処理を、 Atmegaに移植した内容

https://github.com/kuc-arc-f/SevenSeg4_BME_v3


# 関連の記事
7セグ+BME280、天気情報の表示

# 関連まとめ [IoT な電子工作まとめ]






2016年7月3日日曜日

センサ搭載可能、7セグ4桁基板



7セグ関連の内容となります。

DHT11 搭載可能な、新しい7セグ基板が届きましたので
試作してみました。

# 組立て例、ケースに配置。


esp8266と、接続しています。

# 動画
温度、湿度をLED表示し、
センサ値をクラウド送信する。カンタンなドライバ書き込んでいます


# 回路/ 配置





# ドライバ
https://github.com/kuc-arc-f/SevenSeg4_atmega_th_v1

# まとめ
改良面で
搭載部品が増え、組立て時間は長めになりましたが。
センサー付で小型化ができる長所はありました。


# 関連まとめ [IoT な電子工作まとめ]



2016年7月2日土曜日

ミニ温度計、7セグ+DHT11



前回の、7セグ 2桁 と似ている構成となります。
少し小型のケースに収まるように。配線調整してみました。

構成:
7セグ
DHT11センサ
esp8266

*)ケースは、100均さまの3個で100円 を加工

# 動画
センサ値をクラウド送信する。カンタンなドライバ書き込んでいます



# クラウド側のログ:気温/湿度



# 配線、センサ周辺

# 上側の基板の図



# WIFI 基板、下側。



# ドライバ
https://github.com/kuc-arc-f/SevenSeg2_atmega_dht_v1


# 関連の部品:
(組立キット)7セグ2桁+ AVRマイコン [ MK-PKBN-024 ]
http://kuc-arc-f.com/make/?p=699

# 関連まとめ [IoT な電子工作まとめ]
http://knaka0209.blogspot.jp/2015/11/iot-matome.html




google colaboratory お試し編 、GPUも使える機械学習の環境構築

前回続き、機械学習の関連となります。 開発環境まわりの内容となり。先人様の情報を元に調査しました。 google colab(google colaboratory) を試してみました。機械学習系の いくつかのライブラリがインストール済みで、 クラウド上で、ある程度機械学...

AD-parts

Shop
Bluetooth搭載
ベース基板

Social