Bluetooth клавиатура на ардуино

DIY Arduino Wireless Keyboard

The Motivation starts with my laziness… Let me paint a picture for you.I was watching “Friends” in my room lying on the bed like we all do.

The episode ended and I wanted to change the episode so I stretched my arm out in order to watch the next episode for the hundredth time. BUT I couldn’t , because there was this 2 inch gap between my finger and the touchpad which was looking like a 2 Km run. I smiled, not just because I realised that I am the most lazy guy on this planet but I thought “What would it take to make a wireless keyboard. ”.

So instead of covering that 2 inch gap, I jumped off the bed and ran to my desk on the other side and after five hours of Googling, Youtubing, and Hit & Trial. I made a wireless keyboard a.k.a T.V. remote to change that episode.

The device can give command from 0 to 9 and Spacebar to pause and play. But you can modify the program to increase functionality just go to page 53 in the pdf present in the repository.

It has a range of more than 20 meters. 😲 oh… Yes…

The tutorial on how to increase your laziness by making a wireless keyboard with arduino is given below:

The Components required:

  1. Arduino Uno or Arduino Mega2560
  2. IR Receiver ( SMOO38)
  3. Breadboard
  4. Jumper wires
  5. T.V. Remote
  6. and some Water to pour on the electronics, just kidding 😃 that was it.

The Circuit is simple AF… use the 11th pin on ArduinoUno.

You also need to download a Software called FLIP published by the Atmel. When you click the link and go to the page you will find this…

Just click on that 21Mb link (because it has jre included, just to be on the safe side). Now install it (just like any other Next… Accept… Next… Next install).

But why do we need Flip Software on the first place ?

When we connect arduino to the computer your computer sees this (Go to Devices and Printers to check it out).

So no matter what you type it only shows on the Serial Communication section of the Arduino IDE because your computer is not reading that device as a keyboard. So to overcome that we need to change the firmware on the Arduino Chip with a keyboard’s firmware that I’ll link below.

So, just go to this Github link and download all the files and to download the IRremote library go the this link and follow the procedure.
Note: If you already have the IRremote library no need to download it.

There are only 6 steps make this lazy device:

1. Upload the Keyboard_Program.ino file.

First, select the correct board and the correct port .

Now plug out and then plug-in the arduino again.

2. Put your device in DFU Mode (i.e Device Firmware Update).

To put your device in DFU mode connect these two pins.

You will hear the sound of plugging in and out of the arduino automatically. This turns the arduino in its DFU mode .

Note: Don’t plug out the arduino from the computer otherwise it will again comes back to the arduino basic firmware.

In your Devices and Printers it might look like the pictures below.

3. Open Flip and Select Target Device.

Open the Flip software click the Select target device button and you will see something like this.

In my case I am selecting Atmega16U2 (for both Uno & Mega).

4. Click Communication Medium & Open Port

Now click the second button (a.k.a. Communication Medium) and select USB Ctrl + U for serial communication.

Then Click open port. If everything in the background lights up, that means Target device you selected is right. But if it doesn’t

Note: You might get error like atusbduf.dll not found or something like that . or Could not open the USB device.

The Solution that is that change the target chip to correct target chip;and check that the Arduino is still in the DFU mode or not.

5. Load the Keyboard Firmware or .Hex file.

First, Click on Load HEX File button and select the right file according to your arduino.

If you are using Uno select this : Arduino-keyboard-0.3.hex

If you are using Mega select this: Arduino-keyboard-0.3-mega2560.hex

Before Running and Start Application.

Make sure that all the checkboxes in the operation flow is checked above the Run button and Reset is also checked near the Start Application button.

Now click the Run and if it gets verified then click Start Application.

If everything worked fine, plug out your arduino (I mean your DIY Wireless Keyboard 😉) and Now when you plug it back in it will be show as KEYBOARD. in your Devices and Printers like this .

But Don’t worry you can again use it as Arduino. Just repeat the same procedure with the original firmware file.

