특징어플리케이션제품 사양제품 크기 및 핀 특성통신 프로토콜온·습도 읽기온·습도 Resolution 읽기 및 쓰기Sensor ID 읽기Address 읽기 및 쓰기아두이노 연동 예제 코드아두이노 연결온·습도 읽기 예제 코드온·습도 Resolution 읽기 및 쓰기 예제 코드Sensor ID 읽기 예제 코드Address 읽기 및 쓰기 예제 코드
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fdc41f40c-a03c-4710-b9a3-b8e2b3a568bb%252FUntitled.png%3Ftable%3Dblock%26id%3De912081e-697d-4d35-9d16-587bcad022ee%26cache%3Dv2&w=3840&q=75)
특징
- 저전력으로 사용 가능한 I2C 디지털 출력의 온·습도 센서 모듈
- 가격 대비 빠른 온 습도 측정 응답시간, 우수한 안정성, 높은 정확성(보정 시스템 내장)
- 1.27mm의 작은 헤더 핀이 부착되어 공간이 제한된 애플리케이션에 설치 용이
- 장기적 안정성 및 신뢰성(센서 내부 알고리즘은 정확한 반복 측정을 가능 하게함)
어플리케이션
- 기상 관측
- 데이터로거
- 가전제품
- 냉난방 공조 시스템
- 자동차습도계
- 의료자동화기기
제품 사양
항목 | 내용 |
측정 범위 | 온도: -40 ~ 125℃<br><br>습도: 0 ~100%RH |
습도 정확성(@ 25°C) | ±3.8%RH (20 to 80%RH), ±5.0%RH(Other Range) |
온도 정확성 | ±0.3°C (0 to 70°C), ±0.5°C (Other Range) |
전원 전압 | 최소 1.8V 평균:3.3V 최대:5.5V |
전원 전류 | Typ: 24.4㎂(14bit 분해능 기준) |
절전 상태 전류 | Typ: 0.6㎂(-40~80℃기준) |
보관 온도 | -40 ~ 150°C |
응답 시간 | 34msec < 온 습도 |
센서 치수 | L x W x H (14.5mm x 8mm x 3.8mm) |
통신 프로토콜 | I2C |
헤더 핀 크기 | 1.27mm |
제품 크기 및 핀 특성
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F2c127acd-8265-4667-a53c-22e0db3da52f%252FUntitled.png%3Ftable%3Dblock%26id%3De3f12d33-5bfd-4ea4-a320-878f85510f00%26cache%3Dv2&w=3840&q=75)
온·습도 정확도 허용 오차 범위
- 온도 0~70°C 범위에서 ETH-01D의 온도의 정확도는 일반적으로 ±0.3°C , 최대 ±0.5°C 오차 허용
- 온도 0~-40°C 범위를 제외한 나머지 범위에서는 정확도 허용 오차 범위가 증가합니다.(최대 2°C)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F74a10645-748e-4bb3-976d-eebb0f2bdb42%252FUntitled.png%3Ftable%3Dblock%26id%3Dca77b955-0abd-46a5-a83e-99848da23877%26cache%3Dv2&w=3840&q=75)
- 습도 20~80%RH 범위에서 ETH-01D의 습도의 정확도는 일반적으로 3.5% RH , 최대 RH오차 허용
- 습도 20~80%RH 범위를 제외한 나머지 범위에서는 정확도 허용 오차 범위가 증가함 최대 RH오차 허용
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F6c8a46c3-c80a-4ad4-9348-d7b495708af4%252FUntitled.png%3Ftable%3Dblock%26id%3D3f00fb79-949a-4634-ab39-14d171168f51%26cache%3Dv2&w=3840&q=75)
통신 프로토콜
온·습도 읽기
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fc6a49e97-5b2c-4518-9da8-99282d1b8c48%252FUntitled.png%3Ftable%3Dblock%26id%3Dd33770e6-602e-4d05-896c-94d50e9c5037%26cache%3Dv2&w=3840&q=75)
i2c Address는 0x44(7bit), Write bit는 0, Read bit는 1
Don’t care는 측정 데이터에 포함하지 않으며 사용하지 않음.
Step 1. 온·습도 데이터 요청
- Device에서 i2c Address(0x44)를 ETH-01D로 전송
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F7c683ee0-fefe-45dd-a7e2-393512029d93%252FUntitled.png%3Ftable%3Dblock%26id%3D90393752-8bc1-483a-85e7-020ca2177864%26cache%3Dv2&w=3840&q=75)
Step 2-1. 습도 데이터 응답
- 데이터 중 상위 1byte 15,14번째 데이터는 Don’t care
- 습도 값 = (습도 데이터 13~0번째)/(2^14-1)*100
Ex) 습도 데이터 2byte = 0x4ec0
- Data 상위 1Byte : 13~8번째 데이터: 0x4e & 0x3f(Don’t care 데이터 버림) = 0xe00 = 3584
- Data 상위 1Byte + Data 하위 1Byte = 0xe00+0xc0 = 0xec0 = 3,776
- 습도 값 = 23.04 %RH
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F9e75b531-9692-41f3-8051-4465e6688496%252FUntitled.png%3Ftable%3Dblock%26id%3D8dfb4bac-df0e-4be2-b996-db816a72fcfb%26cache%3Dv2&w=3840&q=75)
Step 2-2. 온도 데이터 응답
- 데이터 중 하위 1byte 0,1번째 데이터는 Don’t care
- 온도 값 =(온도 데이터 15~2번째 데이터)/(2^14-1)*165-40
EX) 온도 데이터 2byte = 0x66ed
- Data 상위 1Byte : 0x6600
- Data 하위 1Byte 7~2번째 데이터 = 0xed & 0xfc(Don’t care 데이터 버림) = 0xec
- Data 상위 1Byte + Data 하위 1Byte = 0x6600 +0xec = 0x66ec
- Data 상위 1Byte + Data 하위 7~2번째 데이터 = 0x66ec >>2(Don’t care bit 수만큼 이동) = 19BB = 6587
- 온도 = 26.34°C
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F999db7c7-6487-4bb1-bc68-d58cacc994ac%252FUntitled.png%3Ftable%3Dblock%26id%3Dc16d5847-60bd-42cb-8b8d-393088672afd%26cache%3Dv2&w=3840&q=75)
온·습도 Resolution 읽기 및 쓰기
ETH-01D 비휘발성 메모리에 온·습도 Resolution, ID가 저장 되어있음
- 분해능(Resolution): 측정값의 변화에 감응하는 정도
- 분해능(Resolution)의 초기값은 14
- 분해능(Resolution)는 8, 10, 12, 14 나누어짐
- 분해능(Resolution) register bits는 총 16bit임
- 분해능(Resolution)를 변경하려면 분해능(Resolution) register bits의 11번째와 10번째 bits를 변경 해야함.
- 분해능(Resolution)이 높을수록 정밀한 값이 표시됨.
- 분해능(Resolution) (bits)가 증가할수록 측정시간, 응답시간이 증가함.
- 분해능(Resolution) (bits)가 증가할수록 전력 소모량이 증가함.
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fb02a0e29-5f19-4182-98cd-2d841a3a1b3f%252FUntitled.png%3Ftable%3Dblock%26id%3D83dadca4-91a6-40f9-bb73-d17c0e015d2e%26cache%3Dv2&w=3840&q=75)
분해능(Resolution) (bits) 변경에 따른 소비 전력 변화
- Ex) VDD: 3.3V, 14bits resolution = 3.3V_24.4µA = 80.52µW
- Ex) VDD: 3.3V, 8bits resolution = 3.3V_1.5µA = 4.95µW
- 80.52µW - 4.95µW = 75.57µW
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F3df6d1f7-560a-4665-a4a2-b38187df9933%252FUntitled.png%3Ftable%3Dblock%26id%3Dd0e52365-c68a-4c52-bf47-810595210177%26cache%3Dv2&w=3840&q=75)
Step 1. ETH-01D I2C command 전송
Device에서 command(i2c Address(0x44),0xa0,0x00,0x00)를 ETH-01D로 전송
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F86136c56-b278-4c1d-bfab-6fcf012f482a%252FUntitled.png%3Ftable%3Dblock%26id%3D1b89a198-68f6-4e6c-8e27-a156881e24ab%26cache%3Dv2&w=3840&q=75)
Step 2. 온·습도 Resolution 요청 Command
Device에서 Command ((i2c Address(0x44)), 0x06(습도), 0x00, 0x00)를 ETH-01D로 보낸 뒤 120 μs 기다림(습도 Resolution을 요청 Command)
온도 Resolution을 요청 Command는 Register Address 0x06을 0x11으로 변경 해야함
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F089df7b9-3e32-4ac2-a903-c94f4a9651ec%252FUntitled.png%3Ftable%3Dblock%26id%3D6c16fe2d-c01a-4a7a-9862-b925b35f6929%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F2be78985-3006-4e02-a122-67c6854520f6%252FUntitled.png%3Ftable%3Dblock%26id%3D451c70d1-09c4-4d8f-b637-b2db81def70f%26cache%3Dv2&w=3840&q=75)
Step 3. 온·습도 Resolution 응답
온·습도 Resolution Register bits값 [15:0]을 읽음
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F38de2ef3-215b-4fa7-8be7-9b27baf94ab1%252FUntitled.png%3Ftable%3Dblock%26id%3D3ca1d612-ce71-4124-beab-6466790934ed%26cache%3Dv2&w=3840&q=75)
Step 4. 온·습도 Resolution 쓰기 Command
Register 비트 [15:12],[9:0]은 변경하지 않고 [11:10]만 변경할 온습도 Resolution으로 변경
Register 비트 [15:12],[9:0]은 변경하지 않으려면 Resolution 읽기를 먼저 수행해야함
Device에서 Command ((i2c Address(0x44)), 0x46, 0xAC, 0x5A)를 ETH-01D로 전송(습도 Resolu-tion 14)
온도에 Resolution을 읽기위해서는 Register Address 0x46을 0x51으로 변경 해야함
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fbc0b7c46-3638-40c1-b5b8-83fa6a371fe2%252FUntitled.png%3Ftable%3Dblock%26id%3D1a081e92-20e0-4ff9-a458-4e5be23f09e3%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F04c822b6-ee55-40df-8dc6-1d0e0ce7ce4b%252FUntitled.png%3Ftable%3Dblock%26id%3D0b8d943b-3149-434c-ab0c-6d9a4659688a%26cache%3Dv2&w=3840&q=75)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fab7f34bc-7427-41ed-842c-36306389fcfd%252FUntitled.png%3Ftable%3Dblock%26id%3D82e0e7a8-df62-4337-870a-b1c355e328c3%26cache%3Dv2&w=3840&q=75)
Sensor ID 읽기
Step 1. ETH-01D I2C command 전송
- Device에서 command(i2c Address(0x44),0xa0,0x00,0x00)를 ETH-01D로 전송
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fea8c5b1f-8d83-44d8-ba07-46171ecb7654%252FUntitled.png%3Ftable%3Dblock%26id%3Dc1219e12-3429-4429-90a0-fb2ff09fe6e9%26cache%3Dv2&w=3840&q=75)
Step 2. 상위 Sensor ID 요청 Command
- Device에서 Command((i2c Address+Write bit),0x1E(ID 상위 바이트), 0x00, 0x00)를 ETH-01D로 전송 후 120 μs 기다림
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F2695ea9c-17e1-4a8b-8d18-a002a97382d6%252FUntitled.png%3Ftable%3Dblock%26id%3D45a90064-21c7-4613-b142-909b6b2ae8e1%26cache%3Dv2&w=3840&q=75)
상위 Sensor ID 응답
- Sensor ID 상위 바이트(16bit)를 읽음
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F05765008-a89e-4408-940f-12c0f7490bee%252FUntitled.png%3Ftable%3Dblock%26id%3Db8512d1e-79cd-4f39-8b61-590df5e5687d%26cache%3Dv2&w=3840&q=75)
Step 3. 하위 Sensor ID 요청 Command
- Device에서 Command ((i2c Address+Write bit),0x1F(ID 하위 바이트), 0x00, 0x00)를 ETH-01D로 전송 후 120 μs 기다림
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F72798c51-5cbb-435b-a326-05383e31b83d%252FUntitled.png%3Ftable%3Dblock%26id%3D500747fd-63d0-45a7-8f27-042b96bfc560%26cache%3Dv2&w=3840&q=75)
하위 Sensor ID 응답
- Device에서 Command ((i2c Address+Write bit),0x1F(ID 하위 바이트), 0x00, 0x00)를 ETH-01D로 전송 후 120 μs 기다림
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F8b155554-37b8-4478-a9b2-419cf593fac0%252FUntitled.png%3Ftable%3Dblock%26id%3D92ca80c8-0ade-4ed4-9311-bfa47e629d17%26cache%3Dv2&w=3840&q=75)
Address 읽기 및 쓰기
Step 0. ETH-01D I2C command 전송
- Device에서 Command ((i2c Address+Write bit),0xA0, 0x00, 0x00)를 ETH-01D로 전송
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fd860280e-3900-4d19-be73-898cb9749d5a%252FUntitled.png%3Ftable%3Dblock%26id%3D5700102d-27fc-4355-adac-e3a00d8e40a7%26cache%3Dv2&w=3840&q=75)
Sensor Address 요청 Command
- Device에서 Command ((i2c Address+Write bit),0x1C, 0x00, 0x00)를 ETH-01D로 전송
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F8b764470-fd62-4a03-9f14-f31edcef4655%252FUntitled.png%3Ftable%3Dblock%26id%3D7b027fa0-9c29-42e4-8149-ae510dd9b4b9%26cache%3Dv2&w=3840&q=75)
Step 2. Address 응답
- ETH-01D에서 상태 값과 Address 값 응답(3byte)
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fe1f7b64f-cc3d-4330-8a6e-40588d315fd9%252FUntitled.png%3Ftable%3Dblock%26id%3Db5e6a6ce-f6c2-4780-bd95-d651c23f121f%26cache%3Dv2&w=3840&q=75)
Step 3. Sensor Address 쓰기 Command
- Device에서 Command ((i2c Address+Write bit),0x5C, Register Value[15:8], 변경할 address[7:0]) 를 ETH-01D로 전송
- 변경할 address[7:0] : Register value [6:0] 만 변경
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F8614b4b7-df24-430a-aa1f-a3cf2de816ba%252FUntitled.png%3Ftable%3Dblock%26id%3D785ddd02-9890-4b90-b34b-02ef7f4605f2%26cache%3Dv2&w=3840&q=75)
아두이노 연동 예제 코드
아두이노 연결
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Fc80f1209-b4cf-475e-9c99-9092e7d8459d%252FUntitled.png%3Ftable%3Dblock%26id%3D0ba22b68-3c3c-4c5e-86d4-e2c3506b6319%26cache%3Dv2&w=3840&q=75)
온·습도 읽기 예제 코드
#include <Arduino.h> #include <Wire.h> #define slave_address 0x44 #define Sensor_power_port 6 // Arduino uno, Arduino mkr 1010, esp32 // #define Sensor_power_port 16 // esp8266 #define Power_enable digitalWrite(Sensor_power_port, HIGH) #define Power_disable digitalWrite(Sensor_power_port, LOW) void setup() { Wire.begin();// arduino uno, Arduino mkr 1010 //Wire.begin(7,8,5000); //esp32 //Wire.begin(4,5,5000); //esp8266 Serial.begin(9600); pinMode(Sensor_power_port, OUTPUT); Power_enable; } void loop() { int HumidH; int HumidL; int TemperH; int TemperL; Wire.beginTransmission(slave_address); Wire.endTransmission(); delay(34); Wire.requestFrom(slave_address, 4); if(Wire.available()) { HumidH = Wire.read(); HumidL = Wire.read(); TemperH = Wire.read(); TemperL = Wire.read(); HumidH = HumidH & 0x3f; // Don't care bit mask // *********** Humidity & Temperature calculation code changed *************************** double RealH = (double)((HumidH * 256 ) + HumidL ) * 100/16383; double RealT = (double)(((TemperH * 256) + TemperL)/4) * 165/16383 - 40; Serial.print("T : "); Serial.print(RealT, 2); Serial.print(" , "); Serial.print("RH : "); Serial.println(RealH, 2); delay(1000); } }
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F9adee79f-a3a0-449b-b5d3-ca38e5e11af5%252FUntitled.png%3Ftable%3Dblock%26id%3Dabe0b435-e8bb-40f7-9eb0-10fa2d2388a9%26cache%3Dv2&w=3840&q=75)
온·습도 Resolution 읽기 및 쓰기 예제 코드
#include <Wire.h> #define slave_address 0x44 #define Sensor_power_port 6 // Arduino uno, Arduino mkr 1010, esp32 // #define Sensor_power_port 16 // esp8266 #define Power_enable digitalWrite(Sensor_power_port, HIGH) #define Power_disable digitalWrite(Sensor_power_port, LOW) #define Humidity_Resolution_read_command Wire.write(0x06) //Humidity Sensor Resolution – Read Register (bits [11:10]) #define Temperature_Resolution_read_command Wire.write(0x11) //Temperature Sensor Resolution – Read Register (bits [11:10]) #define Humidity_Resolution_write_command Wire.write(0x46) //Humidity Sensor Resolution – Write Register (bits [11:10]) #define Temperature_Resolution_write_command Wire.write(0x51) //Temperature Sensor Resolution – Write Register (bits [11:10]) void setup() { Wire.begin();// arduino uno, Arduino mkr 1010 //Wire.begin(7,8,5000); //esp32 //Wire.begin(4,5,5000); //esp8266 Serial.begin(9600); pinMode(Sensor_power_port, OUTPUT); } void loop() { int Status; int RegisterValueHigh; int RegisterValueLow; //===Module Power Reset=== Power_disable; //전원 끔 delay(1); Power_enable; delay(2); //10msec 이내에 신호 전송되어야함 // Step 1. ETH-01D I2C command 전송 //프로그래밍 모드로 들어가기 위한 명령, 명령어 처리 시까지 120usec 시간이 소요됨. Wire.beginTransmission(slave_address); Wire.write(0xA0); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delayMicroseconds(120); //Step 2. 온습도 Resolution 요청 Command Wire.beginTransmission(slave_address); Humidity_Resolution_read_command; Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1); //Step 3. 온습도 Resolution 응답 Wire.requestFrom(slave_address, 3); if (Wire.available()) { Status = Wire.read(); RegisterValueHigh = Wire.read(); RegisterValueLow = Wire.read(); Serial.print(Status, HEX); Serial.print(" "); Serial.print(RegisterValueHigh,HEX); Serial.print(" "); Serial.print(RegisterValueLow, HEX); Serial.println(" <= Read the register contents"); } //Step 4. 온습도 Resolution 쓰기 Command, 데이터 기록시간은 14msec가 필요함 Wire.beginTransmission(slave_address); Humidity_Resolution_write_command; Wire.write(0xC); // Sensor Resolution Change high bit Serial.print("Write 0xC "); Serial.println(" <= Write the register contents"); Wire.write(0x12); // Sensor Resolution low bit Wire.endTransmission(); delay(14); //Step 5. 프로그래밍 모드에서 일반 모드로 전환 Wire.beginTransmission(slave_address); Wire.write(0x80); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1000); }
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F0959401b-ea6a-439e-86b8-54bd5421e69f%252FUntitled.png%3Ftable%3Dblock%26id%3D405f19c2-c949-4de0-b892-3714b1e87499%26cache%3Dv2&w=3840&q=75)
Sensor ID 읽기 예제 코드
#include <Wire.h> #define slave_address 0x44 #define Sensor_power_port 6 // Arduino uno, Arduino mkr 1010, esp32 //#define Sensor_power_port 16 //esp8266 #define Power_enable digitalWrite(Sensor_power_port, HIGH) #define Power_disable digitalWrite(Sensor_power_port, LOW) void setup() { Wire.begin(); // Arduino uno, Arduino mkr 1010 // Wire.begin(7,8,5000); //esp32 // Wire.begin(4,5,5000); //esp8266 Serial.begin(9600); pinMode(Sensor_power_port, OUTPUT); } void loop() { int Status; int RegisterValueHigh; int RegisterValueLow; //===Module Power Reset=== Power_disable; delay(1); Power_enable; delay(2); //10msec 이내에 신호 전송되어야함 // 레지스터 주소 쓰기=== //프로그래밍 모드로 들어가기 위한 명령, 명령어 처리 시까지 120usec 시간이 소요됨. Wire.beginTransmission(slave_address); Wire.write(0xA0); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delayMicroseconds(120); //Sensor 상위 id 요청 Wire.beginTransmission(slave_address); Wire.write(0x1E); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1); //Sensor 상위 id 응답 Wire.requestFrom(slave_address, 3); if (Wire.available()) { Status = Wire.read(); RegisterValueHigh = Wire.read(); RegisterValueLow = Wire.read(); Serial.print(" Sensor id_high: "); Serial.print(Status, HEX); // status success = 0x81 Serial.print(" "); Serial.print(RegisterValueHigh, HEX); Serial.print(" "); Serial.println(RegisterValueLow, HEX); } //Sensor 하위 id 요청 Wire.beginTransmission(slave_address); Wire.write(0x1F); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1); //Sensor 하위 id 응답 Wire.requestFrom(slave_address, 3); if (Wire.available()) { Status = Wire.read(); RegisterValueHigh = Wire.read(); RegisterValueLow = Wire.read(); Serial.print(" Sensor id_low: "); Serial.print(Status, HEX); // status success = 0x81 Serial.print(" "); Serial.print(RegisterValueHigh, HEX); Serial.print(" "); Serial.println(RegisterValueLow, HEX); } // 프로그래밍 모드에서 일반 모드로 전환 Wire.beginTransmission(slave_address); Wire.write(0x80); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1000); }
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252Ffa7f4865-49c5-49d4-b84f-3143bec3f9bd%252FUntitled.png%3Ftable%3Dblock%26id%3D822ef423-0854-48e0-83ec-4a744182f729%26cache%3Dv2&w=3840&q=75)
Address 읽기 및 쓰기 예제 코드
#include <Wire.h> #define slave_address 0x44 #define change_slave_address 0x44 // <- This address is subject to change #define Sensor_power_port 6 // Arduino uno, Arduino mkr 1010, esp32 // #define Sensor_power_port 16 // esp8266 #define Power_enable digitalWrite(Sensor_power_port, HIGH) #define Power_disable digitalWrite(Sensor_power_port, LOW) #define Address_read_command Wire.write(0x1C) #define Address_write_command Wire.write(0x5C) void setup() { Wire.begin();// arduino uno, Arduino mkr 1010 //Wire.begin(7,8,5000); //esp32 //Wire.begin(4,5,5000); //esp8266 Serial.begin(9600); pinMode(Sensor_power_port, OUTPUT); } void loop() { int Status; int RegisterValueHigh; int RegisterValueLow; //===Module Power Reset=== Power_disable; //전원 끔 delay(1); Power_enable; delay(2); //10msec 이내에 신호 전송되어야함 // Step 1. ETH-01D I2C command 전송 //프로그래밍 모드로 들어가기 위한 명령, 명령어 처리 시까지 120usec 시간이 소요됨. Wire.beginTransmission(slave_address); Wire.write(0xA0); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delayMicroseconds(120); //Step 2. 온습도 Address 요청 Command Wire.beginTransmission(slave_address); Address_read_command; Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1); //Step 3. 온습도 Address 응답 ex)81 00 44 Wire.requestFrom(slave_address, 3); if (Wire.available()) { Status = Wire.read(); RegisterValueHigh = Wire.read(); RegisterValueLow = Wire.read(); Serial.print(Status, HEX); // 0x81 = status succes Serial.print(" "); Serial.print(RegisterValueHigh,HEX); Serial.print(" "); Serial.print(RegisterValueLow, HEX); Serial.println(" <= Read the register contents"); } // adress 읽은 뒤 [6:0] 비트만 변경 #if 0 // adress 읽은 뒤 #if 0 -> #if 1 //Step 4. 온습도 Address 쓰기 Command, 데이터 기록시간은 14msec가 필요함 Wire.beginTransmission(slave_address); Address_write_command; Wire.write(0x00); Wire.write(change_slave_address); // 변경 할 address write Wire.endTransmission(); delay(14); Serial.print(change_slave_address, HEX); Serial.println(" <= Write the register contents"); #endif //Step 5. 프로그래밍 모드에서 일반 모드로 전환 Wire.beginTransmission(slave_address); Wire.write(0x80); Wire.write(0x00); Wire.write(0x00); Wire.endTransmission(); delay(1000); }
![notion image](https://inblog.ai/_next/image?url=https%3A%2F%2Fwww.notion.so%2Fimage%2Fhttps%253A%252F%252Fprod-files-secure.s3.us-west-2.amazonaws.com%252F89917f5a-4e07-4d31-9f02-aa72f79c2cdc%252F616b84bc-d628-422a-b62e-650872906420%252FUntitled.png%3Ftable%3Dblock%26id%3Da78eeddc-22a8-4919-9e40-0d20cdcd8e00%26cache%3Dv2&w=3840&q=75)
Share article