MenuBox: Local Menu Router
by Sorush Moradisani in Circuits > Arduino
64 Views, 1 Favorites, 0 Comments
MenuBox: Local Menu Router














The MenuBox is a very simple yet powerful project and I really enjoyed making it. While ago I used to go to a coffee place nearby and one day I heard the owner complaining about the weak signal coverage in the area and how he couldn't use the online menu services. So I asked him if he's interested in a local device with the digital menu functions and he was very interested. We used an esp32 nodemcu as an access point and created a very lightweight and fully functional digital menu system. The MenuBox is a local access point that allows you to view your menu and manage shop orders on any browser and device via direct link or QR code. It can be used for coffee shops, restaurants, hotels, mobile businesses and etc.
Here's a list of MenuBox's user features:
- View menu
- Ordering items from menu
- Call for staff
- Add descriptions for the order
Here's a list of MenuBox's admin features:
- Receive and manage customer orders
- Call for staff notifications
- Adding orders
- History of orders
- Menu manager
- Lock/unlock ordering from customer side (view menu only)
- Theme customization
- OTA updater
- Factory reset
- Import/export menu items
- Battery status
- Set password for admin panel
Note! The application only supports Persian language but you can use any language for the menu.
Supplies
The supplies list can vary depending your way of making the device, you can simply program an esp32 nodemcu and start using the services but since I was making it for daily usage, I've added some features such as batteries and hard case. Here's the full option supplies list:
1x ESP32 NodeMCU (Purchase USB Cable According to your Module)
2x Lithium ion Battery 18650 3.7V
1x TP4056 Cell Charger Module
1x ON/OFF Switch
2x AMS1117 3.3v Voltage Regulator
2x 100k ohm resistors
1x 2mm Plexiglass Case
About 20cm of black and red wires
You'll also need these tools:
- Soldering Iron
- Soldering Wire and Oil
- Super Glue
- Needle-Nose Pliers
The Code
We used Platform IO to develop this one. Here's the main code for the Menubox. You need to install VS Code first and then install Platform IO extension. Then download the code and open in VS Code.
Click Erase Flash in Platform IO and then Upload Filesystem Image, then upload the main code. If everything goes right you should now be able to see the MenuBox wifi in your device. Connect to menu and enter 192.168.4.1 in your browser and you should see the menu web page. enter 192.168.4.1/dashboard.html and you will have access to admin panel. Username and password for the admin panel is "admin" for both.
Hardware

Electronics:
First we have the first regulator delivering a fixed 3.3v from the batteries to the 3.3pin of the esp32. The on/off switch goes between the battery positive and the regulator input.
For charging the batteries we use a tp4056 module as shown in the schematics. And we connect 100k ohm resistors to each battery pole and join their other ends together to D35 pin for the battery level indicator. The second regulators input goes to tp4056 input+ and tells the D13 pin if the charger is connected.
Casing:
I used 2mm black plexiglass for my casing. The .dxf file for the laser cutting in the attachments. Connect all the sides and the bottom section together with superglue and then put the electronics inside.
That's pretty much it for the hardware!
Downloads
Deeper Dive
There are some features that we've added to the firmware that need more explanation.
- Auto Deauthentication system: We figured that the number of connected users are limited in the esp32 so we added this feature to deauthenticate idle devices from the menu. This feature has a timer for each connected user and disconnects them in a few minutes.
- Battery Management: We used a very simple bms system as the project is in early stages. It doesn't have advanced protection circuit or auto cut off for low battery. The device only alarms you when battery is low and after a while the chip goes into deep sleep. I've added the batteries for emergencies or relocation but depending on their capacity they can support the device for days.
- Menu Management: We've added tabs and categories and sub-categories for businesses that have larger menus. You can edit everything even when you are not connected to the device and when you're finished, you can connect to device and save the changes. If more than one MenuBox is needed, you can export your menu from your MenuBox to other MenuBoxes.
- OS Support: We've tested the MenuBox's UI in IOS, Linux, Windows, Android, and Chrome. We have optimized the device to support any mainstream OS.
- Receiving Orders: There are three buttons on a received order: canceled, preparing and done. When the order is completed, it moves to the order history section.
- QR Code: The MenuBox system has a way to recognize which table the order came from. The 192.168.4.1 takes you to the general user menu. To determine which table placed the order, you need to enter 192.168.4.1?table="Table Number". For instance if you open http://192.168.4.1?table=6 you will place orders for the table number 6. I've exported the QR codes up to 20 tables and I uploaded them in the GitHub for your comfort. You can also change the table number from the general user menu manually.
- OTA Updates: As we are in an isolated system and the OTA updates need internet connection, you need to enter your wifi credentials and then check if any updates are available. If the updates were available you can proceed to updating the firmware. It's recommended that you keep the device intact while updating but if you didn't don't worry you can start over again.
There are some more features that we may look into them if this gets a lot of feedback:
- Multilingual Support: Other languages are easy to add to firmware we just didn't need it here.
- MenuBox Mesh Network: As you know, the esp32 has a limited wifi range and limited connected user numbers. for larger businesses we need to use a series of MenuBoxes in a mesh network so they can pass data through a larger field and support more users. If you have a large space but few customers, you can just use a wifi repeater. In our case we didn't need to use such system but it's definitely doable.
- Images: We are using the esp32's flash memory for the firmware. the esp32's flash memory is somewhere between 4 to 32 MB so there is not enough space for adding images but a there is a way we can use an external memory for images. Adding videos may seem a little bit excessive considering the esp32's processing and streaming capabilities