Arduino IDEでRaspberry Pi Picoを動かす I2Cバス
前回、Arduino IDEでRaspberry Pi Picoが使えるようになりました。とりあえず、I2Cバスを使います。
I2Cscanner
C:\Users\ユーザ名\AppData\Local\Arduino15\packages\arduino\hardware\mbed_rp2040\2.5.2\variants\RASPBERRY_PI_PICO
の中に、pins_arduino.hがあります。I2Cは、
// Wire
#define PIN_WIRE_SDA (6u)
#define PIN_WIRE_SCL (7u)
と書かれているので、GPIO6にSDA、GPIO7にSCLをつなぎます。手元にあったAdafruit STEMMA QTのLPS25HBボードをつなぎ、I2Cscannerを動かしました。
正しく0x5dを見つけました。
気圧センサLPS25HB
おもなスペックです。
- 動作電圧 3.3V(デバイスは1.7~3.6 V)
- 測定範囲 260~1260hPa
- 確度 ±0.1hPa(25℃)、±1hPa(0~80℃)
- インターフェース SPI、I2C。I2C用プルアップ抵抗は実装
- スレーブ・アドレス 0x5d。SDOピンの設定で0x5cも設定できる
スケッチを書く
気圧のデータは、3バイト24ビットです。PRESS_OUT_H (2Ah)、 PRESS_OUT_L (29h)、PRESS_OUT_XL (28h)を読み出し、4096で割るとhPaの値になります。
1Hzの繰り返しで気圧データを読み出します。電源が入ったのち、パワーダウン・モードになっているので、測定できるモードに変更します。この二つの設定は、「CTRL_REG1」(0x20)に0x90を書き込むことで実現します。
気圧データの低いアドレス28hから3バイトを読み出しますが、0x28 | 0x80の形で読まないと、正しいデータが読めません。
#include <Wire.h>
#define LPS25HB_address 0x5d
uint8_t readbuffer[3];
float press;
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("start");
Wire.beginTransmission(LPS25HB_address);
Wire.write(0x20);Wire.write(0x90);
Wire.endTransmission();
}
void loop() {
Wire.beginTransmission(LPS25HB_address);
Wire.write(0x28 | 0x80);
Wire.endTransmission();
Wire.requestFrom(LPS25HB_address, 3);
readbuffer[0] = Wire.read();
readbuffer[1] = Wire.read();
readbuffer[2] = Wire.read();
press = ((uint32_t)readbuffer[2] << 16 | (uint16_t)readbuffer[1] << 8 | readbuffer[0]) / 4096.0;
Serial.print("\nPress "); Serial.print(press); Serial.println("hPa ");
delay(2000);
}
Author And Source
この問題について(Arduino IDEでRaspberry Pi Picoを動かす I2Cバス), 我々は、より多くの情報をここで見つけました https://qiita.com/jamjam/items/0860b6b99a07bfd9dc3f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .