温湿度センサー
仕事で湿度を測る必要があり、湿度センサーを探していたところなかなかいいのがあったので、使い勝手を試してみた。I2C接続だからPCやMacに接続しにくいが、間にPICやArduinoを挟めばいい。とにかく動くのか確認してしたかったので、まずArduinoの繋いでみた。
Copilotに相談しながら書いたらあっさり動いたので、センサー自体に問題がないことがまずは確認できた。
PC/Macと接続
Mac側はPythonで温度と湿度を表示する。MacからUSBシリアル変換でバイナリ0x05(ENQ)を送信すると、PICがI2C通信してSHT40iから6バイトの温湿度データを受け取り、そのままMacにバイナリで返す、というシンプル構成にした。
この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ということを次の記事で書こう。今日はここまで。
投稿者の人気記事

-
akira.kei
さんが
今日の0:09
に
編集
をしました。
(メッセージ: 初版)
ログインしてコメントを投稿する