Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.Sign up
The LTE Shield simply connects to the Arduino's (host board) pins and allows it to communicate with the SIM7000 module and temperature sensor and is compatible with the Arduino Uno, Mega, and Leonardo and most other 5V microcontroller boards available if used as a standalone module (not as a "shield"). You can view the full schematic here but the pinouts are shown below:
The complete setup needed to get this shield to work properly should look something like the picture below, with a SIM card and antenna connected:
NOTE: A LiPo battery is required for proper operation, otherwise you will run into rebooting or instability issues. It is also VERY important that your LiPo is wired up with the correct polarity! The red wire should be on the left when you insert it into the JST connector, and the board is also marked with a "+" sign.
The LTE Shield is powered by the 5V rail on the Arduino (or externally). This means that as long as your Arduino has adequate power the shield will be happy as well! However, if you don't plan on plugging the shield into an Arduino board you can use it as a standalone module (i.e., if you are using an Arduino Micro or other board that isn't in the Arduino Uno form factor) by connecting the 5V power rail and GND to the microcontroller, and connecting the appropriate logic pins explained in the next section (namely, TX and RX pins).
- GND - Common ground for all logic and power
- 3.3V - 3.3V from the Arduino's regulator. Use this just as you would on the Arduino!
- 5V/LOGIC - This 5V rail from the Arduino charges the LiPo battery which powers the SIM7000 and also sets the logic voltage for the I2C and level shifting. If you are using a 3.3V microcontroller, connect 3.3V to the shield's "5V" pin (please see the section below).
- VBAT - This grants access to the LiPo battery voltage and is normally not connected to anything on the Arduino so you are free to use it as you wish! It's also the same as the input voltage of the SIM7000 module. If you're thinking about measuring and monitoring this voltage, check out the "b" command in the demo tutorial which measures the voltage and displays the battery percentage!
- VIN - This pin is simply connected to the VIN pin on the Arduino. You can power the Arduino as you normally would with 7-12V on this pin.
Logic Voltage Selection
3.3V Arduino Form-Factor Boards
By default the logic voltage is set to 5V but if you have, say, a 3.3V microcontroller this can be changed by cutting the existing trace on the back of the board as shown below with an X-ACTO knife or razor blade and bridging the other side of the jumper with solder. You can then supply a logic voltage anywhere from 1.8V and 5.5V across the VCC/GND header. This is perfect if you want to interface the board with a lower-voltage microcontroller! (Note: If you don't want to do the dirty work of cutting traces and soldering, see the next section for a quick fix)
However, it should be noted that supplying your own logic voltage will also switch the temperature sensor to that new logic voltage, but since the temperature sensor operates from 2.7-5.5V you won't be able to use the temperature sensor if the voltage is too low. However, you can still communicate with the SIM7000 down to 1.8V as long as it has an adequate power supply on the 5V pin (see previous section).
External Host Board Wiring
If you're wiring up the shield to an external microcontroller board, then you can use a quick and dirty trick to avoid having to set the solder jumper above. All you have to do is make the following key connections (MCU --> Shield):
- GND --> GND
- 3.3V --> 5V (this will make the shield operate on 3.3V instead of 5V)
- 3.3V TX --> Shield RX (D11)
- 3.3V RX --> Shield TX (D10)
- GPIO --> Shield pin D6 (PWRKEY pin)
- SCL/SDA if you want to use the temperature sensor
- Plug in 3.7V LiPo battery into the shield (see notes below!)
Note: If your host board has LiPo battery charging on it (like the Adafruit ESP32 HUZZAH), connect the LiPo to the host board (not the shield) so that it charges via USB, then connect the host board's BAT pin (battery voltage) to the VBAT pin on the shield. This way the battery can charge safely while still operating at 3.3V!
On the other hand, if your host board doesn't have LiPo charging circuitry (like the DOIT ESP32 dev board) then you would have to make the modification described in the previous section by cutting the jumper trace and soldering the other end. However, if you don't need the LiPo battery to charge, just keep it plugged into the shield and you can avoid the modifications, but again it won't charge!
Yet another case is if you don't want a battery and all and want to power the shield directly. In this case, make sure you have a capable voltage supply that can handle current spikes (recommended voltage is around 3.3V-4.2V, no more than 4.3V). Again, you cannot rely on a 5V source powering the shield via the shield's 5V pin because it expects a LiPo battery to be present. So the wiring would look like this with a strong power supply on VBAT:
- GND --> GND
- 3.3V-4.2V power supply --> Shield VBAT pin
- Your logic voltage (3.3V, 5V, etc) --> 5V (this will make the shield operate on that logic voltage)
- MCU TX --> Shield RX (D11)
- MCU RX --> Shield TX (D10)
- GPIO --> Shield pin D6 (PWRKEY pin)
- SCL/SDA if you want to use the temperature sensor
The logic pins are the same as the host Arduino board but some are reserved for the SIM7000 module so you should not use them for other purposes:
- D6 - This pin is connected to the SIM7000's "power key" (PWRKEY) pin. Pulsing it LOW for at least 72ms then setting it back to HIGH will turn on the SIM7000 if it was OFF previously. Note that there is a 4.2s lag before the green power LED will indicate that the module is on after you have initiated the turn-on pulse. To turn it OFF from being ON you have to pulse it for at least 1.2s, after which the power LED will lag about 1.3s to turn off.
- D7 - This pin is connected to the SIM7000's RESET pin and can be used to reset the module by pulsing the pin low for 50-500ms with 100ms being a typical value. Note that this pin should only be used in an emergency, according to the datasheet, and pulsing it when the module is powered off will be of no effect.
- D8 - This is the UART Data Terminal Ready (DTR) pin which can be used in conjunction with "AT+CSCLK" to wake the module out of sleep mode for low-power applications. For most users and general testing this pin may not be needed but it's there in case you do. To connect the pin, bridge the solder jumper with a little solder.
- D9 - This is the Ring Indicator (UI) pin for the UART and it can be used as an interrupt to see if, for example, the SIM7000 is calling ET phone home! However, in order to use this function you need to use the command "AT+CFGRI=1". More documentation can be found in Section 3.3.2 in the SIM7000 Hardware Design manual
- D10 - This is the SIM7000's TX (transmit) pin, which should be the Arduino's (or host board's) RX (receive) pin. In the Arduino IDE just make sure you're straight about which one is which! This pin is compatible for software serial RX on the Arduino Uno, Mega, and Leonardo.
- D11 - This is the SIM7000's RX pin which is the Arduino's TX pin. Both TX and RX are needed to communicate with the SIM7000!
- D12 - This pin is not normally connected but can be tied to the temperature sensor's ALERT pin by bridging the solder jumper on the backside of the board. This pin can produce an interrupt when the temperature reaches a set threshold via I2C. To connect it, simply bridge the jumper on the board with solder. You can view the the full MCP9808 datasheet here. Since ALERT is open-drain output, the LTE shield includes a 10k pull-up resistor on the ALERT pin to pull it normally high; when the even occurs the interrupt will pull it low. Note that the ALERT pin can be configured as active-high instead of active-low, but active-low should is more conventional and should work for all practical purposes.
- SDA - This is the I2C data pin which is used to communicate with the temperature sensor and this pin is the same as the analog pin A4 on the Arduino Uno
- SCL - This is the I2C clock pin and is the same as analog pin A5 on the Arduino Uno
Software Serial Note
Software serial is used in place of hardware serial for cases in which there is only a single hardware serial used for debugging (like the Arduino Uno) or when hardware serial is otherwise not available. Software serial emulates hardware serial by using two digital pins and interrupts. However, there are limitations to using software serial, including a lower maximum baud rate (57600 on Arduino Uno) which means that you will need to set the default 115200 baud rate of the SIM7000 module to a lower value in order to communicate reliably using software serial. Moreover, on some Arduino boards (like Arduino Mega and Leonardo) software serial is only available on certain pins for RX. Fortunately the LTE shield (version 4 and later) is designed to use RX on pin 10 for compatibility with these boards. You can find more information about the library here.
Hardware Serial Note
If you are using hardware serial you will need to wire up TX and RX of the hardware serial port on the microcontroller to the RX/TX pins on the shield (D11/D10). On Arduino Leonardo the hardware serial port is pins 0 and 1 and therefore you will have to wire up the shield externally. Also, if the microcontroller has multiple hardware serial ports, please keep them straight! For example, using the Arduino Leonardo "Serial" is reserved for the USB interface (serial monitor) whereas you should use "Serial1" for the actual communication with the shield. So use "Serial" to print out your debug messages but use "Serial1" for executing AT commands, etc.
- Battery Connector - This connector is meant for standard single-cell, 3.7V LiPo batteries with a 2mm JST connector, like the ones found at Sparkfun and Adafruit. The battery is needed to prevent the module from rebooting under high-current modes like 2G and 2.5G where the module might constantly reboot due to voltage drops from the current spikes. However, if you really want to avoid the LiPo battery then you might be able to get away without one by taking a large capacitor (preferably 330uF or larger, but it's not rocket science) and placing it across VBAT and GND (with the negative end on GND of course). Then you can set the module to only use LTE CAT-M1 or NB-IoT (even lower power) with the AT+CNMP and AT+CMNB commands. Note that if used, the battery should be at least 500mAH capacity (1AH or more is recommended) because the charging circuitry is set to charge the battery at 500mA and also because it needs to be able to handle larger current spikes.
- Micro USB - The micro USB connector is for communication and debugging for the SIM7000 module.
- SIM Card Holder - This SIM card holder accepts micro SIM cards only! Most SIM cards come in a standard SIM size but also allow you to break out a smaller size. Break out the intermediate size (you should still have a "nano" size inside the "micro" one you're using). Insert the SIM card into the holder as shown below while the Arduino is off, trying not to touch the metal connections with your fingers!
- LTE/GNSS Antenna - On the right side of the board there are two standard uFL connectors for the LTE antenna and GPS antenna. Both of these antennas are actually combined in a single dual LTE/GPS antenna that is included in the purchase of the shield. This is absolutely essential for proper operation so go ahead and snap the antenna on!
The antenna also has 3M adhesive on the back if in case you want to stick it onto something.
- Done Charging LED - This green LED lights up if the battery if fully-charged, or in the case where you don't have a battery connected, is normally on when you power the shield. This LED indicates that the voltage being supplied to the module is around 4.2V. If you don't have the battery plugged in you might see this LED start flashing, especially during data transmission. This is because it's meant to charge a LiPo battery and if it's not there, the voltage dipping because of current draw spikes from the cellular module can trick it into thinking that the battery is not fully-charged. This is by no means a matter of concern unless the module starts rebooting, in which case you'll want to attach a LiPo battery. In fact, it's actually quite cool because you can see when the module is drawing more current!
- SIM7000 Power - This green LED (labeled "PWR") indicates the power state of the SIM7000 module. Just because this LED is off doesn't mean that the module doesn't have power, because you can command the SIM7000 to shut down. If you want to disable this LED you can cut the jumper trace next to it on the board using a razor blade.
- Network Status - This blue LED indicates the cellular network connection status. Per the SIM7000 Hardware Design Document, 64ms ON/800ms OFF indicates no connection, 64ms ON/3000ms OFF indicates registered to network, 64ms ON/300ms OFF indicates transmission of data, and OFF indicates power-off or power-saving mode. If you really don't want this LED (maybe for power-saving reasons) you can disable it with "AT+CNETLIGHT=0" or re-enable it with "AT+CNETLIGHT=1".
Voice & Audio
The SIM7000 shield does not have voice, but check out the Botletics SIM7500 LTE CAT-1 shield if you do want voice features!