Groveで広がるArduinoの世界-Step2-① Grove-LCD RGB Backlight
Step1では、Senser Kitに入っていたセンサ類をつなぎました。Step2ではGroveコネクタでつながる製品を取り上げます。
Arduino UNOのブロックを切り離します。
●表示器Grove-LCD RGB Backlightの接続
測定結果を表示するために、キャラクタの表示ができるLCDをつなぎます。
●温湿度センサSHT35の接続
温湿度センサのSHT35を、上記と同様にI2Cにコネクタでつなぎます。
●Grove - LCD RGB Backlightのおもなスペック
- 動作電圧 5V
- 動作電流 60mA以下
- インターフェース I2C
- LCDのスレーブ・アドレス 0x3e
- RGBのスレーブ・アドレス 0x62
- 表示 16文字2行
●SHT35ボードのおもなスペック
- 動作電圧 3.3/5V
- 温湿度 ±1.5%RH、±0.1℃
- 温度分解能 0.01℃
- 湿度分解能 0.01%RH
- インターフェース I2C
- スレーブ・アドレス 0x45(デフォルト)/ 0x44(オプション)
●I2Cscannerでスレーブ・アドレスを見つける
Arduino.ccのサイトにおいてあるI2Cscannerを動かします。
#include <Wire.h> void setup(){ Wire.begin(); Serial.begin(115200); while (!Serial); // Leonardo: wait for serial monitor Serial.println("\nI2C Scanner"); } void loop(){ byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { // The i2c_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0){ Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address,HEX); Serial.println(" !"); nDevices++; } else if (error==4){ Serial.print("Unknown error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
実行結果です。
SHT35が0x45、LCDが0x03、0x3e、0x62、0x70ですね。0x03と0x70はデータシートには書かれていないアドレスです。
●Grove - LCD RGB Backlightのライブラリを導入
Arduino IDEのメニュー「ツール」から「ライブラリを管理」を選択します。「Grove - LCD RGB Backlight」を検索欄に入れます。見つけてきました。インストールをクリックします。
一緒にサンプル・スケッチもインストールされています。Grove - LCD RGB BacklightからHelloWorldを選択します。
実行例です。露出が少ないのでオレンジ色に見えますが、実際は赤色です。
●SHT35のライブラリを導入
Arduino IDEのメニュー「ツール」から「ライブラリを管理」を選択します。「SHT35」を検索欄に入れます。Grove - I2C High Accuracy Temp_Humi Sensor SHT35を見つけてくるので、インストールをクリックします。
一緒にサンプル・スケッチもインストールされています。Grove - I2C High Accuracy Temp_Humi Sensor SHT35からbasic_demoを動かします。
●合成したスケッチ
SHT35の温度と湿度の値をLCDに表示します。
/* Copyright (c) 2018 Seeed Technology Co., Ltd. * Website : www.seeed.cc * Author : downey * Create Time: May 2018 * 2013 Copyright (c) Seeed Technology Inc. All right reserved. * Author:Loovee * 2013-9-18 */ #include "Seeed_SHT35.h" #include #include "rgb_lcd.h" #define SCLPIN A5 SHT35 sensor(SCLPIN); rgb_lcd lcd; const int colorR = 50; const int colorG = 150; const int colorB = 150;
void setup(){ Serial.begin(115200); delay(10); Serial.println("serial start!!"); if(sensor.init()){ Serial.println("sensor init failed!!!"); } lcd.begin(16, 2); lcd.setRGB(colorR, colorG, colorB); lcd.print("hello, world!"); delay(1000); } void loop(){ u16 value=0; u8 data[6]={0}; float temp,hum; if(NO_ERROR!=sensor.read_meas_data_single_shot(HIGH_REP_WITH_STRCH,&temp,&hum)){ Serial.println("read temp failed!!"); } else{ Serial.println("read data :"); Serial.print("temperature = "); Serial.print(temp); Serial.println(" ℃ "); Serial.print("humidity = "); Serial.print(hum); Serial.println(" % "); lcd.clear(); lcd.setCursor(0, 0); lcd.print("temp ="); lcd.print(temp); lcd.setCursor(0, 1); lcd.print("humi ="); lcd.print(hum); } delay(1000); }
実行中の様子です。
●ライブラリのソースの保存場所
●LCDの書式例
初期化 | begin(16, 2); |
バックライトの設定 | setRGB(int r, int g, int b); |
画面クリア | clear(); |
カーソルの位置設定 | setCursor(x, y); 左上が0,0 |
ホーム | home(); |
表示 | print(文字列もしくは変数); |
画面の表示/非表示 | noDisplay(); display(); |
ブリンク | noBlink(); blink(); |
バックライトのブリンク | noBlinkLED(); blinkLED(); |
カーソルの表示/非表示 | noCursor(); cursor(); |
オート・スクロール | autoscroll(); noAutoscroll(); |
左右のスクロール | scrollDisplayLeft(); scrollDisplayRight(); |
シリアル・ポートからの入力表示 | write(Serial.read()); |
表示方向の変更(シリアルモニタの送信欄) | 右m rightToLeft(); 左s leftToRight(); |
フェード | setPWM(color, intensity); |