2
$\begingroup$

I have attached an Adafruit Circuit Playground Express to my Roomba OI, and after manually waking it up I am able to successfully send opcode commands based on the Roomba OI Manual. I can even start, stop the OI and send the off op code, then restart with the RBC on LOW and get things going again.

Where things stop working is when I don't send any commands for more than 5 minutes and it enters sleep mode. I've seen a few questions on the board, but no definitive answers on how to successfully pulse the BRC from sleep so that I can begin to send commands to the OI. For my use case the need to start up could be random (could be hours between commands or days) so pulsing within 5 minutes off or on the dock to keep the OI alive seems excessive, but maybe that's what I have to do. It also seems like this means if the Roomba ever did enter sleep mode that human intervention would be the only way to get the OI started again. Has anybody had success waking the Create 2 or 600 series Roomba from sleep via the OI BRC?

Additional code, docs, pictures here

roomba.ino

//Setup pins
const int baudPin = A1;

//Setup roomba opcodes
//https://www.irobotweb.com/-/media/MainSite/PDFs/About/STEM/Create/iRobot_Roomba_600_Open_Interface_Spec.pdf?la=en
const int startOpCode = 128;
const int cleanOpCode = 135;
const int stopOpCode = 173;
const int powerOpCode = 133;
const int safeModeOpcode = 131;
const int fullModeOpcode = 132;


void setup() {
    pinMode(baudPin, OUTPUT);
    Serial1.begin(115200);
}

void loop() {
    digitalWrite(baudPin, LOW);
    delay(500);
    digitalWrite(baudPin, HIGH);
    delay(500);
    digitalWrite(baudPin, LOW);

    Serial1.write(startOpCode);
    Serial1.write(safeModeOpcode);
    Serial1.write(cleanOpCode);

    delay(4000);    


    Serial1.write(powerOpCode);
    Serial1.write(stopOpCode);

    exit(0);
}

```
$\endgroup$
1
$\begingroup$

The firmware update described in this answer fixed my problems in this area:

There is a bug in the implementation of sleep/wakeup on Create 2 which was fixed in release-3.8.2 for robots with an older processor, or release-stm32-3.7.7 for robots with a newer processor.

$\endgroup$
  • $\begingroup$ Thanks, I'll reach out and get that along with the roomba cable so I can install the firmware update for this. If that works I'll add the vote and mark this is the answer. $\endgroup$ – Alexander Feb 28 at 1:00
  • $\begingroup$ I know it's been a while since I asked about this, but iRobot was able to send me a firmware update that fixed this issue. $\endgroup$ – Alexander Jun 11 at 11:59
  • $\begingroup$ Thanks for your answer Faengelm. In general we prefer answers to be self contained where possible, so quoting the relevant part of a referenced answer means that people only need to click through if they need more information. Also, using the "share" link at the bottom of an answer will take you to that answer directly, so screen grabs aren't really needed. $\endgroup$ – Mark Booth Jul 18 at 9:51
0
$\begingroup$

Did you try giving three pulses Low High Low? I read somewhere that it depends on pulse train instead of single pulse.

$\endgroup$
  • $\begingroup$ Thanks, I had a loop in pulseBRC that pulsed LOW/HIGH ten times. I removed that and put the Low/High pulse in loop. $\endgroup$ – Alexander Feb 28 at 0:57
0
$\begingroup$

I've been using a Roomba 535 for years with Raspberry Pi and have not found a way to keep it awake. It still streams sensor data if set to. I just have a function called (wake) that I call every before I ask it to do anything. It pulses that wake pin, sends the start command (128 maybe? I forget), then sets the mode to safe mode. then back to my program. It doesn't have to run every 5 min 24/7 - just right before you need it. Work in progress but I'm slowly updating my website with some documentation about my Roomba and other robot projects www.lloydbrombach.com

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.