안전한 IoT 장치 통신을 시도했다 (환경 구축)
소개
2019년 5월에 IoTLT에서 LT를 했습니다.
그 내용의 팔로우를 기입하면서 나름대로 정리해 가고 싶습니다.
발표 내용:
스타트업 IoT 디바이스 보안 고려
마지막까지의 개요
안전한 IoT 장치 통신을 시도했다 (개념 이해) 에서 보안을 향상시키는 하드웨어 정리와 구체적으로 하드웨어가 보안을 향상시키는 방법을 정리했습니다.
환경 구축
실제로 수중의 마이크로컴퓨터를 사용해 환경을 구축해, 안전한 IoT 디바이스 통신을 실시해 보겠습니다.
가장 저렴한 ATECC608A를 Digi-key로 주문
25개 사면 할인! (91엔→85엔)
SOIC⇒DIP 변환 쪽이 높다! (279엔)
■실장
BOM 목록:
ESP32-DevKitC 1개
ATECC608A 1개
SOIC⇒DIP 변환 1개
GY-BME280 1개
I2C는 100kHz에서
I2C0을 핀 21, 22 (ATECC608A)
I2C1을 핀 18, 19 (GY-BME280)에 연결
■ 첫 단계
우선 ESP32와 ATECC608A가 소통할 수 있는지 여부를 확인한다.
제대로 I2C 레벨의 통신을 할 수 있는지, Arduino의 샘플 프로그램, I2CScanner를 베이스로 커스터마이즈를 실시해, 2개의 I2C의 소통을 확인할 수 있는 프로그램을 작성, 실행한다.
Arduino 1.8.9의 코드 샘플.
#include <Wire.h>
TwoWire i2c1(1);
void setup()
{
Wire.begin();
Wire.setClock(100000);
pinMode(21, INPUT_PULLUP);
pinMode(22, INPUT_PULLUP);
i2c1.begin(18, 19);
i2c1.setClock(100000);
Serial.begin(115200);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 0 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
i2c1.beginTransmission(address);
error = i2c1.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 1 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found on I2C port 0\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
구현하면 다음과 같이 포트 0에서는 0x60에서 ATECC608A를 찾아 포트 1에서 0x76에서 BME280을 문제없이 인식하고 있는 것을 확인할 수 있다.
I2C의 클럭 속도는 이번은 100kHz에서 설정.
Reference
이 문제에 관하여(안전한 IoT 장치 통신을 시도했다 (환경 구축)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kmitsu76/items/768d320069d9a2e764fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
안전한 IoT 장치 통신을 시도했다 (개념 이해) 에서 보안을 향상시키는 하드웨어 정리와 구체적으로 하드웨어가 보안을 향상시키는 방법을 정리했습니다.
환경 구축
실제로 수중의 마이크로컴퓨터를 사용해 환경을 구축해, 안전한 IoT 디바이스 통신을 실시해 보겠습니다.
가장 저렴한 ATECC608A를 Digi-key로 주문
25개 사면 할인! (91엔→85엔)
SOIC⇒DIP 변환 쪽이 높다! (279엔)
■실장
BOM 목록:
ESP32-DevKitC 1개
ATECC608A 1개
SOIC⇒DIP 변환 1개
GY-BME280 1개
I2C는 100kHz에서
I2C0을 핀 21, 22 (ATECC608A)
I2C1을 핀 18, 19 (GY-BME280)에 연결
■ 첫 단계
우선 ESP32와 ATECC608A가 소통할 수 있는지 여부를 확인한다.
제대로 I2C 레벨의 통신을 할 수 있는지, Arduino의 샘플 프로그램, I2CScanner를 베이스로 커스터마이즈를 실시해, 2개의 I2C의 소통을 확인할 수 있는 프로그램을 작성, 실행한다.
Arduino 1.8.9의 코드 샘플.
#include <Wire.h>
TwoWire i2c1(1);
void setup()
{
Wire.begin();
Wire.setClock(100000);
pinMode(21, INPUT_PULLUP);
pinMode(22, INPUT_PULLUP);
i2c1.begin(18, 19);
i2c1.setClock(100000);
Serial.begin(115200);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 0 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
i2c1.beginTransmission(address);
error = i2c1.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 1 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found on I2C port 0\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
구현하면 다음과 같이 포트 0에서는 0x60에서 ATECC608A를 찾아 포트 1에서 0x76에서 BME280을 문제없이 인식하고 있는 것을 확인할 수 있다.
I2C의 클럭 속도는 이번은 100kHz에서 설정.
Reference
이 문제에 관하여(안전한 IoT 장치 통신을 시도했다 (환경 구축)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kmitsu76/items/768d320069d9a2e764fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <Wire.h>
TwoWire i2c1(1);
void setup()
{
Wire.begin();
Wire.setClock(100000);
pinMode(21, INPUT_PULLUP);
pinMode(22, INPUT_PULLUP);
i2c1.begin(18, 19);
i2c1.setClock(100000);
Serial.begin(115200);
while (!Serial);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int nDevices;
Serial.println("Scanning...");
nDevices = 0;
for(address = 1; address < 127; address++ )
{
// The i2c_scanner uses the return value of
// the Write.endTransmisstion to see if
// a device did acknowledge to the address.
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 0 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
i2c1.beginTransmission(address);
error = i2c1.endTransmission();
if (error == 0)
{
Serial.print("device found on I2C port 1 at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
nDevices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (nDevices == 0)
Serial.println("No I2C devices found on I2C port 0\n");
else
Serial.println("done\n");
delay(5000); // wait 5 seconds for next scan
}
Reference
이 문제에 관하여(안전한 IoT 장치 통신을 시도했다 (환경 구축)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kmitsu76/items/768d320069d9a2e764fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)