Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 10 of 10

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

  1. #1
    Senior Member
    Join Date
    Nov 2012
    Posts
    412

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

    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)
    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.

    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 ...

    Electric_IMP_Pic.pdf
    Last edited by t3andy; 12-11-2012 at 03:15 AM. Reason: wording

  2. #2
    Senior Member
    Join Date
    Oct 2012
    Location
    Portland OR
    Posts
    706

    Another WiFi module option

    Quote Originally Posted by t3andy View Post
    #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/wif...-wishield.html

  3. #3
    Senior Member
    Join Date
    Nov 2012
    Posts
    412
    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.

  4. #4
    Senior Member
    Join Date
    Nov 2012
    Posts
    412
    @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?

    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.

  5. #5
    Senior Member
    Join Date
    Oct 2012
    Location
    Portland OR
    Posts
    706
    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/wif...-wishield.html

  6. #6
    Senior Member
    Join Date
    Nov 2012
    Posts
    412
    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?

  7. #7
    Senior Member
    Join Date
    Nov 2012
    Posts
    412
    BTW ... Adafruit now carries the IMP and IMP breakout board.

  8. #8
    Senior Member
    Join Date
    Nov 2012
    Posts
    412

    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();

  9. #9
    Senior Member
    Join Date
    Nov 2012
    Posts
    412
    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 by t3andy; 01-31-2013 at 05:58 PM.

  10. #10
    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 by chadder_all; 05-05-2014 at 01:01 AM.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •