Close
0%
0%

ESP32 WiPhone

The WiPhone project is an open source mobile IP phone. WiPhone is intended to be hackable, modular, cheap, and open, while remaining usable.

Public Chat
Similar projects worth following

If you'd like to buy a WiPhone later, or want the fastest way to follow along with our progress, please join our email group:

Join the project email list for:

  • First in line once WiPhone is ready to buy.
  • Project updates and plans go out to the email list first.
  • Super top secret handshake.


Description

WiPhone Prototype
WiPhone Prototype

The WiPhone project is an open source phone capable of making free calls through the internet. It makes calls over WiFi, without the need for a cellular radio.

It's also an open source, self-contained Arduino development platform. It comes in a nice package, with a battery, power supply, and on/off circuitry, unlike most other dev boards. Once your project is done, instead of an eyesore of tangled wires, it's discreet and visually appealing.

The phone is intended to be hackable, modular, cheap, and open, while remaining usable by everyday people.

Motivation

Modern smartphones are more and more a tool we don't own, we're only allowed to carry around. One that serves the interests of those who allow you to buy it in return for the tentacles that get inserted into your life. You don't own it, it owns you. It tracks you, serves you ads, and sucks away your time with mindless dopamine hits. We want a phone that's firmly in our control, optimized for the convenience of the owner, not various corporate boards, ad and tracking networks and government organizations.

We want a phone that reverses that, and puts us back in control. Maybe even fights back a little. Full control of the firmware to allow us to repurpose the phone into whatever application we want. Hardware with accessible I/O and an easy disassembly process.

Benefits

  • Completely free calling, as long as you can set up an account and install a SIP/VoIP app on the devices you need to call.
  • International calls are same as local ones. No restrictions based on borders or calling plans.
  • Don’t need to deal with another country’s SIM cards or radio compatibility when traveling.
  • Keep the same address all over the world.
  • Set up your kid with a phone that lets them contact you without the distractions of a smartphone.
  • Give a pre-configured phone to an elderly relation set up with just the numbers they need.
  • Keep a spare in a bag in case your primary phone gets broken or lost. Don’t need to maintain a service plan for the backup.
  • Avoid being tracked by cell tower triangulation or IMSI catching (Stingray).
  • Load your own firmware to implement different calling protocols or completely different use-cases. The firmware is unlocked and freely modifiable.
  • Commercial phone interchange services are available if you need to call someone on a regular phone. Typical plans cost about $25/year (US or Europe providers).

Planned Features

  • polished enough normal (non-hackers) are happy to use it as an everyday phone
  • open source
  • can call other WiPhones using the internet
  • can call smartphones or computers (using an app installed on the device being called)
  • wireless firmware updates
  • Arduino compatible software
  • Espressif ESP32 processor
  • roughly 120 x 65 x 12mm
  • 320 x 240 (2.4“) LCD screen
  • spare I/O broken out to user-accessible header

JPEG Image - 117.99 kB - 10/26/2018 at 13:47

Preview
Download

JPEG Image - 120.24 kB - 10/19/2018 at 03:40

Preview
Download

JPEG Image - 191.43 kB - 10/07/2018 at 09:12

Preview
Download

JPEG Image - 94.48 kB - 10/07/2018 at 09:12

Preview
Download

JPEG Image - 141.24 kB - 10/07/2018 at 09:12

Preview
Download

