Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Set the voltage of a Quick Charge 2.0 source via the Arduino.
By Timo Engelgeer (Septillion)

All credit goes to Hugatry's HackVlog because he came up with the idea and first code. I just made a nicer wrapper :p

What does it do?

QC2Control makes it possible to set the voltage (even on the fly) of a Quick Charge 2.0 source like a mains charger or power bank. Possible voltages are 5V (USB default), 9V or 12V. The source needs to support the Quick Charge 2.0 technology form Qualcomm in order to work.

How to connect?

All you need to use five resistors and (optionally) two diodes. QC2Control circuit

The wire color for a normal USB-cable is
Data+: Green
Data-: White
GND: Black

You're free to pick any pin on the Arduino, just be sure to point to the right pins in QC2Control().

R5 is optional if a 3,3V Arduino is used. With R5 you can use both 3,3V and 5V Arduino's to control the Quick Charge 2.0 source.


Although the regulator on a Arduino Pro Mini should be able to handle 12V (with a light load) some clones don't like 12V and release the magic smoke. Adding two diodes will drop the voltage slightly (+-1,5V) so the Arduino can handle the voltage, even if it's set to 12V.

Because the Arduino can only provide a small current the small and cheap 1N4148 will do. But any other (non-Schottky) should work like a 1N4007 etc.

Download and install

Library manager

QC2Control is available via Arduino IDE Library Manager.

  1. Open the Arduino IDE (1.5 or above).
  2. In the tool-bar click Sketch -> Include Library -> Manage Libraries...
  3. Type in the search bar "QC2Control".
  4. The latest version of QC2Control should show.
  5. Click on it and click Install.
  6. Done!


Latest release: v1.1.0

  1. Download the latest release.
  2. Extract it to the libraries folder inside your Sketchbook. Default is [user]\Arduino\libraries.
  3. Rename the folder to QC2Control (remove version number).
  4. Restart the Arduino IDE if you had it open.
  5. Done!


You can update to the latest version of the library in the Library Manager as well.

  1. Open the Arduino IDE (1.5 or above).
  2. In the tool-bar click Sketch -> Include Library -> Manage Libraries...
  3. Type in the search bar "QC2Control".
  4. The QC2Control library should show.
  5. Click on it and click Update.
  6. Done!

Alternatively you can download it from GitHub and simply unpack it over the current version (or remove the old version first).


Just see this simple sketch

#include <QC2Control.h>

//Pin 4 for Data+
//Pin 5 for Data-
//See How to connect in the documentation for more details.
QC2Control quickCharge(4, 5);

void setup() {

  //set voltage to 12V
  //Same as


void loop() {
  //And you can change it on the fly

Please note, delay() here is just used to demonstrate. Better not to stop the complete program with delay()'s.

If you can, place the call to begin() (or setVoltage()) at the end of the setup(). The handshake needs a fixed time but that already starts when the QC 2.0 source (and thus the Arduino) is turned on. So by doing begin() last you can do stuff while waiting.


QC2Control(byte DpPin, byte DmPin)

Alright, not a method but the constructor. This will create a QC2Control-object to control the voltage of the Quick Charge 2.0 source. DpPin is the pin number for the Data+ side and DmPin is the pin number for the Data- side. See How to connect?.

void .begin()

Just does the handshake with the Quick Charge 2.0 source so it will accept commands for different voltage. It's not mandatory to call begin(), if it's not called before setting a voltage the library will call begin() at that moment.

void .setVoltage(byte volt), .set5V(), .set9V() and .set12V()

Will simply set the voltage. Setting a different voltage than 5V, 9V or 12V with setVoltage() will result in a "save" 5V

byte getVoltage()

Return the last voltage that was set, so it will either 5, 9 or 12.

Full documentation

Full documentation of all the methods of this library can be found inside the library located in QC2Control\doc. Just open QC2Control\doc\index.html to see all methods of QC2Control.

You can also view the documentation via GitHub HTML Preview.

This documentation is powered by Doxygen and thus fully extracted from the source files. This is also used as Main Page.


Can I control more the one Quick Charge source with a single Arduino?

Yes you can! Just make multiple QC2Control objects connected to different pins. But be sure to connect GND of all power supplies (including QC2.0 sources) together but not the voltage rails.


Set the voltage of a Quick Charge 2.0 source via the Arduino.






No packages published