MKR1000 AP notes

Standard

Intro

I participated in a contest to receive a MKR1000 (read it out loud, MaKeR 1000), and they liked my idea! Woot, more things to play with. I did some investigating and now I’m doing a quick write up regarding mores on the Arduino 101/MKR1000’s soft AP so you don’t have to learn what I have the long way.

WiFi Access Point?!?!

Yes, it shows up as an access point, not a peer-to-peer point. When my phone connected to it, I ran a scan from Fing (https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=en) to see what I was up against.

Screenshot_2016-03-01-16-34-26.png

As you can see, everything looks good from here. The MKR1000 lives at .1, and any connected device is .100 by default. That is correct, only ONE device can successfully be connected at any given point. I think this is due to some code where the wifi is not fully capable of handling the IP addresses (like a proper DHCP server). I’ve been trying to tap into the DHCP or DNS server on the board, and I haven’t found anything yet, and this makes me think that the board has a hard-coded string to spit out to any device. “This is my SSID and info” and when connecting “this is your connection info” and these do not change, except the SSID. No password support as of this post.

Conclusion

It makes a proper access point! Sweet! Only one device can connect to it at a time though, and that device lives at .100. Understand these restrictions and you’re good to go! I’m still going to be working for a while on trying to redirect any website queries to the MKR1000’s web page for easier admin.

Notes

  • The source for the code I used as framework is: https://www.arduino.cc/en/Tutorial/Wifi101SimpleWebServerWiFi
  • The wifi chip in the MKR1000 and 101 are the same, so code is cross compatible.
  • I still have yet to find a battery library to query charging state or battery level. I love the LinkIt ONE for having that.
  • The power draw of the board itself has been said to be around 20ma. I can confirm it is about that, although with the wifi on, the board warms up. I haven’t done load tests on power usage under wifi.
  • I will have to do range tests with my Pringles Cantenna.
Advertisements

Running a Xadow OLED with an Arduino UNO

Standard

Background

I have a number of the Xadow modules, and the one that intrigued me the most, was the breakout. It converts the pins in the Xadow ribbon to wire-able connections. I wondered if I could use this to drive Xadow modules instead of drive non-Xadow units.

Wiring

Well, I have been doing some work on the Xadow OLED screen, and figured that would be a fun demo to start with. Looking at the Pinout of the wires, I determined that the voltage should be 3.3v.

Xadow_Breakout_01[1]I connected to the I2C connection in the middle, since the OLED screen was commanded over the I2C. I had 4 pins to connect. Using this diagram, I found where I needed to connect to:

ArduinoUno_R3_Pinouts[1]

SCL: A5

SDA: A4

V: 3.3v power

G: Ground

Code

I used the stock Xadow OLED “Hello World” demo. Absolutely no adjustments. None. And by golly, it worked.

wpid-20150507_125413.jpgThe pin spacing on the internal connections on the breakout board were not the standard spacing, so I had to hold it. I plan to solder some wire on for a permanent Arduino to Xadow connection in the near future.

Wrap up

Thanks all for reading this. I wanted to show off that this is possible, and I hope that I can work with Seeed to make a Xadow to breadboard breakout for much easier prototyping and bridging. This also brings up the major possibility of using an Arduino for the coding, and having the Xadow units be clean hardware extensions. You would only need to switch over to the Xadow mainboards when you needed the smaller size.

LinkIt ONE Lego Case Versions

Standard

I found I had collections of pictures from each of my Lego case versions. Since the internet loves lessons and OC, here you go!


Version 1:

20141025_173414

Shortcomings:

  • Plugging in anything was super hard, and don’t even think about the micro SD card
  • Reset button was hidden

Version 2:

20141112_20331620141112_20340520141112_20354220141112_203710Shortcomings:

  • Fragile
  • Held the board in by pinching it. This is not the best way of doing things
  • There was still a little too much movement of parts

Version 3:

Full build log link:

https://deltainnovativelabs.wordpress.com/2015/01/15/linkit-one-lego-case-v3/

20141118_22385220141118_223904

20150105_12412420141118_223922

20150105_12414020150105_12432120150105_12434920150105_12444220150105_12451820150105_12454220150105_12470120150105_12474020150105_12482720150105_12483920150105_124922

Shortcomings:

  • Shield probably won’t fit
  • People constantly try to play with the rollers thinking it’ll do something

LinkIt ONE RTC Example Code

Standard

When I was trying out all the different parts of the LinkIt, I wondered if there was an RTC onboard. Loovee told me there was, but that the example was not complete at this point in time.

