I2C 센서(BME280)는 디버그 모드가 활성화된 경우에만 작동합니다.

5967 단어 voodoospark

묘사

여보세요,
나는 j5로 입자 광자를 제어하고 온도/습도 센서(http://johnny-five.io/examples/multi-BME280/) 하지만 최신 펌웨어에는 적용되지 않습니다(V4.0.0).
이 문제를 디버깅하려고 할 때, 나는 코드 맨 위에 있는 DEBUG 변수를 활성화한 후에 신기하게도 일을 시작했다.나는 여러 번 복사했다.
왜 이런 상황이 발생했는지 모르겠지만, 나는 이것이 잘못이라는 것을 확신한다.한번 봐주시겠어요?
고맙습니다.

토론 #1

는 BME280과 광자 사이에 시간 계산 문제가 있는 것처럼 들리는데DEBUG 유일하게 도입되는 것은 비교적 적은 시간 지연이다.나는 이번 주에 여행을 가야 하기 때문에 적어도 월요일이 되어야 이것을 볼 수 있다.혹시 @BrianGenisio 미리 볼 수 있을까요?

토론 #2

나는 이것에 대해 매우 괴로워하지만, 나는 이 프로젝트와 일반적인 하드웨어 해커 행위와 맞지 않는다(나는 이미 10개월 동안 시험판을 건드린 적이 없다).나는 내가 아무런 가치가 없다고 생각한다.죄송합니다. (

토론 #셋

@rwaldron 다른 분들은 좀 볼 수 있을까요?아니면 내가 직접 해볼 수 있도록 조언해 주시겠어요?
감사합니다

토론 #4

Or could you give me some pointers of what to look for to have a try myself?


나의 첫 번째 생각은 디버깅 메시지를 인쇄하는 시간 비용이 BME280의 정확한 운행에 필요한 지연을 제공했는가?센서에 대해 말하자면, 읽힐 레지스터를 쓰는 것과 도선에서 바이트를 얻는 것 사이에 기다리는 시간이 있을 것이다. 이것은 들은 적이 없는 것이 아니다.이 두 작업 사이에는 DEBUG 개의 블록이 있다.
... 그러나 입자, SparkFun, Adafruit의 BME280 드라이버를 보니 이런 지연을 제기하지 않았다.참고로 StandardFirmata에는 이러한 지연이 없습니다.
그래서 만약 내가 지금 앉아서 이 문제를 토론한다면 내가 먼저 해야 할 일은 다음과 같다.
  • 설정DEBUG-1
  • 노트 중의 모든 DEBUG 블록https://github.com/voodootikigod/voodoospark/blob/cfececc76849fb5d2439a17bd837749dcf44edf1/firmware/voodoospark.cpp#L287-L357
  • 컴파일, 업로드 및 테스트
  • 토론 #5

    사실 이번 주말에 혼자 여행을 갈 거예요. 그래서 월요일에 보면 더 좋을 것 같아요.
    감사합니다!

    토론 #6

    @rwaldron 이것 좀 볼 기회가 있습니까?
    감사

    토론 #7

    저는 저의 빛을 갱신하고 오늘의 문제를 재현하는 데 시간을 들였습니다. 이것은 제가 실현할 수 있는 것입니다.나는 내일도 이 문제를 해결하기 위해 노력할 것이다.

    토론 #8

    @rwaldron에 소식이 있습니까?

    토론 #9

    죄송합니다. 지난번에 발표된 이후로 저는 이 일을 할 기회가 없었습니다.

    토론 #10

    시간을 짜내려고 노력하고 있는데...DEBUG 1에서 나는 이미 원본 코드에 대해 테스트를 진행했는데 그 중에서 readAndReportI2cData 중의 모든 디버그 블록은 주석을 달고 한 번에 하나씩 추가적인 방식으로 모두 삭제되었다.현재, 나는 readAndReportI2cData의 모든 디버그 블록을 설명했다. 로그 기록이 나의 직렬 모니터에서 온 것을 관찰할 수 있지만, JS 프로그램이 잘 작동하고, C로 도수를 출력한다.
    const {Board, Multi} = require("johnny-five");
    const Particle = require("particle-io");
    const board = new Board({
      io: new Particle({
        token: process.env.PARTICLE_TOKEN,
        deviceName: "squeamish-captain",
      })
    });
    
    board.on("ready", function() {
      console.log("CONNECTED");
    
      const now = Date.now();
      const bme = new Multi({
        controller: "BME280",
      });
    
      bme.on("data", () => {
        console.log(bme.thermometer.C);
      });
    });
    
    다음에 무엇을 조사해야 할지 모르겠지만, 나는 더 많은 상황을 알고 보고할 것이다.

    토론 #11

    그것을 어떻게 사용하는지에 대한 조언을 해 주시겠어요?
    const multi = new five.Multi({
        controller: 'BME280',
        address   : 0x76,
        freq      : 250
      });
    
    //In a different part of the code I have a setInterval 
    //and I get the data from the sensors directly. Something like this:
    
    setInterval(() => console.log(multi.thermometer.celsius), 1000);
    

    토론 #12

    주석된 디버그 블록의 몇 가지 임의의 조합이 보고서를 정지시킬 것이라고 나는 이미 확정했다.나는 그들이 어떤 공통점이 있는지 모르겠다.

    address : 0x76


    왜 0x76입니까?너는 나와 너의 이사회를 연결할 수 있니?

    토론 #13

    I2C 스캐너로 찾았습니다. 이 회로판은 0x76 또는 0x77일 수 있습니다. 구체적으로는 점프선에 달려 있기 때문에

    토론 #14

    these boards can be on 0x76 or 0x77 depending on a jumper, so I'm fixing it to be sure

    를 확보하기 위해 복구하고 있습니다.
    그래, 내가 이 문제를 묻는 것은 단지 나의 기본값이 0x77이기 때문이다.이것도 틀림없이 무관하다. 왜냐하면 네가 그것을 DEBUG 1와 함께 사용할 수 있다고 말했기 때문이다.
    나는 또 다른 일을 발견했다.https://community.blynk.cc/t/bme280-sensor-and-particle-photon/7473/13이 사람의 문제는 우리의 문제와 똑같이 들린다.

    I tried to use the Adafruit library with the BME280 sensor but had no luck. Somehow I had a timing problem which I gave up on


    그리고 그들은 사용CE_BME280.h을 언급했기 때문에 나는 다음에

    토론 #15

    업데이트를 볼 것이다!

    a timing problem


    이것은 나로 하여금 왜 몇 개Serial.print()의 전화가 한 시간 문제를 바로잡을 수 있는지를 생각하게 했다. 물론 이런 조작은 약간의 시간 비용을 필요로 한다!이 점을 감안하여 BME280은 레지스터를 설치한 후에 레지스터를 읽는 모든 작업 사이에 일정한 시간 민감성을 가진다. 즉, 읽기, 보고, 지연, 읽기, 보고, 지연(등등)이다.voodoospark는 모든 연속 읽기에 샘플링 간격을 가하지만, 광자의 I2C 버스에 대해서는 샘플링 간격이 너무 높을 수 있습니다.Johnny Five의 문서 기록이 없는 기능을 사용합니다(이름이 좋지 않기 때문에 추천하는 방식으로 공개하고 싶다는 것을 완전히 확신한 적이 없습니다). BME280에서 펌웨어DEBUG를 읽는 데 성공했습니다0.
    const {Board, Multi} = require("johnny-five");
    const Particle = require("particle-io");
    const board = new Board({
      io: new Particle({
        token: process.env.PARTICLE_TOKEN,
        deviceName: "squeamish-captain",
      })
    });
    
    board.on("ready", function() {
      console.log("CONNECTED");
    
      const now = Date.now();
      const bme = new Multi({
        controller: "BME280",
        // Secret optional microsecond I2C register set & register read delay
        delay: 1000
      });
    
      bme.on("data", () => {
        console.log(bme.thermometer.C);
      });
    });
    

    토론 #16

    재미있다!복도교 방주의 시간 계산 문제를 해결할 방법이 있습니까?아니면 J5에 그거delay를 사용해야 하나요?나는 그들이 그것을 반대할까 봐 조금 걱정했는데 복구 프로그램이 사라졌다. (

    토론 #17

    I'm a bit worried they will deprecate it and then the fix is gone :(


    '그들'은 바로 나다. 그래서 나는 지금 너희들에게 이 재산을 영원히 반대하거나 제거하지 않겠다고 약속한다.

    토론 #18

    하하!너무 웃겨, 난 몰랐어, 이게 해결될 것 같아!도와줘서 고마워요!!
    나는 그것delay을 사용해서 모든 것이 정상인지

    토론 #19

    delay와 잘 어울리는지 볼 것이다. 그래서 나는 이 문제를 끝낼 것이다!

    좋은 웹페이지 즐겨찾기