For Arduino Uno use this file: Arduino-usbserial-uno.hex

For Arduino Mega use this file: Arduino-usbserial-atmega16u2-Mega2560-Rev3.hex

or whichever one works for you.You van also find these files at C:\Program Files (x86)\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2\arduino-usbserial

To get the full code and files go to this Github link.

P.S. Don’t keep any print or Serial.print line uncommented, if you will your arduino keyboard will go crazy.

Watch how it looks:

Follow the Publishing page and get the latest at Google+, Twitter.

To get more posts like this follow us on Medium.

and to post your story at Arduino Community, first mail the post at Gmail.

Any comments or if you have any question, write it in the comment.

Источник

midi-bluetooth клавиатура на esp32

Несколько лет тому назад ко мне в руки попала компактная драм-машина от небезызвестных teenage engineering. Тогда меня очень поразила идея — использовать печатную плату как часть корпуса и элемент дизайна устройства. С тех пор мне хотелось тоже собрать аналогичное по стилистике устройство. В результате я собрал простую midi-bluetooth клавиатуру, которая легко подключается к ноутбуку или айфону.

Изначально я хотел взять простой микроконтроллер с поддержкой USB (например, ATmega32u4) прикрутить к нему кнопочек, фейдеров и потенциометров, накидать все это на небольшую плату и на этом успокоиться. Но какой смысл во всей этой компактности, если вокруг будет виться длиннющий USB-кабель? Тут-то я и вспомнил про ESP32, который вроде как поддерживал bluetooth, и про относительно свежую и многообещающую технологию MIDI-BLE.

Midi over Bluetooth

Спецификация BLE-MIDI появилась не так давно в 2017 году и позволяет передавать MIDI-команды по Bluetooth со сравнительно небольшой задержкой 10-20 ms (для сравнения обычный USB — 4 мс). Технология успешно поддерживается всеми современными ОС, в частности iOS с 8-й версии, Android c 6-й, а также Windows 10 и Mac OS начиная с High Sierra. Работает все это весьма бодро, и, самое главное, можно без всяких проводов подцепить контроллер к айфону и поиграть на синтезаторе в каком-нибудь Garage Band.

Программно реализовывать на практике все это оказалось не так уж и сложно. Всего-то нужно создать BLE-устройство с корректным MIDI Service UUID и MIDI Characteristic UUID, после чего можно общаться с подключенным устройством короткими BLE-пакетами, по структуре своей схожими с обычными MIDI-сообщениями (с добавлением двух служебных байтов)

Не думаю, что имеет смысл в сотый раз рассказывать про устройство MIDI протокола — на эту тему есть бесчисленное количество статей. Ну а про MIDI-BLE можно почитать классный туториал тут

Пруф оф концепт

Первым делом хочется подкрепить свою идею каким-то простым и работающим прототипом; спустя полчаса ресерча по Github`у я залил в ESP-шку чей-то скетч, который, к моему удивлению, смог обнаружить мое устройство и даже отправить midi-команды на компьютер.

Тут то я и стал раскидывать примерные контуры устройства: хотелось иметь минимум-пару октав кнопочек, по одной кнопке для повышения и понижения октавы, ну и потенциальную возможность прикрутить фейдеры и прочие крутилочки.

Проблема нехватки ножек у ESP32 была решена их расширением с помощью мультиплексора CD74HC4067. Работать это должно было так: к CD74HC4067 подключены кнопки, микроконтроллер поочередно выставляет разные адреса на адресных шинах мультиплексора и считывает значение кнопки находящийся по соответствующему адресу с Common Output пина микросхемы. Кстати вместо кнопки можно вполне установить потенциометр и читать напряжения с них, тем самым добавить в девайс pitch-wheel например.

Накупив кнопочек и микросхем, за вечер я собрал вот такой прототип:

Тут-то меня постигло первое разочарование — кнопки. Кнопки были отвратительны, тугие и оставляли следи на пальцах при активной игре. Я прекрасно помню, какие кнопки были в моем Teenage Engineering PO-12, с виду точно такие же, но мягкие и плавные. Позже я заказал себе несколько семплов разных кнопок и все они оказались вполне пригодными для такой игрушки, но те первые, самые доступные из ближайшего чип и дипа, совсем никуда не годились.

Хардвар

Прототип как-то работал, концепция устройства была понятна, дело за печатной платой. К существующим компонентам я лишь добавил кнопочки для программирования установленного микроконтроллера, PLS-пины для прошивки и финального дебага, LiPo аккум и платку заряда литиевого аккумулятора на основе TP4056. Так торопился, что забыл добавить LDO для питания ESP32 да и банальную кнопку включения. Хотя конечно сперва был огромный соблазн навесить сразу кучу разных фитч на плату начиная от экрана и заканчивая дополнительными midi-выходами. Развел плату в EASYEDA буквально за пару вечеров и отправил в печать на DirtyPCB.

Такие платы приехали через 3 недели.

Софтвар

После того как PCB-шка была собрана, пришло время дописать прошивку и пройтись по всем граблям, раскиданным на этапе проектирования хардварной части. Во-первых, я узнал, что не все ADC-входы у EPS32 одинаково полезны можно использовать вместе с WiFi или bluetooth, а именно ADC2 порт не работает корректно вместе с Bluetooth. На какой порт я завел считывание данных с мультиплексора? Ну конечно же на него!

Позже, когда девайс уже завелся и успешно работал, я стал ловить странный баг: клавиатура периодически отваливалась от компа. А причина оказалась проста, AMS1117-3.3, который я поставил в схему совсем не подходил для питания ESP32 от литиевой батарейки, потому что просаживал напряжение на целых 0.7 В. Обнаружив это, я заменил его на менее прожорливый LD3985M30R. Поборов эту проблему, у меня наконец-то таки ура все заработало

Да, совсем забыл сказать: поскольку я использую стойкую нелюбовь к Arduino IDE, то на отладки и написания прошивки очень воодушевился, открыв для себя PlatformIO.

Корпус

Все-таки использовать девайс с висящей на обратной стороне LiPo-батарейкой мне показалось слишком, и я решил сделать небольшой корпусок.

Корпуса, напечатанные на 3D-принтере, всегда казались мне слишком DIYными на вид, и я решил нарезать корпус на lasercut`е.

За вечер во Fusion360 я сделал бампер из 6 миллиметрового акрила и крышку.

Результат

Получилась компактная клавиатура размером с айфон. Вот небольшое видео с примером работы

После того как я допилил прошивку и собрал девай в корпус, мне захотелось сделать вторую версию с midi-выходом, oled-экраном и устраненными косяками предыдущей PCBшки, но в последствии отказался от этого.

Источник

LSChyi/Bluetooth-keyboard-adapter

Use Git or checkout with SVN using the web URL.

Work fast with our official CLI. Learn more.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

This project is based on arduino nano broad, and is evolved from the old project which is based from linkit smart 7688 duo, you can still find the old project in the ‘linkit_smart_7688_duo_version’ directory.

I really like to use my KBP mini V60 mechanical keyboard, And I’ve wondered is there a Bluetooth adapter that can enhance this keyboard into a Bluetooth wireless keyboard. There are some products like ATEN CS533, but there are issues saying that they are not compatible with some mechanical keyboards, so I decided to build my own Bluetooth keyboard adapter.
The bluetooth module I use can also support mouse simulation, so I also implement this feature in the project.

Arduino boards
The board I used is Arduino nano (picture from Arduino.cc)
The reason why I used it is because I will use an arduino usb host shiled (list below), and I want to integrate them into my keyboard, so the smaller the better. You may ask why I don’t use arduino pro mini with arduino pro mini usb host shield, it is because the pro mini and mini shiled I bought is very weird (here is the thread I talked with the developer), so I gave up at last.

