jji電子工作 2023年1月12日    
home > elec > RsapiPico2

Raspberry pi Pico2


新着
● WiFi無線(ESP-f)
● Raspberry pi Pico
 ● Raspberry pi Pico2
53 日本の空気と空は最高!
    軽口雑話-jjiの独り言
52 真北は丹沢山だった。!
    軽口雑話-jjiの独り言
51 日本にも海外移住者が多い
    のにびっくり!
    軽口雑話-jjiの独り言
50 帰るに帰れない!
    軽口雑話-jjiの独り言
電子工作
● Arduino Nano
● Arduino Nano2
● Raspberry pi Pico
 ● Raspberry pi Pico2
● ESP-f WiFi無線
お勧め
● ロティチャナイとテータレ
● 肉骨壺茶(バクテー)
● 定点観測
  (コンドの出来るまで)
● データロガー
  気温・湿度・気圧
ちょっと変わった話・おもしろ話
 10 北半球でも太陽が北に
 19 マレーシアンイングリッシュ
 28 3Hと5C
 22 あんた何歳!!
 25 英語が分からない
 46 スムメルヴィルラ
 >> ジャングル・ジョギング
マレーシア移住
 - マレーシア・小旅 -
  ポートディクソン
  田舎へ
  ランカウイ島
ヨーロッパ・旅
-ユーレイル-
  冬の旅1
  夏の旅
  冬の旅2
  東ヨーロッパの旅
-Raspberry pi picoから続く-
 4 Raspberry pi pico 2 I2Cセンサー読み取り、表示編

 AHT25は温湿度センサーです。格安で秋月で売っています。
 アドレスは0x38です。
 まずはAHT25のinit設定関数から、

void init_aht25(void){
   delay(100);
   Wire.beginTransmission(AHT25_ADDRESS);
   Wire.write(0x71);
   Wire.endTransmission();
   delay(10);
}

 これはAHT25に0x71を書き込むだけです。


 次にAHT25の読み取り関数です。インターネットのあちこちからかき集めて試行錯誤して作ったものです。
unsigned char dig0;
uint32_t dig1;
uint32_t dig2;
uint32_t dig3;
uint32_t dig33;
uint32_t dig4;
uint32_t dig5;
unsigned char dig6;

void readData(void){
int i = 0;
long int x;
byte digraw[6];
char tempera[15];
char humidi[15];
char data_t[] = "Temp:";
char data_h[] = "Humi:";
char data2;
char data3 = "dC";
char par = "%";
uint32_t hum_low, temp_low;
double T;
double H;
char t_data[5];
char h_data[5];
//for(i=0; i < 7; i++){digraw[i] = 0x00;}    Wire.beginTransmission(AHT25_ADDRESS);
   Wire.write(0xAC);
   Wire.write(0x33);
   Wire.write(0x00);
   Wire.endTransmission();
   do {
     delay(80);
     Wire.requestFrom(AHT25_ADDRESS, 7);
   if (Wire.available() >= 7){
   for(i = 0; i < 7; i++){digraw[i] = Wire.read();}
}
   } while((digraw[0] & 0x80) != 0);
hum_low = ((uint32_t)digraw[1] << 12) | ((uint32_t)digraw[2] << 4) |
    (((uint32_t)digraw[3] >> 4) & 0x0F);
temp_low = (((uint32_t)digraw[3] & 0x0F) << 16) | ((uint32_t)digraw[4] << 8) |
     (uint32_t)digraw[5];
   T = ((temp_low / 1048576.0) * 200) - 50;
   H = (hum_low / 1048576.0) * 100;
   dtostrf(T,3,1,t_data);
   dtostrf(H,3,1,h_data);
   sprintf(tempera, "T:%sdC H:%s%s ", t_data, h_data, "%");
   writeCommand(0x02);
   for (i = 0; i < sizeof(tempera); i++) {writeData(tempera[i]); }
  }



 結構めんどくさいし、一発で関数に纏めるには、時間が掛かりました。
バグってはまったところが幾つかありました。
 Tの計算中1048576.0を1048576で計算するとバグり良い数値が出てきません。これはNanoも同様でした。
 同様にHの計算も1048576.0を1048576で計算するとバグり良い数値が出てきません。
長いこと悩みました。
 ちなみにraspberry pi picoのコンパイラではprintf()だけで表示出来ました。

前ページ
1  2

jji工作室にもどる

お問い合わせ