Pro Micro keyboard emulation with iPad Pro

Hi,

i'm working on a shortcut keyboard for my iPad Pro (type c port) using an Arduino Pro Micro, However for some reason i cant get the pro micro and the iPad pro working together. The iPad just isn't powering the pro micro at all.

Thats my setup (pro micro>micro usb to usb c>usb c cable>iPad):

the iPad Pro documentation sates

The USB-C port on your iPad allows connections to a variety of devices. For example, you can connect a digital camera or the Apple USB-C to SD Card Reader to import photos. Other USB devices you can connect to your iPad include these:

  • External storage
  • Hubs and docks
  • Keyboards
  • Audio interfaces and MIDI devices
  • USB to Ethernet adapters

As the Arduino Pro Micro needs to boot up and present itself as a keyboard may be the iPad does not wait long enough to see it as a keyboard and thus does not send power.

have you tried powering the Arduino Pro Micro separately and checked that it would be recognised as a keyboard ?

Hmm interesting.
I did connect it to my pc and it works perfectly. But i'm not sure it's recognized necessarily as a "keyboard" connection. If it isn't, could you tell me how?

the USB port on a PC sends power all the time.

My guess is that the iPad might take a more conservative approach for battery protection and security and will only power "legit devices".

Which means what i try to do is impossible because Apple sucks?

That's not how I see it.. .
if I'm right in my assessment, I would say this is because Apple is protecting your iPad against abuse and threats. That's one of the reason people buy Apple products.

plugging in a key injection device is one way to hack lots of systems... what are you trying to do?

I'm sure if Apple wanted to they could implement Arduino Pro Micro support easily, But anyway thanks for your help, I really appreciate it.

Im trying to make a shortcut board for drawing/video editing to increase my productivity

as I said, that could possibly open the door to all sort of attacks... Minimizing the attack surface is a very common defence.

when I get time I'll go grab my iPad Pro and double check if I get any power with a random cable.

Hmm seems to me that instead of facing the problem they just eliminated this option.

Thanks, I really hope yours will somehow work

I'd need to try to see for myself

Remember originally that port was mainly for the iPhone / iPad to be a device to a host computer that was providing power and some limited (signed) transactions like backup.

What you want is the iPad now becoming a Host. With USB C they opened up a bit the capabilities but I think it's fair if they take a conservative approach to this to mitigate risks or avoid draining batteries. Remember your iPad battery (like any battery) has a limited number of charge cycles...

so I tried for myself.

I had a MKR 1000 on my desk so that's what I used since it can pose as a keyboard.

I saw you added a button to your setup so I built something similar and uploaded this code

#include <Keyboard.h>
const int buttonPin = 2;          // input pin for pushbutton
uint32_t count = 0;

void message() {
  Keyboard.begin();
  Keyboard.print("You pressed the button ");
  Keyboard.print(++count);
  Keyboard.print(" time");
  if (count > 1) Keyboard.println("s.");
  else Keyboard.println(".");
  Keyboard.end();
}

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
}

void loop() {
  while (digitalRead(buttonPin) == HIGH);   // awaits button's press
  delay(20);                                // poor man's bounce protection :)
  message();
  while (digitalRead(buttonPin) == LOW);  // awaits button's release
  delay(20);                              // poor man's bounce protection :)
}

I switch my OS keyboard input to American Keyboard and tested it on my Mac in a text editor ➜ I was getting the right text.

I don't have a USB C to micro-usb direct cable so could not try to connect the MKR1000 directly so

  • I hooked up a Satechi Multi-Port Adapter to my iPad Pro to get various ports (HDMI, USB, SD Card). ➜ the iPad recognised a legit Hub and provided power.
  • I hooked up the USB cable to the MKR 1000 which got powered.
  • I launched Notes and switched the keyboard of iOS to American English (my default is French and that would cause issue with the keyboard library)
  • I pressed a few times on the button and the text came flawlessly into the iPad

➜ seems you can get it to work.

may be having a smart USB Type C Breakout Board for Downstream Connection would trigger the right behavior from the iPad ?

Hmm thats odd. my guess is that my adapter isnt compatible with ios devices.
I probably can get it to work like you said but that will require much more time and effort than I thought it would, so i think im gonna go with bluetooth HID with something like esp32.
Thanks for your help tho, much appreciated.

probably as they say in the picture

lol should have checked before i bought it

maybe a Mavic cable would do.

I've seen these

in the comments (in French) one user is mentioning it works with iPad Pro.

So I bought this cable to test and it does not work at all. it's meant for Mavic remote control so not suited. You can't even power an arduino with it...

Whoa u actually bought the thing?! Oh Well.. guess I’ll stick to using BLE with my esp32

yes I was curious... I returned it as it was not working (not even with my drone)

Hi

just some feedback. I bought a Duttek micro usb to usb C (available @ amazon) and it all worked fine on the Mac or the iPad, as was able to get keyboard keys

so what you want to achieve is possible with the right cable.