I took this situation upon myself to make a complete example for anyone else out there who wants to use the LinkIt’s onboard RTC. In this discovery of things, I found that the RTC can be set back to 1/1/2004 if the battery and USB power supply are both disconnected. I made a loop in my code that will turn on the GPS to resync the GMT automatically in the background, the only thing that needs to happen is for the GPS to turn on. This is why in my more complex programs, I didn’t see the resetting behavior.

Here is a screenshot of what it looks like when the GPS has finally synced the time:

LDateTime working demo

And here is the code that runs the whole thing:

#include <LDateTime.h>
#include <LGPS.h>

datetimeInfo t;
unsigned int rtc;
int gps_on=0; //This is used to check if the GPS needs to be turned off

void setup() {
 Serial.begin(115200);
 }

void loop() {
 
 LDateTime.getTime(&t);
 LDateTime.getRtc(&rtc);
 
 Serial.print("Current GMT: ");
 Serial.print(t.mon);
 Serial.print("/");
 Serial.print(t.day);
 Serial.print("/");
 Serial.print(t.year);
 Serial.print(" ");
 Serial.print(t.hour);
 Serial.print(":");
 Serial.print(t.min);
 Serial.print(":");
 Serial.print(t.sec);
 
 Serial.print(" Seconds since 1/1/1970 GMT: ");
 Serial.println(rtc);
 
 //Turning on the GPS syncs up the RTC with the GPS time.
 //If the battery is pulled, the RTC goes back a couple years.

 //Turning on the GPS syncs up the RTC with the GPS time.
 //If the GPS is needed, t.year will be 2004. This will start this loop.
 if ((gps_on != 1) && (t.year < 2010))
 {
 Serial.println("Using GPS to sync GMT. Please wait...");
 LGPS.powerOn();
 gps_on = 1;
 }

 //If the GPS has synced the RTC, the year will be 2015 or greater.
 if ((gps_on == 1) && (t.year >= 2015))
 {
 LGPS.powerOff();
 Serial.println("Synced! Turning off GPS. Please wait...");
 gps_on = 0;
 }
 
 //Wait one second before getting new time.
 delay(1000);
 }

Seeed Studio LinkIt Core thoughts

Standard

I was directed to look at a new product from Seeed Studio, the LinkIt Core, an evolution of the LinkIt ONE. It is the essence of the ONE, but without the large layout.

LinkIt-A-Core-2

Wei from Seeed says that they want to market the Core towards wearables with this and was seeking suggestions on how to finish it up so that it was a killer device. Source URL (http://www.seeedstudio.com/blog/2015/01/05/smaller-linkit-one-for-wearable-prototype/)


I have a few a direct suggestions:

  1. Don’t drop any of the connectivity options. If anything, add more.
  2. The LinkIt is not a wearable device, don’t treat it like it is. It is a powerhouse on a kiddo playground. It’s very similar to an Intel Edison, and this is a bad thing.
  3. The LinkIt ONE is popular because it’s got plenty of options and it’s cheap (for those features). Don’t forget that with the Core.
  4. Adafruit has a head start with a $20 wearable controller, the FLORA (https://www.adafruit.com/products/659). Seeed cannot compete the LinkIt line with that ultra cheap controller:
    659-00

Continuing my thoughts on the Edison vs. Core, I want to elaborate. The Edison is very powerful and very connected. No cellular, so +1 for Seeed there. The Edison has a similar identity crisis problem of being too much for the playground. To make it useful, you have to have an expansion board. OK, so if we focus on these things for a minute, we might get somewhere. If Seeed were able to shrink the placement of the connectors, but still leave them on, they would be a step ahead of Intel. Seeed also has their Grove and Xadow connectors that I feel should come standard onboard.


Here’s my actual suggestions:

  • Shrink the pins so that they are all grouped together on a side. This should allow you to connect to a breadboard or  just have a smaller size overall.LinkIt Core_0
  • Have the antennas built in. Trade a little signal strength for being robust.
  • Have a model A/B with one having a bunch of sensors built in. This would really help in the all-in-one department:
    • 10DOF
    • Light
    • Sound
    • Temp/humidity
  • Move all the switches together and make them the same size. It would look a lot better.
  • Provide mounting holes. Users have done amazing cases for the Raspberry Pi because it was so easy to mount.
  • Provide bare wire connections for solar or DC power. The battery nice to have, so spend the little extra for the connectors to charge it easier.
  • Have an onboard LED for the status of the battery, that way it’s super easy to check on it.
  • Label the Grove connectors as clearly as you do on the Grove Shields.
  • Don’t take away any options, add to it. This is, and always should be the essence of an all in one unit.

-Sam