Wio LTE Cat 1 notes

Here’s my notes on the Wio LTE 4G GNSS Cat 1 https://www.seeedstudio.com/Wio-LTE-US-Version-4G-Cat-1-GNSS.html

  1. Use the SeeedJP hardware not the version from the wiki.
    This is the URL for the boards manager http://www.seeed.co.jp/package_SeeedJP_index.json
    The board is “Seeed Wio LTE Cat.1”
    The wiki version uses outdated libraries and you will have problems using most other STM libraries, including the RTC and low power libraries below.

  2. Use the SeeedJP library not the version in the wiki
    It is more extensive and works far better than the version listed in the wiki.

  3. For low power you will need both the RTC and low power libraries.

  4. There is some messing around with drivers to get both the DFU programming and USB debug output working smoothly. Basically when you put the Wio into DFU mode the USB serial goes away. Some serial terminals, including that built into Arduino IDE, can not handle that. So try other serial terminals until you find one that works.

  5. Add a delay in the setup() function to allow the USB serial to enumerate under windows. 2 seconds or less works.

  6. The JP board library does not have the battery voltage for some reason. I ended up editing
    C:\Users\xxxx\AppData\Local\Arduino15\packages\SeeedJP\hardware\stm32\1.7.0\variants\WIO_LTE\PeripheralPins.c and enabling the PB_0 analog input, then

#define PIN_BAT_C 16
pinMode(PIN_BAT_C, INPUT_ANALOG); // battery voltage
bat_volts_mv = (analogRead(PIN_BAT_C) * 1000) / 620;
// 4200 mV = charging/full charged
  1. The battery connector is the JST-SHR 1mm Be careful because there are some batteries available with this connector but most have the polarity reversed.

  2. Power consumption with the EC21 off is around 70 mA. Using low power idle or sleep it is 15-20 mA, and deepSleep is 1-2 mA. deepSleep is harder to wake from as some re-initialization is required. It might be possible to go lower than 1 mA with more optimization but that was good enough for me.

  3. WioLTE::GetTime has some fixed offsets for the return string from AT+CCLK which might need tweaking.

  4. In some power saving modes the systick stops so for timing you need to switch from millis() to your own function which uses the rtc. Because sooner or later you’ll end up with your loop function calling other functions at a specific time interval, which will get messed up if the systick stops during sleep.

Otherwise it is working fairly smoothly and the hardware works well. For a hardware revision I’d put the boot0 button on the top of the board and get rid of the EC21 key switch, and also have more i2c connectors and fewer analog, and get rid of the headphone/microphone circuit. A 2mm JST connector for the battery would be good to. Spending some time to get the DFU to work like the SAMD21 with both flash programming and USB serial debug would be nice too. I’m not sure if that is a difference in hardware which the STM32 cannot do.

  1. I had to add a direct AT command function to the library, because my network requires some configuration before opening a socket.
// send cmd and waits for OK
bool WioLTE::cmd(const char * cmd, const unsigned int timeout)
  bool ret = _AtSerial.WriteCommandAndReadResponse(cmd, "^OK$", timeout, NULL);
  return ret;

Wio.cmd("AT+QNVFW=\"/nv/item_files/modem/mmode/ue_usage_setting\",01", 1000);

Thanks for the info. Some observations and questions:

1-when I used the board manager version you referenced, I was able to compile & execute, but when switching from DFU mode to COM port mode, the device comes up “unrecognized”. I wound up using this: https://raw.githubusercontent.com/Seeed-Studio/Seeed_Platform/master/package_legacy_seeeduino_boards_index.json and selecting Wio Tracker LTE as the board.

2-I’ve been trying to send SMS text. Everything on the Wio LTE (US) side says it works (serial print messages), but no text messages go through. After talking with Twilio support, they say SMS was discontinued as of late 2021. Are you able to send SMS?

3-Is there any documentation for using the Wio LTE to send POST and GET requests? Documentation seems to be lacking unless you’ve found something somewhere.

Unfortunately, this BAT_C solution does not work for me.
I have purchased a Wio LTE EU Version v1.3- 4G, Cat.1, GNSS development module.
Main features are:
PCB - Wio LTE Cat.1
v1.3 03/30/2018
Proc.- STM32F405RGT6
Very useful universal development tool.
With (one exception “Check_battery.ino”), I have successfully tested with the example programs.
Since in my planned device a battery provides the power supply for the module,
it is essential to know the battery voltage.
Based on the wiring diagrams, this is done by setting the BAT_C value via the PB_0 (26) pin of the processor.

Many documentation and forum posts I have read and applied, but have not been able to get the BAT_C monitoring to work.
Also the example program “Check_battery” does not provide BAT_C data from pin 16 (“const int battery_adc_Pin = 16; // PB0”).
The STM32F405RGT6 pin 16 is not PB0 but PA2… PB0 is pin 26, but the example program does not work with pin 26 either.

My questions are:
Is there a direct connection between the common point (“BAT_C”) of resistors R45 and R49 and pin 26 of the processor (PCB0)?
If so, how can this connection be activate because I have not yet succeeded.
If there is no connection, what is the solution?
(Should I read the voltages of battery from the EC21E module with the AT+CBC command?)

…or where did I miss something?

Please help me.
Best regards.