PDA

View Full Version : Teensy, tiny, Electric IMP Wifi SD card teams up with the Teensy 3.



t3andy
12-10-2012, 10:38 PM
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 ...

85

JBeale
12-10-2012, 11:39 PM
#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/wifi/wifi-module-with-spi-interface-to-8-bit-mcu-zg2100mc-wishield.html

t3andy
12-11-2012, 01:43 AM
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.

t3andy
12-11-2012, 10:51 AM
@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:

JBeale
12-11-2012, 02:32 PM
Apparently I was misled.

ZG2100MC from ZeroG.

This is a WiFi module with a SPI interface that even a 8 bit processor like ATMEG328 can drive. This module comes with a PCB antenna, and is used on the popular Arduino WiFi shield.
- from http://www.cutedigi.com/wireless/wifi/wifi-module-with-spi-interface-to-8-bit-mcu-zg2100mc-wishield.html

t3andy
12-11-2012, 05:10 PM
All you had to do is go here ... http://arduino.cc/en/Main/ArduinoWiFiShield
The WiFi metal module package, on the Arduino WiFi shield, "looks" about same as the ZG2100MC but the vendors are different? :cool:

t3andy
12-12-2012, 01:06 AM
BTW ... Adafruit now carries the IMP and IMP breakout board.:D

t3andy
12-12-2012, 04:12 PM
// 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();

t3andy
01-31-2013, 05:50 PM
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

chadder_all
05-05-2014, 12:59 AM
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