Skip navigation
2016

 

The ESP8266 is a low-cost Wi-Fi chip with full TCP/IP stack and microcontroller capability produced by Shanghai-based Chinese manufacturer, Espressif Systems.The chip first came to the attention of western makers in August 2014 with the ESP-01 module, made by a third-party manufacturer, AI-Thinker. This small module allows microcontrollers to connect to a Wi-Fi network and make simple TCP/IP connections using Hayes-style commands. However, at the time there was almost no English-language documentation on the chip and the commands it accepted.The very low price and the fact that there were very few external components on the module which suggests that it could eventually be very inexpensive in volume, attracted many hackers to explore the module, chip, and the software on it, as well as to translate the Chinese documentation.

 

Source : WikiPedia (http://bit.ly/2cORmj0)
---------------------------------------------------------------------------------------------------
Links :
Sparkfun AT Guide : http://bit.ly/2cEzSbv

 

Sketch : http://bit.ly/2g7e2wl
Buy ESP8266 : http://amzn.to/2cZfUv8
Getting started with ESP8266 | AT Commands :http://bit.ly/2dBMjEq

 

********************************************************************
Subscribe YouTube : http://bit.ly/2gsIZ2g

 

Guys Subscribe to my channel for latest contents into your inbox.
Support me to keep going.

This blog documents some belated progress on my Star Trek themed Pi IoT design challenge entry. It is being put in the arduino area since that is where it is most useful.

I wanted to make the subsystems useful and built well enough to work reliably in their target environment, so this sensor array is built using a custom PCB.

The PCB did not arrive until well after the challenge was over, but it worked perfectly with no errors when I assembled it.

The card features an arduino pro micro which has a couple of quirks to be aware of:

  1. Sketches can defeat the USB so to get back into programming mode, you need to push the reset button twice, which reactivates the USB for 8 seconds, hopefully allowing you to get your software load started.
  2. I used the 3.3V variant of the pro micro so it could directly connect to the Bluetooth module.  This cpu runs at 8 MHz so you need to be sure the compiler is aware of the clock frequency, or all communications timing will be messed up. I installed the pro micro board type in the arduino IDE using this instructional note:

Other features of the card include an HC05 Bluetooth module, a Nokia 5110 LCD, a DHT11/22 temperature/humidity sensor a power switch, a reset switch, a solar panel connector and battery connector a recharging circuit, an I2C connector, a couple of input connectors (analog or digital).

Since I had to order a batch of 10 (for $10) I designed the card to have a little more general capability than just a remote temperature sensor.

The card has extra connectors for more sensors, but the main addition is an LCD connector, allowing it to be used as a stand-alone weather station.

Here is a video showing the system in action:

The android app was developed using App Inventor 2 from MIT.

 

Links to the Pi IoT Design Challenge site:

Pi IoT

Pi IoT - Smarter Spaces with Raspberry Pi 3: About This Challenge

 

Links to blogs about the Star Trek IoT Alcove project:

Pi IoT - Star Trek IoT Alcove - Blog 1

element14 and the photon torpedo - Pi IoT Blog 2

How many tablets to use? Pi IoT Blog 3

Starship Enocean Voyager

The Starship Enocean Voyager - Pi IoT Blog 4

LCARS (Library Computer Access Retrieval System){Star Trek} - Pi IoT Blog 5

LCARS Tablets

Henrietta LCARS

Alcove Transporter

Henrietta LCARS - Pi Iot Blog 6

arduino bluetooth weather station

I've been looking into designing my own Arduino programming and development board after seeing Ben Heck's episode. Apologies if this is in the wrong area.

 

So I made a quick Schematic in Eagle using the arduino schematic from the website, I've included support for the ATTiny85. I know this isn't the first time someone has done something like this, or with home pcb manufacture, just wanted to share some of the problems I've had with this design.

 

So here is the final result, I don't have any form during as I wasn't expecting it to work out. I haven't tested this board as there are a number of shorts, and I don't have a reset from the FTDI header.

Top

Underside

 

I Tried to keep the layout simple as my original plan was to build this on proto-board, but I only had multi core wire and trying to wire that up was a nightmare in itself. So I took the plunge and etched my own board.

I have read of three (at least most mentioned) way of etching a PCB using a laser printer 1) Photo Paper 2) Magazine Newspaper 3) Print n' Peel. So i tried all of them, one of the reasons why i think that the copper on my board appears slightly pitted, removing the toner with fine grit sandpaper. By far the worst method, Print n' Peel, with kept jamming in my printer. Photo Paper worked well, but not all of the traces transferred. Possibly my traces and fills are too close for home manufacture, I plan to have a DRC for eagle best suited for home manufacture. The method I finally used was the Magazine paper, this gave me the best results.

 

