jji電子工作 |
![]() | 2023年1月12日 |
---|
新着
● 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 東ヨーロッパの旅 |
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 |