dustinwatts / freetouchdeck Goto Github PK
View Code? Open in Web Editor NEWFor interfacing with Windows/macOS/Linux using an ESP32, a touchscreen and BLE.
Home Page: https://www.youtube.com/dustinwatts
License: MIT License
For interfacing with Windows/macOS/Linux using an ESP32, a touchscreen and BLE.
Home Page: https://www.youtube.com/dustinwatts
License: MIT License
Hi there!
I'm considering building this project.
Is it possible to assign any combination of key like, for instance, Ctrl+Win+Left/Right Arrow to move between Virtual Desktop (Win10) ?
thanx!
Hi,
I really enjoy this project, but would like to use it with battery power.
I saw you wrote that you can monitor battery level in this issue #8.
Is it working, and which pin is used for battery monitoring?
And not that important, but will it show percentage in Windows?
Hello, I would first like to thank you for making this project. I ordered all of the recommended items, including the board from PCBway.
My issue is with the FreeTouchDeck showing a white screen on boot. I followed everything and tried double checking my setup for the Arduino IDE on Windows 10. There are no errors on compiling and the only sign that some of the sketch has uploaded, is that the screen will go dark after 10 minutes. Other than that, there is no response from the unit and there is no available bluetooth device on the desktop, or my phone, after boot.
I'm not the best with microcontrollers, and I'm at a bit of a loss. Is there any recommendation that you may have for resolving this?
In the ESP32-BLE-Keyboard library, F13 - F24 are available. It would be nice to implement those too.
This is just a comment. @DustinWatts and the other contributors to this project. Feel free to close it.
I wanted to thank you for taking the time to build this. It was exactly what I was looking for!
I took the time to port the code to the TTGO T-Watch 2020 v1 which I happen to own. This wasn't a huge effort; the watch has the same capacitive touch controller that the project uses. A couple of notable differences are the screen resolution (smaller) as well as the onboard power management chip which needs to be told to power on in order to get the back light to work.
Just for fun, I spent a couple of hours refactoring a bit of the code, especially around how menus/screens are represented and loaded internally. I've done it in a way that would allow any number of menus to be created, each with an arbitrary number of buttons, and an arbitrary number of actions, all the while preserving the JSON format which you are currently using (for the sake of staying compatible with existing installs).
Essentially, there are now a few more classes:
Let me know your thoughts and if this is something which you'd like to see some day.
Hey guys!
I was using the master branch here for my setup , but as i saw the video about the new features on development branch i compiled and tried to use, im having a issue here that the menu loads , shows but i cant use any button they have no action , and nothing on the log, if i use the master branch works perfectly , could you please help?
thanks!
Currently it is limited to 3.
Might require some rework, but I think using an array to store the steps would allow people to do more complicated actions.
Would be good to have a code version number displayed somewhere so people could mention what version they are on in issues
Debug.h makes things more complex and isn't really necessary. It is just a more complex way of doing serial.print.
Doesn't seem like there is an option for the space bar in the current options in the configurator
Having got it working I can go into the WiFi settings and connect direct to the Freetouchdeck with my phone but even after setting my wifi details and password it doesn't seem to want to connect to my WiFi network so that I can access the setup from my main PC.
I do have other IOT devices that are connected and accessible to my wifi though so not sure what's going on.
I've got it all up and running now, thanks for a great project.
Is it possible for the home menu to trigger some actions as well as going to a sub menu?
My scenario is that I want to start Fusion360 by pressing a button on the home (I've assigned CTRL+ALT+f to the shortcut) then the sub menu for Fusion actions will appear where I will have buttons to do basic CAD actions.
Also it would be useful if we could have more buttons, maybe 4 x 3 ?
Hi Dustin, it seems to me that the Fusion360 design is missing the back/stand of FreeTouchDeck case. When I import the f3z file in to Fusion360 I get 2 drawing, the front of the case and dummy ILI9488 TFT screen.
My question is this... would it be possible to also share the back/stand?
Thx.
Using the development branch, the code compiles and uploads ok, but the screen shows the following error on startup:
"Unable to load file /config/menus.json"
PS I'm using Dustin's ESP-32 Touchdeck with capacitive touchscreen
The DynamicJsonDocument size for menu configurations is 1200. Which is not enough for large configurations and will give an error: [ERROR]: deserializeJson() error
,NoMermory
.
Increasing it is the solution.
The web interface for the configurator takes about 20 seconds to load for me (didnt time, but it's slow)
Any idea what is causing this?
I'm using Firefox on Windows 10.
A list so far:
Where is a copy of the pcb file? I couldn't find it on pcbway or here on github.
Something I recently thought of; "What if there is no more room on the SPIFFS and a user tries to upload a logo?" This also made me think of a configurator menu where users could delete logos that aren't used.
It also might be a good idea to check whether there is free space before actually uploading the logo.
Hello,
i have these errors when compiling the code in arduino:
In file included from C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup_Select.h:22:0, from C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/TFT_eSPI.h:39, from C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:79: C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:199:0: warning: "TFT_CS" redefined #define TFT_CS 15 // Chip select control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:161:0: note: this is the location of the previous definition #define TFT_CS PIN_D8 // Chip select control pin D8 ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:200:0: warning: "TFT_DC" redefined #define TFT_DC 2 // Data Command control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:162:0: note: this is the location of the previous definition #define TFT_DC PIN_D3 // Data Command control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:201:0: warning: "TFT_RST" redefined #define TFT_RST 4 // Reset pin (could connect to RST pin) ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:163:0: note: this is the location of the previous definition #define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line) ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:268:22: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] char* jsonfilefail = ""; ^ In file included from C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:283:0: sketch\DrawHelper.h: In function 'void drawKeypad()': sketch\DrawHelper.h:1345:43: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] "", KEY_TEXTSIZE); ^ sketch\DrawHelper.h:1402:45: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] "", KEY_TEXTSIZE); ^ sketch\DrawHelper.h:1463:45: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] "", KEY_TEXTSIZE); ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino: In function 'void setup()': C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:450:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "general"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:484:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "homescreen"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:490:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "menu1"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:496:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "menu2"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:502:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "menu3"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:508:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "menu4"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:514:18: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] jsonfilefail = "menu5"; ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino: In function 'void loop()': C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:948:43: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] "", KEY_TEXTSIZE); ^ C:\Users\neolinux\FreeTouchDeck\FreeTouchDeck.ino:1013:43: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings] "", KEY_TEXTSIZE); ^ In file included from C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup_Select.h:22:0, from C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI\TFT_eSPI.h:39, from C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:17: C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:199:0: warning: "TFT_CS" redefined #define TFT_CS 15 // Chip select control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:161:0: note: this is the location of the previous definition #define TFT_CS PIN_D8 // Chip select control pin D8 ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:200:0: warning: "TFT_DC" redefined #define TFT_DC 2 // Data Command control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:162:0: note: this is the location of the previous definition #define TFT_DC PIN_D3 // Data Command control pin ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:201:0: warning: "TFT_RST" redefined #define TFT_RST 4 // Reset pin (could connect to RST pin) ^ C:\Users\neolinux\Documents\Arduino\libraries\TFT_eSPI/User_Setup.h:163:0: note: this is the location of the previous definition #define TFT_RST PIN_D4 // Reset pin (could connect to NodeMCU RST, see next line) ^ C:\Users\neolinux\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c: In function 'spiTransferBytesNL': C:\Users\neolinux\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c:922:39: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] uint8_t * last_out8 = &result[c_longs-1]; ^ C:\Users\neolinux\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.6\cores\esp32\esp32-hal-spi.c:923:40: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types] uint8_t * last_data8 = &last_data; ^ Lo sketch usa 1633950 byte (77%) dello spazio disponibile per i programmi. Il massimo รจ 2097152 byte. Le variabili globali usano 62448 byte (19%) di memoria dinamica, lasciando altri 265232 byte liberi per le variabili locali. Il massimo รจ 327680 byte.
It seems that when the webserver is loading large files or handeling multiple requests in rapid succession, the configurator does not load properly. The connection seems to hang.
Debug output from the ESP32:
handleFileRead: /
[D][WiFiClient.cpp:509] connected(): Disconnected: RES: 0, ERR: 128
[E][WebServer.cpp:617] _handleRequest(): request handler not found
A possible solution is found on issue #2560 on the Espressif Arduino-ESP32 Github found here.
I have modified 1.0.4\tools\sdk\include\config\sdkconfig.h
and changed the following lines:
#define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 1
#define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 1
to:
#define CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED 0
#define CONFIG_ESP32_WIFI_AMPDU_TX_ENABLED 0
This has drastically improved loading the configurator and has reduced the connection resets to being sporadic. This can then be resolved by refreshing the page.
Hi, I really enjoy the touchdeck.
However, I am missing some keys to map to in the configurator.
It seems like the , (comma), . (point) and the - (minus) is missing. Is it possible to add those?
For now, I took the long route via a AHK script and extended Function keys, but it would be great to have those inside the configurator.
I use it to improve my Lightroom workflow :)
Thanks in advance.
Button 6 changes successfully, but upon reloading the menu, or restarting, the json is not being updated with the new icon.
Hey Dustin,
It would be great if Numpad support could be added!
OBS for example has the possibility to distinguish between a normal 1
and NUMPAD-1
.
Adding Numpad keys would reduce the pain of Windows being picky about F13+ :)
@DustinWatts one of the use cases of my ESP32 TouchDown will be to control a few Shelly devices in my home - these are all controlled over wifi using a simple HTTP API.
To do this I will be changing FreeTouchDeck in ways you may not like to see it go (for example: Wifi on by default, wifi on at all times, Major UI modifications to allow for colour-selection for some RGB lights, ...etc)
Would you like me to contribute PRs here in this vein, or would it be taking FreeTouchDeck in a direction you would rather not see it go? I am happy to go alone on this, but equally happy to contribute what I can too.
I am attempting to compile version number 0.9.11 and i am getting the errors:
ScreenHelper.h:244:23: error: 'File' was not declared in this scope
ScreenHelper.h:244:29: error: 'p_file' was not declared in this scope
ScreenHelper.h:244:37: error: expected primary-expression before 'int'
ScreenHelper.h:244:56: error: expected primary-expression before 'nBytes'
ScreenHelper.h:244:62: error: expression list treated as compound expression in initializer [-fpermissive]
ScreenHelper.h:245:1: error: expected ',' or ';' before '{' token
I am not sure if I am doing something wrong?
One of the ideas I'm playing with is to be able to switch the ESP32 WiFi mode to Access Point(AP) instead of Station (STA).
This would eliminate the need to have a WiFi connection available if you want to use the configurator.
Maybe have the option for both so the user can decide?
One thing I have to be aware of is that jQuery is pulled from the Google CDN. This could ensure that in whatever mode we are in jQuery is loaded:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>!window.jQuery && document.write('<script src="jquery-3.5.1.jquery.min.js"><\/script>')</script>
If you use the Upload Menu Config to upload general.json, you get an error that you can't upload it.
KEY_MEDIA_NEXT_TRACK and KEY_MEDIA_PREVIOUS_TRACK key values are present in Action.h but missing in the list of media keys in index.htm
The idea is that if you have multiple FreeTouchDecks you can set a BLE name in the configurator, to keep them apart.
For now the only possibility for setting the device name for BLE is during compiling. It would require some changes to the BLE Keyboard library, but I think this is possible.
To solve the issue that F13-F24 do not work (properly) in FreeTouchDeck, change a few lines in BleKeyboard.cpp could be the solution:
Changing
line 55 LOGICAL_MAXIMUM(1), 0x65,
to LOGICAL_MAXIMUM(1), 0x73,
and
line 58 USAGE_MAXIMUM(1), 0x65,
to LOGICAL_MAXIMUM(1), 0x73,
See also: DustinWatts/ESP32-BLE-Keyboard#1
This is confirmed on multiple builds to be the solution. I will update the ESP32-BLE-Keyboard fork (https://github.com/DustinWatts/ESP32-BLE-Keyboard) before the next release.
Heee,
Saw the new version for flashing by BIN file. (also only the only one now?)
Tried to flash it to my already working TouchDeck, but it gives me a error.
I used multiple ways to flash it, but it keep giving the same error.
Hope you help me/us.
Greetz,
Jos
Using 'COM3' as serial port.
Connecting.....
Detecting chip type... ESP32
Connecting....
Chip Info:
Version 0.9.11
is in master
at the moment, but version 0.9.12
shipped on the devices in batch 2 of the Tindie run.
Was there much changed between those versions? (It might be worth using Github tags to keep track of the versions as you create them)
@DustinWatts can you push the 0.9.12
code to github so we can see if anything important needs to be included in things like #51 or #52 please?
Because the Sleep Interval FreeTouchDeck uses is 0 by default and only set when loading the config, when sleep is disabled in the JSON config but then enabled through the menu, the Interval is not set and thus still set to 0. This causes FreeTouchDeck to immediately go to sleep.
Suggested fix:
Line 1781:
wificonfig.sleepenable = true;
Interval = wificonfig.sleeptimer * 60000;
Serial.println("[INFO]: Sleep enabled.");
Serial.print("[INFO]: Timer set to: ");
Serial.println(wificonfig.sleeptimer);
It would be nice to put settings for more folders (subfolders). so you can put for example:
Games
Delete key is not defined. Please add.
In action.h under case 2: // Send TAB ARROW etc
case 10:
bleKeyboard.write(KEY_DELETE);
break;
In index.htm under name: 'Arrows and TAB',
{
name: 'Delete',
value: '10'
}
@DustinWatts do you happen to have the values for the calibration array handy?
While uploading new contents for the data
directory (while iterating on #57) I seem to have accidentally wiped the existing config ๐ข
If you have them handy I can just overwrite the existing values ๐
Is there a way, for you to bring this awesome project to Home Assistant too?
I already commented on your Youtube Video regarding this (repeating here, coz this is a proper channel for adding NEW REQUESTS). Apologies though.
FreeTouchDeck + Home Assistant = Too many interesting use cases
Would love to see this project with Home Assistant
Regards
I purchased the ESP32 + TFT Combiner V1 from PCBWay and soldered the ESP32 and the TFT on, but now I am getting the below error through serial and the screen never boots up.
I tested using a breadboard and jumper wires before soldering to the PCB and everything worked great.
rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371
I have been using my FTD for a few days now, and it has been working great, but today I tried to use it and the touch screen would work a little but seemed to be making its own touches. I ran cal reset a couple times, but it seemed to just touch each corner on its own without me touching it at all. I am at a loss. Thoughts?
I'm trying to build and is showing me the following errors:
In file included from C:\Users\bazzo\Documents\Arduino\FreeTouchDeck\FreeTouchDeck.ino:257:0:
sketch\Touch.h: In function 'void touch_calibrate()':
Touch.h:37:9: error: 'class TFT_eSPI' has no member named 'setTouch'
tft.setTouch(calData);
^
Touch.h:59:9: error: 'class TFT_eSPI' has no member named 'calibrateTouch'
tft.calibrateTouch(calData, TFT_MAGENTA, TFT_BLACK, 15);
^
C:\Users\bazzo\Documents\Arduino\FreeTouchDeck\FreeTouchDeck.ino: In function 'void loop()':
FreeTouchDeck:523:19: error: 'class TFT_eSPI' has no member named 'getTouch'
pressed = tft.getTouch(&t_x, &t_y);
^
FreeTouchDeck:599:19: error: 'class TFT_eSPI' has no member named 'getTouch'
pressed = tft.getTouch(&t_x, &t_y);
^
Multiple libraries were found for "WiFi.h"
Used: C:\Users\bazzo\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.4\libraries\WiFi
Not used: C:\Program Files (x86)\Arduino\libraries\WiFi
exit status 1
'class TFT_eSPI' has no member named 'setTouch'
Hi,
I really like this project. And wa thinking if it was posible to add some funcionality like on GOXLR to control audio. I mean that if you for example swipe left on main screen it takes you to diferent layout that will have sliders with different audio sources. It is just idea, don't know if it is doable. But would be cool to have 2 in 1 that doesnt take too much space on desk.
I think it would be a good idea to provide example config files for TFT_ESPI, especially for the way you recommend connecting everything up. When I get the makerfabs board working I'll share my one for that
everything else works perfectly with an ili9341 (#define ILI9341_DRIVER and #define SPI_FREQUENCY 40000000 changed in user_setup.h and resolution set to 320 x 240 in FreeTouchDeck.ino) same wiring and pinout as the ili9488 resistive photo attached in the project.
maybe something to do with the spacing and "rounding" of the buttons due to resize??
Would it not be a good idea to use Cloudflare JQuery in index.htm and save 73kb of space ?
It's a simple fix by replacing <script src="jquery-3.5.1.slim.min.js"></script>
with <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
It will also make it easier to upgrade to newer version without thinking about space usage..
I have ordered the TFT with Touch from AliExpress. Version MSP3520. The TFT Display shows the Icons, but the Touch is not working. I dont know what Touch-Chip is the MSP3520 Version...
Hi,
I followed the instructions in the vide, installed all the libraries but when I compile I get the error
"ConfigLoad.h:20:3: error: 'DynamicJsonDocument' was not declared in this scope"
I'm using Arduino IDE 1.8.42.0
I have ArduinoJson 6.17.3 installed.
Anybody know what may be causing this, I do have quite a few erros after this but not sure if they are a result of this error.
Thanks
after following the installation instructions to the . I had a problem where it wouldn't take any of my touch inputs. turns out all I had to do was calibrate it and it does say so at the top of the .ino file but it would be nice if the instructions also mentioned it.
Also would it be possible to make it receive commands over serial to start calibration or connect to WiFi.
Hello!
Thanks for your hard work to create this usefull Project.
I used this Instruction: https://www.instructables.com/A-Bluetooth-ESP32-TFT-Touch-Macro-Keypad/
But I can't start the WiFi Config. The wificonfig.json is correct modified with my SSID and PW. The TouchDeck initializied well and ich can touche the Buttons. In the BT-Menue on my Mac (10.12.6) I can see and connect to the FreeTouchDeck but the connction is lost in 20sec. In the Keyboard-Setting I find an can connect to the TouchDeck but this connection also lost quick.
Do you have an idea for me to solve this Problems?
Thanks for Help and best greatings from Germany
JOHANNES
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.