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); |