Skip to main content

Working With The impC001

This information is preliminary and subject to change

The impC001 is Electric Imp’s first cellular product, providing LTE connectivity as an alternative to the WiFi and Ethernet offered by other imps. The impC001 offers LTE category 1 support, in addition to either 2G or 3G fallback, and can make use of the current high-bandwidth LTE networks worldwide.

The impC001 has no internal WiFi radio, but it is capable of driving an external Ethernet RMII PHY and an external SDIO WiFi radio. However, support for Ethernet and WiFi is not yet present in impOS™.

While impOS currently features an integrated BLE stack, this is not yet included in the version of the impOS for the impC001. Once added, along with additional BLE hardware, the impC001 will be able to provide BLE functionality (advertising, sniffing, GATT serving).

The impC001 module

The impC001 ships in a card form-factor compatible with NGFF M2 connectors.

This Guide will help you begin developing application code for the impC001. It covers the changes that have been made to the imp API to support cellular operation. Some previously deprecated imp API methods have been removed from the impC001’s build of impOS, and these are documented here to for customers who are looking to modify existing application code for the new platform.

Cellular communications introduces a number of behavioral changes to the imp’s established state diagram, and these are covered here too. In addition, this document provides guidance on those circumstances in which the impC001 may not behave the same as earlier imps because of, for example, the extra latency that cellular communications introduces.

The impC001 Breakout Board

For more information on the impC001 Breakout Board, please see the reference design page.

Activating The impC001

Cellular Network Access

Unlike other imp-based hardware, the impC001 connects to the Internet via LTE cellular networks. Each impC001 has an on-board, pre-activated eSIM with global roaming capabilities (limited by the bands supported by the actual cellular module on the impC001).

At this point, we are providing cellular connectivity free of charge to customers who are helping us by evaluating the impC001, but expect that data pricing for commercial use will be around $0.05/MB.

We expect customers to use the evaluation impC001 in their application in a similar manner to how they would use it in production, in order to get the most realistic usage data to inform development of the commercial module.

Device Activation

Development devices based on the impC001 are added to your Electric Imp account and impCentral™ in the usual way: with the Electric Imp mobile app (iOS or Android) and BlinkUp™.

impCloud Selection

Variants of each impC001 are available which will connect, respectively, to the Electric Imp impCloud™ hosted on Amazon Web Services (AWS) or the impCloud hosted on Microsoft Azure, but not to both. If you already have an Electric Imp account, it will be tied to a specific impCloud, so make sure you choose a development impC001 bound to the same impCloud.

BlinkUp Type

Please select Cellular as your connection method on the SETUP screen, and make sure you do not enable the Use advanced settings switch on the same screen.

Initial Connection

Typically, the impC001 will take 30 seconds or longer to boot the modem and connect to the cellular network (there is a 120-second timeout in place, see Connection Performance). If you are using the impC001 for the first time, or in a new country, it may take longer. The BlinkUp LED will stop flashing after 180 seconds which means status is not visible after this point.

Please be patient, especially on first connect, and allow the device several minutes for a first connection. If the first connection does not work, press the reset button on the impC001 Breakout Board and let the module try to connect again (the app will have timed out, but the device should still appear in impCentral when it is online).

If you cannot get the device to connect, try moving the device to an area with better signal.

BlinkUp Progress LED Patterns

The impC001’s BlinkUp LED status codes are similar to those on other imps, but include some special, cellular-specific patterns too.

Ready for activation  500ms 500ms Repeat
BlinkUp Successful  For three seconds
Waiting for modem  500ms 500ms 500ms 250ms Repeat
Waiting for SIM  500ms 500ms 500ms 250ms 500ms 250ms 500ms 250ms Repeat
Registering with a cell  500ms 500ms 500ms 250ms 250ms 250ms 500ms Repeat
Cell Registration Denied  500ms 500ms 500ms 500ms 500ms 500ms Repeat
Connecting via PPP  500ms 500ms 500ms 250ms Repeat
Checking PPP connection  500ms 500ms 500ms 250ms 250ms 250ms 250ms 250ms 500ms Repeat
Connected to server  500ms 500ms Repeat
Device lost connection  500ms 500ms Repeat
Device deliberately offline  500ms 250ms 250ms 250ms Repeat
Updating impOS™  Continuous for duration of update
Normal operation  LED not illuminated

Finding Your impC001-based Device In impCentral

When your impC001 connects successfully, it will be listed as an unassigned device in the Electric Imp’s online tool, impCentral, and you can assign it to a Product’s Development Device Group. To find the device, click impCentral’s Device icon (impCentral Devices Menu Icon) and then click My Development Devices. You can now assign the device to a Product/Development Device Group, and begin developing your application in the code editor.

Developing Applications With The impC001

This section provides technical guidance that will help you while you work with the impC001 and develop application code to run on it.

impC001 Identification

If you expect your code to run across multiple imp types and you need to choose code paths accordingly, call — this returns a Squirrel meta object with the property type, which is is a string containing the imp module name:

if ( == "impC001") {
    // Code running on impC001...
} else {
    // Code flow for other imps...

Cellular Band Support

Preliminary impC001 samples are available in three versions:

Variant LTE 3G Fallback 2G Fallback
impC001-eur Bands 1, 3, 8, 20, 28 UMTS bands 1, 8 900 and 1800MHz
impC001-us Bands 2, 4, 5, 12 UMTS bands 5, 4, 2 N/A
impC001-aus Bands 3, 5, 8, 28 UMTS bands 1, 5, 8 N/A

Both versions feature two u.FL antenna connectors: a primary antenna, which is used for transmit and receive, and an optional secondary antenna which can be used for RX diversity (LTE only).

imp API Methods Available To The impC001

The following imp API objects, classes and/or methods are currently implemented in the impC001 version of impOS:

imp API Methods That Are Not Yet Implemented

The following imp API objects, classes and/or methods are not implemented in the impC001 version of impOS, but we expect to add them in due course:

The following imp API objects, classes and/or methods are not implemented in the impC001 version of impOS and, because they relate to WiFi usage, may not be added in future:

imp API Methods That Have Been Removed

We are discontinuing support for the following previously deprecated API methods. These calls will not be available to impC001-hosted code and will trigger runtime errors if included. If you are working to adapt existing code to the impC001, you will need to remove these calls. These methods will continue to be available on imp001 through imp005.

  • imp.configure()
  • imp.getssid()
  • imp.getbssid()
  • imp.getrssi()
  • imp.getchannel()
  • imp.getethernetspeed()
  • imp.getmacaddress()
  • imp.rssi()

Note Almost all of the network-related methods listed above can be replaced with, which has been extended to support the impC001 (see below). The exception is imp.getmacaddress() as the impC001 MAC address is not provided by Currently, the only way to obtain the MAC address of an impC001 is to remove the 'c001' prefix from its device ID; what remains is the MAC address.

Getting Network Information

The imp API method is the recommended means for acquiring network information from within Squirrel. The method returns network information as a table. One of this table’s keys is interface — its value is an array of one or more tables for each of the available network interfaces. In the case of the impC001, the interface array contains an entry which is a table with the following keys and values:

Key Type Notes
type String "cell"
manufacturer String The modem manufacturer, eg. "Cinterion"
model String The modem model number, eg. "ELS61-E"
imei String The imp’s International Mobile Equipment Identity number
imsi String The imp’s International Mobile Subscriber Identity number
swver String Modem software revision, eg. "REVISION 01.000"

In addition, the interface table will contain the following state-specific keys:

Key Type imp State When Data Available Notes
voltage Integer Connecting, Connected Modem voltage in mV, eg. 3807
rssi Integer Connected The signal strength, eg. -78
cellinfo String Connected Cellular connection information, eg. "4G,6300,20,10,10,FDD,262,02,BF75,0345103,350,90,-94,-7,CONN"

For more information on the data contained in the cellinfo string, which varies according to the connected network type (2G, 3G, 4G etc), please see Cinterion ELS61-E AT Command Set, section 8.11.2.

Pin Mux

A list of the impC001’s GPIO pins and buses is available here.

Analog IO

While the impC001 has DAC facilities, these are not made available via hardware.fixedfrequencydac in the current release.


The UARTs provided by the impC001 initially have a minimum speed of 1526 baud and a theoretical maximum of 12.5 Mbaud, though it is likely that you will encounter signal integrity problems at this level of speed.


The impC001 has a single USB bus accessed via pins A and B and controlled in Squirrel using hardware.usbAB.

Using Cellular Communications

In many respects, cellular communications are transparent to the application: you use the familiar imp API methods to communicate with the server and the device’s agent.

Connection Performance

Connecting to a cellular network takes longer than connecting to a WiFi network or via Ethernet. This is solely due to the nature of cellular networks, and is not something that can improved in hardware or software. To accommodate the increased connection time, and the latency of cellular connections, impOS’ key timeouts have been increased:

Timeout impC001 Value Notes
Cellular start-up timeout 120s Time allowed for the modem to power on and register on a network
Squirrel Hold Off 60s The time after which Squirrel will be started even if there is no connection yet
BlinkUp Status LED 180s The time after which BlinkUp will be disabled and the
Overall connect timeout 30s Time allowed from IP being available to the establishment of a server connection
DNS resolution retry interval 30s Time allowed for a DNS resolution retry if no response was received
Connect-or-snooze timeout 600s The SUSPEND_ON_ERROR send timeout policy
Upgrade network join and connect timeout 240s
Upgrade inactivity timeout 60s

Note These values do not apply to other imps (see Network State Diagram).

Performance When Connected

Though LTE cat 1 is capable of 10Mbit/s down and 5Mbit/s up, all impC001 cellular communications go via PPP over USB. We have observed speeds of up to 1Mbit/s in both directions.

Moving To A Commercial Product

Moving from concept to a commercial product is easy: use our no-cost reference designs to create your customized product hardware with an M2 connector. The impC001 module can be ordered in volume by contacting us, and is PTCRB “end device” certified. It plugs into the M2 connector on your customized hardware, which also gives you the flexibility to configure your product with the upcoming lower-cost impC002 (LTE-Cat M/NB-IoT) unit.

For the development of your own proof-of-concept or prototype design, we have a pack of suitable M2 connectors and mounting posts available from the Electric Imp Store.