編集履歴一覧に戻る
akira.keiのアイコン画像

akira.kei が 2025年12月07日00時09分13秒 に編集

初版

タイトルの変更

+

8ピンPICのPIC16F18313を使う(その19)I2C温湿度センサー

タグの変更

+

PIC

+

PIC16F18313

記事種類の変更

+

セットアップや使用方法

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

[<前の記事](https://elchika.com/article/255eb8fa-f3fd-4546-89e2-786402b65667/) : [次の記事>]() ## 温湿度センサー 仕事で湿度を測る必要があり、湿度センサーを探していたところ[なかなかいいの](https://akizukidenshi.com/catalog/g/g130207/)があったので、使い勝手を試してみた。I2C接続だからPCやMacに接続しにくいが、間にPICやArduinoを挟めばいい。とにかく動くのか確認してしたかったので、まずArduinoの繋いでみた。 [![SHT40i](https://akizukidenshi.com/img/goods/L/130207.jpg)](https://akizukidenshi.com/catalog/g/g130207/) Copilotに相談しながら書いたらあっさり動いたので、センサー自体に問題がないことがまずは確認できた。 ## PC/Macと接続 Mac側はPythonで温度と湿度を表示する。MacからUSBシリアル変換でバイナリ0x05(ENQ)を送信すると、PICがI2C通信してSHT40iから6バイトの温湿度データを受け取り、そのままMacにバイナリで返す、というシンプル構成にした。 ![USB↔︎PIC↔︎SHT40i](https://camo.elchika.com/57c428aa8fc42e06939d04ae41f67bec09b887ce/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f33363031626666382d633530632d343762382d613765362d3531663731393163323336642f65353866383833342d346533332d343063332d613237652d363262633064626434313365/) このPythonプログラムもほとんどCopilotに書いてもらった。AIってすごい。 ## PIC側はMCCで... 電源に2ピン、シリアル通信に2ピン、I2Cに2ピン、LEDに1ピン、リセットに1ピンで8ピン全て使用した。まずはお手本を、ということでMCC(Microchip Code Configurator)を使ったら、比較的あっさり動いてしまった。mcc_generated_filesを直接編集するという禁じ手も使っている。 ``` #include "mcc_generated_files/mcc.h" #include "mcc_generated_files/examples/i2c1_master_example.h" extern uint8_t rflg; uint8_t cmdbuf[1]; uint8_t datbuf[6]; #define ADDR 0x44 void main(void) { uint8_t i; SYSTEM_Initialize(); LED_SetLow(); cmdbuf[0]=0xfd; INTERRUPT_PeripheralInterruptEnable(); INTERRUPT_GlobalInterruptEnable(); while (1) { if(rflg) { rflg=0; I2C1_WriteNBytes(ADDR,cmdbuf,1); __delay_ms(75); I2C1_ReadNBytes(ADDR,datbuf,6); for(i=0;i<6;i++) putchar(datbuf[i]); } } } ``` 禁じ手の具体的な箇所は「void EUSART_Receive_ISR(void)」内の最後に ``` if(getch()==0x05) { rflg=1; LED_Toggle();} ``` を入れただけだ。ちなみに少し上の方にある「char getch(void)」ではエラーになるので、「int getch(void)」に変更した。まぁここまではまだマシだったんだ。 ## Copilotの無自覚な嘘 Copilotに「PIC16F18313でMCCを使わずにプログラムを書きたい」と相談しながらプログラムを書いてみたが、PythonやArduinoでは頼りになるのに、PICでは全然ダメだったwということを次の記事で書こう。今日はここまで。