Bluefruit EZ-Key 12 input Bluetooth HID Keyboard Controller
(picture from Adafruit)
This is the most expensive part, there is also some HID Bluetooth modules you can choose, so you can modify the MCU code to communicate with the Bluetooth module you chose. Also, be aware to the ability of the module you choose, some may not support HID customer reports, or some only sends English ASCII character, not implementing key press or release with keycode.
I found there is another good module, RN-42HID bluetooth module, and this one can be easily retrieved from RS site. It also supports customer report.

Battery
You can use any batteries, or power bank as the power source, just make sure your board can work with it.
I used a battery from my old cell phone, and I used this module to boost voltage to 5V, and this module to charge the battery.

The main idea is this:

Install USB Host Shield Library

Then copy these two files into the usb host shiled library directory:

In OSX, this directory is ususally at:

and in Windows, this directory is usually at:

burn the btKeyboard.ino into your arduino

Open btKeyboard.ino with your arduino IDE, and burn it into your arduino board.
btKeyboard.ino is the interface that I made for users to customize the behavior after receiving the keyboard down or up events.

To connect the USB host shield, you should connect these pins:

To connect the bluefruit ez-key module, you should connect these pins:

Arduino bluefruit ez-key Note
2 Tx
3 Rx
4 PB This pin is for re-pairing from arduino, you can drop this pin and do the re-pair by press the button on bluefruit module
5V Vin
GND GND

In this version, I provided an configurator for remapping keys, but no macro configuration tools. The only combination I implemented in btKeyboard.ino is hold r, s, t (note that order does matter, and you have to hold them until you press the last t), then release these thess keys, your bluefruit will do the re-pair process.

To use this configurator, turn on an web server(like python simpleHTTPServer, node http-server, etc) to open index.html in the directory «configurator».
You can click any key, and the press the corresponding key you wish to remap to.

There is also an mouse configurator for you. but note, the key in mouse configurator can only support normal keys(e.g. no modifier keys, consumer keys, etc).

Then press «OUTPUT CONFIG», replace these texts appears at bottom, and burn onto your arduino.

Replace the output code to the segment «custome settings»

Output and load configures

When you press the «OUPTUT CONFIG», your browser will download a file «keyboard_configure.dat». This file is just a JSON string, so do not burn this onto your arduino.
You can press the «LOAD CONFIG» button to load your configure file, which is obtained from clicking «OUTPUT CONFIG» button.

In this version, the keyboard adapter can not get the original consumer report from keyboard, but can define other keys to send consumer report. In the default settings in btKeyboard.ino file:

Original Key Maped to Consumer Report
F1 Volume Up
F2 Volume Down
F5 Play/Pause
F6 Stop
F7 Home
F8 Search

and In the feature, there will be a more convenient configure interface. Any one wants to implement another key map, or to support some consumer report that bluefruit do not have should modify the btKeybaord.ino file.

Because bluefruit EZ-Key can simulate mouse input, so I implement this function into this project, and I can relief from move my hands to hold mouse for some simple click.

To simulate mouse input, in the default settings, press the key F3, you you will enter mouse mode. In this mode, up, down, left, right arrow keys will become mouse move with 15px, and you can hold the arrow key to continue moving. If you want a more precise mouse moving, e.g. a slower mouse move, hold the F key, then any arrow key will move to the coresponding directions with 2px.

In the mosue mode, your Space key will become mouse left click, and menu key will become mouse right click.

You can press the key F3 again to leave mouse mode.

In this version, I added an arduino power control library, and turn off the following modules:

  • ADC: this project requires no analog to digital or digital to analog.
  • Timer2: timer2 is used for PWM.
  • Timer1: timer1 is used for Servo library
  • TWI

If you want to save more power, you can consider to build your barebone arduino.

The content of the configurator is licensed under MIT license, and the rest content of this project is licensed under GPLv2.

About

This project is based on Arduino board, but is compatible with other boards some modifications.

Источник

Adblock
detector