Voice calls possible? And battery required always?

Hi
I have been asked to create a simple "emergency" phone. I have been looking at all kinds of products to put this together. Both for arduino and raspberry pi (or other sbc).

Now that the MRKGSM1400 has launched I see that the library contains something about making voice calls, but what about actually transmitting voice from a microphone and playing back incoming voice via a speaker? Is this possible with this board?
I see that the SARAU201 has some pins for audio as "4-wire I2S digital audio interface" can the MCU use that or do I need extra hardware or is it not possible at all with this arduino?

Any suggestions are welcome :slight_smile:

If I can use the MKRGSM1400 does it always require a battery to use the GSM modem? What if I supply it with from a very beefy psu on VIN?

Again, any help would be greatly appreciated

Hi,

I wonder the same thing. Are there anyone in this forum who knows how MKR1400 works regarding speech/voice and knows if it is possible to have actual voiceCall for both sending/receiving?

Please see this project for a tutorial on outgoing voice calls and wave file playback: Arduino MKR GSM 1400 and I2S - Arduino Project Hub

Unfortunately is it not possible to receive income voice data over I2S.

I'd highly recommend a lipo battery, you could also try to use a beefy power supply with capacitors to handle the current spikes.

Looking at the schematic (https://content.arduino.cc/assets/MKRGSM1400-schematic.pdf), the modem has the i2s receive pin connected but not the i2s transmit pin. So the modem has the capability, but it was never wired up to the processor?

I'll admit, I'm a bit bummed this fact wasn't on the product page. I'm doing a rotary phone conversion, and would have selected a different board.

Is it possible to use an AT command on the SARA-U201 board to change the I2S_RXD GPIO pin to work as an I2S transmit pin? I'm still trying to translate their AT documentation (https://www.u-blox.com/sites/default/files/u-blox-CEL_ATCommands_(UBX-13002752).pdf) myself.

mzocher:
Looking at the schematic (https://content.arduino.cc/assets/MKRGSM1400-schematic.pdf), the modem has the i2s receive pin connected but not the i2s transmit pin. So the modem has the capability, but it was never wired up to the processor?

I'll admit, I'm a bit bummed this fact wasn't on the product page. I'm doing a rotary phone conversion, and would have selected a different board.

Is it possible to use an AT command on the SARA-U201 board to change the I2S_RXD GPIO pin to work as an I2S transmit pin? I'm still trying to translate their AT documentation (https://www.u-blox.com/sites/default/files/u-blox-CEL_ATCommands_(UBX-13002752).pdf) myself.

I am now trying to do a rotary phone conversion with and for my daughter and had the MKR GSM1400 in mind. I am glad I found this thread, but a bit disappointed that the MKR GSM does not cut it. I want the small form factor for our project. How did you solve this issue? Did they enable the possibility to receive calls in later revisions of the board? If not, is there another make that does provide a microcontroller for sending and receiving audio?

Hi,
Pense que podia realizar llamadas y meti la pata comprando dos (2) tarjetas MKR 1400 :frowning:
Que molesto estoy y descepcionado, ya que en las librerias parecia poder establecer un enlace de voz…

Yes, it is possible. It cost me a day to find out how...I would like to use my donated time for the forum:
The trick is to establish a I2S (not I2C) connection between the SAMD and a I2C device (a microphone). Now the modem has to link into this connection, read the data and send the I2S data as voice.

It's just one line: I2S.read();

Here you go:

Lib:

#include <I2S.h>
GSMVoiceCall vcs;

Setup:


I2S.begin(I2S_PHILIPS_MODE, 16000, 32);
vcs.hangCall();
  vcs.enableI2SInput(16000);
  vcs.ready();

Loop:

switch (vcs.getvoiceCallStatus()) {
    case IDLE_CALL: // Nothing is happening
      break;
    case RECEIVINGCALL: // Yes! Someone is calling us
      Serial.println("RECEIVING CALL");
      // Retrieve the calling number
      vcs.retrieveCallingNumber(numtel, 20);
      // Print the calling number
      Serial.print("Number:");
      Serial.println(numtel);
      // Answer the call, establish the call
      vcs.answerCall();
      break;
    case TALKING:  // In this case the call would be established
      Serial.println("TALKING");
      while (vcs.getvoiceCallStatus() == TALKING)
      {
        I2S.read(); // THIS LINE IS IT. THATS ALL, FOLKS!
      }
      vcs.hangCall();
      break;
  }

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.