M5Stack으로 스마트 미터의 순간 전력을 BP35A1에서 취득해 표시해 보았다

소개



이전부터 겨울이 되면 이상으로 전기 요금이 높아지므로, 어떤 시간대에 사용 전력량이 많은지 파악하고 싶었습니다.

선인들이 이미 상당히 같은 일을 해주고 있기 때문에, 기본 그 유용합니다만, M5Stack로 BP35A1로 순간 전력을 취득해 표시할 수 있었으므로, 그 내용을 씁니다.

참고 정보



먼저 상당히 정리된 정보가 있으므로 그쪽을 참고로 해 주세요.
이 기사에서는 차이점과 조금 빠진 점만 써 둡니다.

스마트 미터 정보를 최저 하드웨어로 빼내기
B 루트에서 적산 전력량 측정치 이력 1을 취득한다

개발 환경



Arduino
ESP32:1.0.1

사전 준비



다음은 사전에 해 주세요.
  • 스마트 미터 신청
  • BP35A1 구매
  • M5Statck 구매

  • 연결 방법



    HardwareSerial2로 제어하기 위해 M5Stack의 16,17pin에 BP35A1의 TX, RX를 연결합니다.
    나머지는 VCC3.3V와 GND를 연결할 뿐입니다.


    M5Statck
    BP35A1


    16pin
    TXD

    17pin
    RXD


    통신방법



    공개하고 있는 소스 코드의 BP35A1 클래스를 사용하면 함수 호출만으로 통신할 수 있습니다.
    순간 전력을 30초마다 표시하는 simple-IPMV 브랜치를 사용하십시오.

    설정



    config.h의 B_ROOT_PASS, B_ROOT_AUTH_ID는 스마트 미터 신청하여 통지 된 Pass, ID를 설정하십시오.

    config.h
    const String B_ROOT_PASS = "XXXXXXXXXXXX";
    const String B_ROOT_AUTH_ID = "00000000000000000000000000000000";
    

    시험 통신



    소스 코드 testComm()을 호출하면 테스트 통신이 가능합니다.
    htps : // 기주 b. 이 m / 가다랭이 89 / M5S ck_S를 끼워 r / b / b / mp / PMV / BP35 A1. h#L78-L88

    BP35A1.h
        bool testComm(void){
            Serial2.println("SKVER");
            delay(100);
            bool is_received_res = waitExpectedRes(WAIT_TIME, "OK");
            if(!is_received_res){
                Serial.println("testcomm() nores err");
                return false;
            }
            Serial.println("testcomm() ok");
            return true;
        };
    

    초기 통신에서 순간 전력 획득



    소스 코드의 initComm(), activeScan()을 호출하면 정보 취득을 위한 초기 통신이 실행됩니다.

    M5Stack_SmartMeter.ino
    void setup()
    {
      M5.begin();
    
      delay(1000);
      bp35a1 = new BP35A1();
    
      Serial.begin(115200);
      Serial2.begin(115200);
      delay(100);
    
      bp35a1->testComm();
      bp35a1->initComm();
      bp35a1->activeScan();
    }
    

    그리고는, getInstantaneousPower()를 호출하는 것으로 순간 전력을 취득합니다.

    M5Stack_SmartMeter.ino
    void loop()
    {
      uint32_t power;
    
      if(bp35a1->getInstantaneousPower(&power) == true){
        Serial.println("getInstantaneousPower success");
        M5.Lcd.println("IPMV:" + String(power, DEC) + "[W]");
      }
      delay(30 * 1000);
      M5.update();  
    }
    

    주의점



    주의점 1.M5Stack의 기입시에 BP35A1의 VCC3.3V는 제외한다



    M5Stack으로 ROM을 쓸 때 BP35A1의 VCC를 연결하지 않으면 전원이 불안정해지는가? 쓸 수 없습니다.
    쓸 때는 VCC 밖으로 둡시다.
    회로 조립할 수 있는 사람은 VCC를 ON하는 스위치 기구를 마련하는 것이 좋다.
    (혹은 BP35A1측의 리셋 단자로 제어할 수 있을지도 모른다.미조사.)

    주의점 2. BP35A1의 응답 정보를 ASCII로 설정



    이것은 한 번만 설정하면 됩니다만, 설정해 두지 않으면 데이터가 바이너리로 돌아오기 때문에 다루기 어렵습니다.
    그러므로 한 번만 아래 명령을 실행하여 ASCII로 회신하도록 설정하십시오.
    한 번하면 그 후에는 필요하지 않습니다.
    공개하고 있는 소스 코드의 setWOPT()를 호출해 주면 됩니다.


    BP35A1.h
        bool setWOPT(void){
            Serial2.println("WOPT 01");
            delay(100);
            bool is_received_res = waitExpectedRes(WAIT_TIME, "OK");
            if(!is_received_res){
                Serial.println("setWOPT()) nores err");
                return false;
            }
            Serial.println("setWOPT() OK");
            return true;
        };
    


    이러한 형태로 순시 전력 IPMV가 표시되면 OK입니다.

    미래



    우선은 가장 간단한 순간 전력의 취득만 실행했습니다.
    그리고는 적산 전력량을 서버 등으로 로깅하는 등 해 나갈 예정입니다.

    상당히 트위터에서는 M5Stack에서 같은 일이나 좀더 고도의 일을 하고 있는 사람 있는데 정보가 남지 않았기 때문에, 만약 스마트 미터로 전력 취득하고 싶은 사람은, 가장 간단한 이 순서를 참고로 받으면 생각합니다.

    좋은 웹페이지 즐겨찾기