I used Ferric Chloride, the only enchant I can easily find in the UK without online ordering. This worked a lot quicker than I thought it would.

 

Thing I want to change for next time;

  • Better Design board, mainly clearances with the copper fill ground. This made it almost impossible with my equipment to solder without shorting to ground.
  • Maybe using Photoresist, I've heard a lot of good reviews of this method
  • Solder Mask - I think this is a must, I am no expert at soldering, and it will help to make my boards look more professional.
  • Drill Press - I too late found out that I don't own a dremel chuck small enough to fit my drill bits, so all of the hole on this board where done using a old school archimedean drill (not fun )
  • Two sided board.

 

I would encourage anyone who has been tempted to design their own boards, just do it. It can be stressful but worth it.

 

Ultimately I want to have a process with I well works best and have a small movable workbench to make custom PCB's and solder station. As my flat is fairly small and i don't have room for a full workbench. If manage to do this I will keep the community informed

I will develop these more when i find time. I've also got a plan for this basic idea including a Raspberry pi, but too early to announce that.

Ublox Neo-6m from E-Bay

Posted by ajens23 Nov 9, 2016

Ublox Neo-6M  from E-bay

Hi All,

 

(First time trying this so please forgive if it's in the wrong place/format/whatever)

 

Just received a couple of Ublox Neo-6M GPS boards from E-bay
and thought I would try a quick review for anyone interested.

Board: GY-GPS6MV2 with Ublox Neo-6M

Seller: Worldchips

Shipping: included

Price: 17USD(+/-)

DSCF1378r1.jpg

Apparently this board contains a voltage regulator (5 pin
chip to left of RX/TX pins) and can be powered off of a 5V supply. I am using
the 3.3V source from a Nearduino Uno (made from only the finest Chinesium).

The board appears to be well made. Soldering is good, antenna
connection is tight and assembled with a nice click/pop.

GPS TX is connected to digital pin 4 on Uno. Online
literature indicates that 3.3V will read as high. (It seems to work OK)

GPS RX is connected to a dropping resistor pair (4.7K + 10K) giving
3.4V. (It also seems to work OK)

 

Detailed directions here

http://www.ayomaonline.com/iot/gy-gps6mv2-neo6mv2-neo-6m-gps-module-with-arduino-usb-ttl/

 

VCC is attached to 3.3V supply of Uno.

GND is attached to Uno Gnd.

Serial monitor connection rate is set to 115200.

TX/RX rate between GPS and UNO is set to 9600. (note that the older GPS
chips were set to 4800bps)

 

Sketch is from TINYGPS examples on github: https://github.com/mikalhart/TinyGPS

When you first start up the GPS, it does take awhile before it starts
producing data. Be patient is can take up to 60 seconds to acquire lock.

It also does not work well indoors. I stuck mine on the window sill and
it was able to acquire a lock fairly quickly.

 

I checked my location using Google maps and it was within 6’ of true position.
I left the unit running for three hours and rechecked it. Indicated position
had drifted to about 15’-20’ from true position.

Not perfect, but for $17 I can probably live with it.

 

For those looking to delve a little deeper, here is information on the
NEMA data that the GPS can output. http://www.gpsinformation.org/dale/nmea.htm

 

DSCF1376r.jpg

 

Code from TinyGPS example

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.

   It requires the use of
SoftwareSerial, and assumes that you have a

   9600-baud serial GPS device
hooked up on pins 4(rx) and 3(tx).

*/

TinyGPS gps;

SoftwareSerial ss(4, 3);

static void smartdelay(unsigned long ms);

static void print_float(float val, float invalid, int len, int prec);

static void print_int(unsigned long val, unsigned long invalid, int
len);

static void print_date(TinyGPS &gps);

static void print_str(const char *str, int len);

void setup()

{

  Serial.begin(115200);

 

  Serial.print("Testing
TinyGPS library v. "); Serial.println(TinyGPS::library_version());

  Serial.println("by Mikal
Hart");

  Serial.println();

  Serial.println("Sats HDOP
Latitude  Longitude  Fix
Date       Time     Date Alt  
Course Speed Card  Distance Course
Card  Chars Sentences Checksum");

  Serial.println("          (deg)     (deg)    
Age                      Age  (m)  
--- from GPS ----  ---- to
London  ----  RX  
RX        Fail");


Serial.println("-------------------------------------------------------------------------------------------------------------------------------------");

 

  ss.begin(9600);

}

 

void loop()

{

  float flat, flon;

  unsigned long age, date, time,
chars = 0;

  unsigned short sentences = 0,
failed = 0;

  static const double LONDON_LAT
= 51.508131, LONDON_LON = -0.128002;

 

  print_int(gps.satellites(),
TinyGPS::GPS_INVALID_SATELLITES, 5);

  print_int(gps.hdop(),
TinyGPS::GPS_INVALID_HDOP, 5);

  gps.f_get_position(&flat,
&flon, &age);

  print_float(flat,
TinyGPS::GPS_INVALID_F_ANGLE, 10, 6);

  print_float(flon,
TinyGPS::GPS_INVALID_F_ANGLE, 11, 6);

  print_int(age,
TinyGPS::GPS_INVALID_AGE, 5);

  print_date(gps);

  print_float(gps.f_altitude(),
TinyGPS::GPS_INVALID_F_ALTITUDE, 7, 2);

  print_float(gps.f_course(),
TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);

  print_float(gps.f_speed_kmph(),
TinyGPS::GPS_INVALID_F_SPEED, 6, 2);

  print_str(gps.f_course() ==
TinyGPS::GPS_INVALID_F_ANGLE ? "*** " :
TinyGPS::cardinal(gps.f_course()), 6);

  print_int(flat ==
TinyGPS::GPS_INVALID_F_ANGLE ? 0xFFFFFFFF : (unsigned
long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000,
0xFFFFFFFF, 9);

  print_float(flat ==
TinyGPS::GPS_INVALID_F_ANGLE ? TinyGPS::GPS_INVALID_F_ANGLE :
TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON), TinyGPS::GPS_INVALID_F_ANGLE,
7, 2);

  print_str(flat ==
TinyGPS::GPS_INVALID_F_ANGLE ? "*** " :
TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

 

  gps.stats(&chars,
&sentences, &failed);

  print_int(chars, 0xFFFFFFFF,
6);

  print_int(sentences,
0xFFFFFFFF, 10);

  print_int(failed, 0xFFFFFFFF,
9);

  Serial.println();

 

  smartdelay(1000);

}

static void smartdelay(unsigned long ms)

{

  unsigned long start = millis();

  do

  {

    while (ss.available())

      gps.encode(ss.read());

  } while (millis() - start <
ms);

}

static void print_float(float val, float invalid, int len, int prec)

{

  if (val == invalid)

  {

    while (len-- > 1)

      Serial.print('*');

    Serial.print(' ');

  }

  else

  {

    Serial.print(val, prec);

    int vi = abs((int)val);

    int flen = prec + (val <
0.0 ? 2 : 1); // . and -

    flen += vi >= 1000 ? 4 :
vi >= 100 ? 3 : vi >= 10 ? 2 : 1;

    for (int i=flen; i<len;
++i)

      Serial.print(' ');

  }

  smartdelay(0);

}

static void print_int(unsigned long val, unsigned long invalid, int
len)

{

  char sz[32];

  if (val == invalid)

    strcpy(sz,
"*******");

  else

    sprintf(sz, "%ld",
val);

  sz[len] = 0;

  for (int i=strlen(sz);
i<len; ++i)

    sz[i] = ' ';

  if (len > 0)

    sz[len-1] = ' ';

  Serial.print(sz);

  smartdelay(0);

}

static void print_date(TinyGPS &gps)

{

  int year;

  byte month, day, hour, minute,
second, hundredths;

  unsigned long age;

  gps.crack_datetime(&year,
&month, &day, &hour, &minute, &second, &hundredths,
&age);

  if (age ==
TinyGPS::GPS_INVALID_AGE)

    Serial.print("**********
******** ");

  else

  {

    char sz[32];

    sprintf(sz,
"%02d/%02d/%02d %02d:%02d:%02d ",

        month, day, year, hour,
minute, second);

    Serial.print(sz);

  }

  print_int(age, TinyGPS::GPS_INVALID_AGE,
5);

  smartdelay(0);

}

static void print_str(const char *str, int len)

{

  int slen = strlen(str);

  for (int i=0; i<len; ++i)

    Serial.print(i<slen ?
str[i] : ' ');

  smartdelay(0);

}

Filter Blog

By date: By tag: