Teensy, tiny, Electric IMP Wifi SD card teams up with the Teensy 3.

Status
Not open for further replies.

t3andy

Well-known member
Teensy, tiny, Electric IMP Wifi SD card teams up with the Teensy 3.

Electric IMP makes a SD card (not 100% SD compatible) that has WiFi built into it and an ARM Cortex M3 with GPIO.

http://electricimp.com/
http://devwiki.electricimp.com/doku.php
https://www.sparkfun.com/tutorials/397

Sparkfun sells this special SD WiFi development card for $30 USD and a breakout board for $13 USD. The breakout card has a sot23, one-wire crypto chip (ATSH204) for user network identification.

Being a hardcore hacker, for my Teensy 3 application, I used the IMP SD card and soldered wires to it and installed the crypto chip on my board to save money but voided the product's warranty. Sparkfun now has a breakout board for this crypto chip for only $3.00 USD. I was able to use Sparkfun's ATSH204 one-wire bit banged library for crypto testing on a standard Arduino but this library code does not work on the Teensy 3 without some user timing modifcations.


Links:
https://www.sparkfun.com/products/11395
https://www.sparkfun.com/products/11400
https://www.sparkfun.com/products/11551


Be sure to read "all" the Electric IMP product comment and links and view the videos to have a better understanding of the Electric IMP.


My observations in hacking this tiny Electric IMP Wifi SD card to the Teensy 3.

#1. You need Google Chrome or FireFox for browser code server editing. (NO IE browser allowed, yet) :rolleyes:
All code editing/design is done on "their" servers!!! Their "C" like language is Squirrel???

#2. The Electric IMP does not compete with the expensive Arduino WiFI shield card ($85 USD).
You cannot make a web server. It does compete on price and user simplicity by providing I2C, Serial, GPIO, and SPI.

#3. You would need a IOS device (iPhone or iTouch) or compatible Android device to use the LCD screen as a "blink-up device" to load your wifi router settings on the IMP SD card for a wifi connection. This procedure is very cool. It takes only less than a minute to transfer your router settings to the Electric IMP card with no programming effort whatsoever. At no time, is your security information transferred to "their" servers! ??? I was able to go on-line and program an application within 5 minutes which is a totally amazing feat.

#4. Wifi needs plenty of ma. power and the Electric IMP is no exception. You need 400 ma. peak power max. to use it. You cannot connect it to the Teensy 3 which only has 100 ma.!!!! With special power routines, on the Electric IMP, the SD card and M3 ARM chip can idle at a few uamps for battery portable applications.

#5. Interfacing the ARM Electric IMP with the Teensy 3 creates no problems since they are both 3.3 VDC devices. :cool:

Attached picture of my homemade Electric IMP breakout board attached to my T3 BaseBoard for the Teensy 3. My application uses the Electric IMP WiFi link and serial port for an inexpensive “network time” for the Teensy 3.

Enjoy ...

View attachment Electric_IMP_Pic.pdf
 
Last edited:
Another WiFi module option

#2. The Electric IMP does not compete with the expensive Arduino WiFI shield card ($85 USD).

If you are willing to connect a few wires, you can directly use the SPI-interface WiFi module ZeroG ZG2100MC for $30. This is apparently the same module used on the Arduino WiFi board, so with the Arduino shield it seems like you pay $55 for some wiring convenience (?)

http://www.cutedigi.com/wireless/wi...interface-to-8-bit-mcu-zg2100mc-wishield.html
 
Arduino shield it seems like you pay $55 for some wiring convenience (?)

There is only one problem with using that chip. You would be tying up all the resources of the Teensy 3. That is why the Arduino team made a "standalone" WiFi shield with a 32 bit processor on-board and all the firmware which took "man years" to create. With the Electric IMP, with their on-board ARM Cortex 3 and RTOS, the Wifi overhead is taken care of along with the Electric IMP"s cloud servers.
 
@JBeale

WiFi module ZeroG ZG2100MC for $30. This is apparently the same module used on the Arduino WiFi board.

What search engine are U using? :confused:

The Arduino team would NEVER EVER put a competitor's chip (MicroChip ZG2100MC) on their Arduino (Atmel) Wifi shield !!!!

The Arduino WiFi Shield allows an Arduino board to connect to the internet using the
802.11 wireless specification (WiFi). It is based on the HDG104 Wireless LAN 802.11b/g
System in-Package. An Atmega 32UC3 provides a network (IP) stack capable of both TCP and UDP.
Use the WiFI library to write sketches which connect to the internet using the shield. :cool:
 
Example code I used on the Electric IMP for my Teensy 3 network time

Code:
// Send Network Time
// Configure the time zone as UTC (Coordinated Universal Time) time offset.
// Some examples:
//      Eastern Time Zone (New York)    -5
//      Central Time Zone (Chicago)     -6
//      Mountain Time Zone (Phoenix)    -7
//      Pacific Time Zone (Los Angeles) -8
//
// Generally for the US, Daylight Savings Time (DST) starts on the 2nd Sunday
// in March and ends on the 1st Sunday in November at 2:00 am local time.
// This event causes the clock to "Spring" forward in March; from 1:59:59
// => 3:00:00 (23 hour day). The clock will "Fall" back in November; from
// 1:59:59 => 1:00:00 (25 hour day). For the purpose of this program, DST is
// simply set to "1" when it's in effect, and "0" when it's not. 
//----------------------------------------------------------------------------

local TIMEZONE = -5;                        // US Eastern Time
local DST = 0;                              // Daylight Savings Time is false

// Variables for time storage
local pm, colon = false;                    // PM indicator and blinking colon HH:MM
local t, d;                                 // Time and date variables
local minute = 60, second = 60;             // Illegal values so display updates 1st time thru


// Variable to represent LED state
ledState <- 0;
 
// Variable to represent LED inhibit state
inhibit <- 0;


// Setup a serial port using default Sparkfun setting of 9600N81
local serialcomm = hardware.uart12;            // PIN1 = Tx; PIN2 = Rx
serialcomm.configure(9600, 8, PARITY_NONE, 1, NO_CTSRTS);


// Function called once every second
function Send_Time_Date() {


    while ((t = time()) == second);         // Synchronize seconds
    second = t; // GMT secs
    d = date(t + ((TIMEZONE + DST) * 60 * 60), 1); // from local time to GMT secs
    if (d.min != minute) {                  // Update time once every minute
     //server.log(format("Sync Time OK "));   
     //server.log(format(" minute = %d", minute));
     //server.log(format(" t = %d", t));
     //server.log(format(" d = %d", t));     
     serialcomm.write("T"+t); // Unix GMT UTC seconds     
     blink(); // toggles LED on IMP breakout once a minute
     minute = d.min;        //  updated
    }

   

//    server.show(format("WiFi %d dBm", imp.rssi()));

    // Schedule the next update
    imp.wakeup(0.90, Send_Time_Date);            // Not a whole lot to do here
}


// blink function called on Network time update
function blink()
{
    // Check if we've been switched off
    if(inhibit)
    {
        // Blinking inhibited, turn off the LED
        hardware.pin8.write(0);
    }
    else
    {
        // Change state
        ledState = ledState?0:1;
 
        // Reflect state to the pin
        hardware.pin8.write(ledState);
 
        // Schedule the next state change
        //imp.wakeup(0.1, blink);
    }
}

// input class for LED control channel
class input extends InputPort
{
  name = "LED control"
  type = "number"
 
  function set(value)
  {
      if(value == 0)
      {
          // 0 = Inhibit LED operation
          inhibit = 1;
      }
      else
      {
          // 1 = Enable LED operation
          inhibit = 0;
          blink();
      }
  }
}


// Configure pin 8 as an open drain output with internal pull up
hardware.pin8.configure(DIGITAL_OUT_OD_PULLUP);

// Register with the server
imp.configure("Network Time Clock Master R1", [], []);

// Display all the geeky details (in log window tab)
server.log(format("impeeID %s", hardware.getimpeeid()));
server.log(format("Voltage %f", hardware.voltage()));
server.log(format("MAC address %s", imp.getmacaddress()));
server.log(format("WiFi %d dBm", imp.rssi()));


// Send serial time / date
Send_Time_Date();
 
I like to add that using the Electric IMP Wifi SD card for a low cost network time is OK BUT there is a flaw. The IMP (ARM + Wifi SD card), when first powered-up collects the network server time and relays it to the IMP ARM processor RTC. A time drift of at least 7 seconds in several days was un-acceptable and we used a darlington TIP120 to trick and turn the IMP off and on again every hour for precision network time. (+-2 secs max) Since the IMP does not have a precision crystal TCXO oscillator, then this was our solution to fix this major problem. The other solution is to wait for another major firmware update in Feb./13
 
Last edited:
t3andy,

Could the IMP handle high quality audio? I would like to wirelessly stream music from a "base station" to a teensy 3.x and output it via the Audio Shield.

Thanks
 
Last edited:
Status
Not open for further replies.
Back
Top