View all 47 files

  • GUI, Software and Electronics Improvements

    stupid10/19/2018 at 03:44 0 comments

    We've been dialing a lot of things in on the motherboard. The biggest noticeable change is the GUI. It looks much more polished now. We're almost ready to start carrying the phone around for daily use.

    For complete details, read the full post on the WiPhone blog:

    https://wiphone.io/blogs/blog/2018-10-18-wiphone-progress-update-gui-ee-and-sw-improvements

    WiPhone Boot Screen
    WiPhone Boot Screen


  • Daughter Boards

    stupid10/08/2018 at 10:10 0 comments

    What's an electronics project without an attempt at modularity? As part of our project goals, we want a phone that can be easily modified and expanded, but still remains something you could actually use every day. How do we balance those requirements?

    For complete details, read the full post on the WiPhone blog:

    https://wiphone.io/blogs/blog/daughter-boards


  • Capacitive Button Panel Testing

    stupid09/21/2018 at 09:38 0 comments

    Original post on the WiPhone blog: https://wiphone.io/blogs/blog/testing-a-capacitive-button-panel

    We wanted to see if it was possible to eliminate the physical buttons on the front of the phone by using a capacitive button panel.

    It has a few advantages:

    • At this point in time, it's what people expect (it looks good)
    • If we do it right, it could be easy to let people swap out a PCB with a different button layout, opening up the ability to adapt the hardware to different purposes.
    • Potentially longer design life, due to no moving parts

    Disadvantages:

    • Somewhat risky. Physical button panel examples are everywhere, but you don't generally see capacitive button panels as dense as we need. There's probably a reason for that, so we expect to have issues with crosstalk/inadvertent triggering of neighboring buttons.

    We made a test panel, shown above, that has buttons of approximately the size and pitch we need for the phone. Overall, the test panel works OK. It is, in fact, easy to accidentally trigger neighboring buttons. But it was interesting enough we'll go ahead and make another panel using our current button layout and see how it performs in the phone.

  • Prototype 2 Assembly Video

    stupid09/18/2018 at 12:56 0 comments

    We wanted to post an assembly video showing how the mechanical parts of the phone go together. It's already a pretty simple process, and should get even easier once we have a single-piece keypad.

    At this stage it's still more of a prototye model than a production unit. The main purpose of this version is to give us something to actually use. Real world use is important for finding all the little issues that show up once a design moves from pictures on a screen to reality. Once we have a list of those we will evaluate what's possible to fix, and incorporate the improvements into the next version.

    We've been playing around with the phone for a few weeks, mostly debugging electronics and software. Once we get the bug situation under control we will start carrying the phones around and collecting improvement opportunities for UI, software, electronics, and hardware.

  • All Components Are Here

    stupid09/07/2018 at 09:26 0 comments

    We have all the components on hand now.

    WiPhone Components
    WiPhone Components

    Parts List:

    Back Panel - FR4, cut to the correct profile
    Motherboard - 4 layers, hand assembled
    Frame - Aluminum, CNC cut and clear anodized
    Front Panel - 2mm thick polycarbonate, CNC cut
    Screws - M2x4, 4x
    ON/OFF Button - Silicone, artisinal hand carved (OK, actually hand-snipped with a pair if dikes)
    Antenna - Whip antenna, we may change to chip or trace antenna after we do some signal strength optimization
    Keypad - Hard plastic, CNC cut. Eventually this will likely be a single cast silicone part.
    Battery - LiPo pouch.

    As the perceptive among you may have noticed, the parts have been assembled and our project pic updated. Later we will post more info, but for now we can say that everything fits with only minor issues. And the overall build looks and feels great, especially given how few revisions there have been.

    Shell
    Shell, Partially Assembled
    Buttons

  • GUI Screenshots

    stupid08/18/2018 at 01:16 3 comments

    Some shots of the current state of the user interface. Implemented so far:

    • make a call
    • receive a call
    • address book
    • wifi scanning
    • wifi credentials management
    • SIP account management
    • boot screen

  • Populated Motherboard

    stupid08/17/2018 at 01:30 0 comments

    Now with wires and little square things all over it:

    Populated WiPhone Motherboard
    Populated WiPhone Motherboard

  • LCD Graphics Driver Benchmarking and the Facts of Life

    stupid08/16/2018 at 00:42 1 comment

    We recognize a few universal truths: Biological life… errr… finds a way. Every software program expands until it can check email, or dies trying. All online discussions of sufficient length end in references to Nazis and utter disdain for opposing viewpoints. And all screen-bearing hardware evolves to kill bad guys at the maximum screen rate possible. So, bowing to the evolutionary pressures that are the natural order of things, we’ve started benchmarking and optimizing our graphics performance. Also, we were really tired of debugging hardware and wanted a fun break for a bit.

    Background

    Originally we were thinking to put a much smaller TFT display in the WiPhone. Something like 1.4" or 1.8" display. These screens are usually driven by an ST7735 driver over SPI.

    Small Screens
    Small Screens

    Trouble is, nobody likes phones with tiny screens like that. They’re ugly. And killing bad guys on a tiny screen is unsatisfying. Luckily, we quickly abandoned the smaller screens and switched to a 2.4 inch screen with 320×240 pixels. But the ESP32 isn’t blessed with an abundance of extra I/O, so we are stuck with the lower bandwidth SPI bus now needing to push roughly 4x the original data out to the screen.

    As you can see in our first demo video, the graphics library that came as example code with our screen was struggling to refresh even a basic phone interface. Each widget is noticeably re-drawn.

    Most phones with a screen this size use a parallel 8-bit bus (a.k.a. “8080 series MCU interface”). But given the limited pins on the ESP32 and all the other things a phone needs to do, something needed to give.

    Benchmarking

    Luckily, we found a beautiful and fast library called TFT_eSPI by Github user Bodmer, which is optimized for ESP32 chips. Our ST7789 driver IC was not yet supported, but an initialization routine and a pull request later we were pleasantly surprised by a 3-12x speedup!

    Here we run Xark’s benchmark with our bigger screen using TFT_eSPI library, as well as the original library we developed:

    NVIDIA, eat your heart out.

  • SN7326 Keypad

    stupid08/15/2018 at 12:52 0 comments

    This is a simple keypad to test the SN7326 I2C keypad controller in the 25 button configuration we wanted for the WiPhone. Posting in the hopes it might be useful to someone else.

    Hosted on Gitlab: SN7326 25 Button Breakout

    Overview (from the SN7326 datasheet)

    The SN7326 is a 64 key, key-scan controller. It offloads the burden of keyboard scanning from the host processor.
    The SN7326 supports keypad matrix of up to 8×8. Key press and release events are encoded into a byte format and loaded into a key event register for retrieval by the host processor. The SN7326 integrates a debounce function which rejects false or transient key switch activities.
    The interrupt output (INT) is used to signify if there are any keypad activities. To minimize power, the SN7326 automatically enters a low power standby mode when there is no keypad, I/O, or host activity.

    Features:

    • 2.4V to 5.5V operation
    • I2C interface
    • multi-key press detection
    • 0.3μA (typ.) standby current
    • 4x4mm QFN-24 package

    The design is in PADS. Everything is there to fabricate it yourself. BOM, gerbers, PDF schematic + PADS schematic and layout.

    Pinout:
    Pin 1: GND
    Pin 2: VDD
    Pin 3: SDA
    Pin 4: SCL
    Pin 5: LED/RST
    Pin 6: INT

    25 Button SN7326 Keypad
    25 Button SN7326 Keypad

  • Motherboard Arrived!

    stupid08/14/2018 at 11:44 0 comments

    The alpha motherboard arrived. Here’s some quick shots of the front/back + one with the LCD mounted just for fun:

    WiPhone Motherboard
    WiPhone Motherboard

View all 14 project logs

Enjoy this project?

Share

Discussions

Renne wrote 11/11/2018 at 13:07 point

Which SIP-stack/library does WiPhone use?

  Are you sure? yes | no

stupid wrote 11/12/2018 at 02:06 point

We wrote our own. There doesn't appear to be any existing available libraries that met our needs.

  Are you sure? yes | no

Renne wrote 11/13/2018 at 11:13 point

SIP will be implemented in the next release of the ESP32-ADF (https://github.com/espressif/esp-adf/issues/81#issuecomment-438226430).

  Are you sure? yes | no

stupid wrote 11/14/2018 at 00:41 point

Thanks for the heads-up about the upcoming SIP library. (replied to wrong message since hackaday.io doesn't allow 3rd level replies)

  Are you sure? yes | no

virusleader324 wrote 11/08/2018 at 00:58 point

maybe you can add some app?

  Are you sure? yes | no

stupid wrote 11/08/2018 at 01:25 point

We are adding apps. We actually just finished making a video about the first app we did and we will post it to youtube soon.

We're still deciding the final implementation. Would you prefer apps to be done in something like MicroPython, or in the C/C++ (Arduino) code?

  Are you sure? yes | no

Renne wrote 11/07/2018 at 12:30 point

Wireless charging would be great, too.

  Are you sure? yes | no

stupid wrote 11/08/2018 at 01:28 point

That might be possible through a daughter board. I think there's a pin on the connector. I'll need to check if the circuit supports pushing current back into the battery.

  Are you sure? yes | no

Renne wrote 11/07/2018 at 10:22 point

CardDAV support would be great to synchronize contacts with the cloud.

  Are you sure? yes | no

Renne wrote 11/07/2018 at 10:18 point

I also suggest to use Invensense ICS-43432 or Knowles SPH0645LM4H-B I2S-MEMS microphones - one for voice and a second one on backside top for noise/echo cancellation. The ESP32 supports PDM audio output. You just need a 20 kHz low-pass filter per channel and MOSFETs  for the speakers. The ESP32 has 2x I2S stereo. This allows up to 4 microphones (e.g. voice + echo/noise cancellation microphones via I2S + stereo headset microphone via I2S codec) and 4 output channels (e.g. stereo headphones and stereo speakers via PDM).

  Are you sure? yes | no

Renne wrote 11/07/2018 at 09:48 point

I suggest a ground plane antenna like the RaspberryPi Zero uses (https://www.raspberrypi.org/magpi/pi-zero-w-wireless-antenna-design/).

  Are you sure? yes | no

stupid wrote 11/08/2018 at 01:21 point

Do you know what the performance of that style antenna is compared to something like a chip antenna? Right now we're using a little flex whip antenna, and we chose it because in our testing it was a nice balance of range/cost. We tested a trace antenna and the result was somewhat mediocre.

That particular Pi Zero antenna looks like it has some IP restrictions... not sure if Proant (the company who licensed it to Raspberry Pi) would be interested in giving a random open source project with no marketing a free license. Without looking at the details of Proant's IP protection and licensing scheme I'm guessing if we did do a ground plane antenna we would need to use a different design.

It would be nice to be able to eliminate the extra component, though.

  Are you sure? yes | no

Contagious Intellect wrote 10/02/2018 at 13:47 point

You could add a audio jack on the phone

  Are you sure? yes | no

Andriy Makukha wrote 10/06/2018 at 03:14 point

Great news! WiPhone already has it. You can see it on the prototype assembly video starting at 2:03.

  Are you sure? yes | no

fabian wrote 09/18/2018 at 16:02 point

One idea for design. please add small hole for phone rope. for  example https://www.bazaargadgets.com/image/cache/catalog/products/lights/flashlight/JETBeamHighQualityflashlightlanyardhand-ropewithropebuckle-SKU091134-2-800x800.jpg

second idea to add big arc over top screen for this http://elbrus.com.pl/media/products/25949a8d640c7674e6e67be767bb67d9/images/thumbnail/big_Karabinek_Skylotec_clipZ-SC_elbruss_b_tla.png?lm=1515237871

arc from left corner top to right corner can be stored antena, what You thing about this idea?

  Are you sure? yes | no

Christian Berger wrote 09/16/2018 at 12:26 point

I'd add a simple 40x25 character terminal, for example according to the old "Videotex" standards which were used for Bildschirmtext, Prestel or Minitel. That should be simple enough to implement (in fact the simplest version only needs to understand one "command") while enabling a world of applications.

  Are you sure? yes | no

fabian wrote 09/18/2018 at 16:05 point

USB host  for normal keyboard, router , computer will be better. And normal ssh+terminal 

https://github.com/search?q=ssh+esp I dont know how good it is

  Are you sure? yes | no

stupid wrote 09/18/2018 at 16:54 point

SSH (or even telnet) could be pretty useful. Are there any existing libraries for an SSH client on ESP32? I'm not seeing any in a quick search.

  Are you sure? yes | no

fabian wrote 09/15/2018 at 18:16 point

please add mesh and lora communication 

(text,small image,gpg)

  Are you sure? yes | no

Christian Berger wrote 09/16/2018 at 16:34 point

Lora doesn't have the bandwidth for speech.

  Are you sure? yes | no

stupid wrote 09/18/2018 at 13:21 point

But it does have the bandwidth for text messages, which is probably what Fabian is interested in.

(For what it's worth, I'd imagine LoRa also has the bandwidth to send Videotex  or whatever other pre-historic text encoded graphic formats get you off)

In any case, we have it on good authority that IP over Avian Carrier is the hottest upcoming protocol and as soon as we get our core functionality working, mesh, LoRa, and Videotex may all need to wait for the IPoAC implementation to go online before we have time to address them.

  Are you sure? yes | no

fabian wrote 09/18/2018 at 15:43 point

look at gotenna.com/ or https://www.sonnetlabs.com/ but open source and open protocol (for example AX25). Great communicator for emergency and for small data.

here is project https://hackaday.io/project/27791-esp32-lora-oled-module

on aliexpres or gearbest is many esp32+Lora, obly put it together

  Are you sure? yes | no

James Hall wrote 09/21/2018 at 15:15 point

I wonder if there are modes where Codec2 speech would fit. There's a version of that which works in 700bps. Doing something like a gotenna would be great too. Simple text messages, including sending things like GPS coordinates, over distance would be handy sometimes. There are some TTGO branded dev boards that combine a ESP32 with a LORA chip and stuff for a 18650 lithium battery that might work just as well for that though.

  Are you sure? yes | no

utf_8x wrote 09/10/2018 at 08:52 point

Is there enough spare GPIO available to hook up a GSM modem (such as this https://www.sparkfun.com/products/retired/9533)?

  Are you sure? yes | no

stupid wrote 09/10/2018 at 15:11 point

Maybe, depending on your use case.

We are shooting for 10+ pins broke out to the back of the phone. But if you want to do voice calls you may run into issues getting the audio signals where they need to go since a lot of those cell modules expect to directly control the speaker and mic.

I'll post a pinout once we have the next revision ready.

  Are you sure? yes | no

utf_8x wrote 09/11/2018 at 16:22 point

I hear you... Maybe some sort of a soft/hard switch for the mic and speaker... It would also be cool co connect a Iridium compatible module to this to be able to send text messages from anywhere in the world... 10 GPIOs sounds like a reasonable number for something like that.

  Are you sure? yes | no

James Hall wrote 09/06/2018 at 14:21 point

The new picture of the project is extremely attractive. How are you doing the buttons? Are those 3D printed?

  Are you sure? yes | no

stupid wrote 09/06/2018 at 14:37 point

Thanks! I did the mechanical design and model making.

Buttons are CNC + a really light coat of spray paint.

We have a pretty cool video we just put together of the assembly process that's about to go out to the mailing list if mailchimp ever finally decides we aren't Nigerian princes.

Looks like you're already on the email list, but if anyone else wants to see the video (and other early-access stuff) feel free to join. The form is at the top of the project details.

  Are you sure? yes | no

Neo wrote 08/26/2018 at 19:50 point

Neat project, the hardware is looking really nice. I'm curious about the actual VoIP part: how does it work, what protocols are used, what kind of server does it require? Is it based on some libraries or existing code, or is it an all new implementation?

  Are you sure? yes | no

stupid wrote 08/28/2018 at 01:06 point

SIP is the protocol used for VoIP. There are a bunch of commercial services that can act as a server, including some free-to-use ones if you don't need a phone number.

It should be possible to run Asterisk if you want to run your own server. We haven't done this yet so I don't have details.

We are not currently using an existing SIP library.

  Are you sure? yes | no

otstoypuksa wrote 08/26/2018 at 07:05 point

SN7326 seems to be missing from my common chip suppliers. Where should I look for it? Are here any more readily-available alternatives? Thanks! 

  Are you sure? yes | no

stupid wrote 08/26/2018 at 15:44 point

I believe you can get them on Aliexpress.
As to readily available alternatives, it's hard to say without knowing what you are trying to do. I don't know of any drop in replacements if that's what you're asking.

  Are you sure? yes | no

Ramon Schepers wrote 08/24/2018 at 23:30 point

Love the design alot, but have you thought of using a tft with capacitive touch instead of tact buttons? And what is the idle power consumption like in milliamps? I see you plan to include bare bone games too, are thise inline compiled, or sideloaded over wifi?

  Are you sure? yes | no

stupid wrote 08/25/2018 at 00:44 point

We've played around with a few capacitive touch concepts and something other than physical buttons may still make it into the final version, but buttons won out so far because they are cheap and we felt that interacting with physical buttons would be easier for beginners to deal with. Like, if you want to adapt the hardware to something else it's simple to do so.  We do have a capacitive button panel in prototyping (not a touch screen, but actual capacitive buttons instead of tactile ones). I'm not sure if we can make it work with the tiny button sizes we need, but it would result in a nice flat screen if we can.

Power consumption: Haven't gotten to that yet. We are still debugging the hardware on the first integrated phone and after that is done we should know. It will likely be driven by what's achievable in the ESP32. From reading around, it has the capability to enter a low power mode where it periodically wakes to check in with the access point, so I'm hoping we'll be able to have our cake and eat it too.

Games: We will likely do something, but who know what, yet. Andriy keeps putting games on the menu screens, I think because he wants to implement them instead of all this boring debugging and system bring-up :). But for now we are spending our time getting the basic functionality up and working.

  Are you sure? yes | no

Renne wrote 11/07/2018 at 12:38 point

Using the capacitive touch button function of the ESP32 saves a lot of mechanical work in mass production. It is possible to etch the symbols of the keys into the copper pads and use the substrate of the PCB as light-spreader by drilling conical blind holes for the LEDs in the backside of the PCB.

  Are you sure? yes | no

stupid wrote 11/08/2018 at 01:42 point

@Renne, we tested a capacitive button panel, and for the main keypad it doesn't look like it could work. The buttons are too close together and it's too easy to press multiple buttons at the same time. Might be OK for a single button somewhere.

If you look at other capacitive button panels, they usually need a grid size of something like 10mmx10mm. but that's much too large for our application.

This is the initial testing we did: https://hackaday.io/project/159811/log/153139-capacitive-button-panel-testing

Later we also made a panel the same size as our keypad (not posted yet), and that one sort of worked, but as I mentioned, it was much too easy to press multiple buttons. Maybe with some more engineering time we could tune the circuit to get it working, but right now we need to concentrate on getting the core functionality working well.

  Are you sure? yes | no

prosto wrote 08/24/2018 at 15:45 point

look at gotenna , You project + lora = sucess

  Are you sure? yes | no

nate.damen wrote 08/21/2018 at 22:52 point

This is awesome! I'll definitely be digging in deep into this 

  Are you sure? yes | no

Arsenijs wrote 08/16/2018 at 09:57 point

Hello from one open-source phone to another =)

  Are you sure? yes | no

stupid wrote 08/16/2018 at 14:43 point

We should schedule a call to congratulate each other directly on such great projects :).

  Are you sure? yes | no

fabian wrote 09/18/2018 at 15:57 point

interesting, imagine ssh + terminal and usb C host for normal keyboard.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates