ESP8266 Weather Station: Shipping From a Fulfillment Center in China

Do you like this post? A regular project like the PlaneSpotter Color takes many hours of my free time to develop and maintain. Would you offer me a beer for my hard work if I was your neighbour? Modern technology called teleportation makes it easy to send me a beer. Just click here. Thank you!

Ever since the launch of the ESP8266 Weather Station in the US Amazon store I had to ship two different versions of this product. The customized box containing the Weather Station with the NodeMCU, a OLED display, a DHT11 and some cables was only available through Amazon in the US. To the rest of the world I could only ship the less customized starter kit, sometimes even delivered by three separate packages. I am very happy that I found a fulfillment service in China which allows me to store and ship the nice starter kit to you wherever in the world you live!

In the past 20 months I sold several hundreds of WeatherStations to more than 25 countries, but this wasn’t the product I had in mind. As a big fan of the Minimal Viable Product (MVP) to start lean was the perfect route to go. Create a product that worked, even if there was a lot of room for improvement. A type of service called drop shipping allowed me to create and ship this first MVP to many of you all over the world. It allowed me to learn that there was a lot of interest in the product and I had to solve all these little problems during the process. But after a while I decided to take it to the next level. I found a manufacturer in China who would assemble the components and put them into a pretty and useful plastic box. Another big step was then to sell these starter kits through the Fulfilled-by-Amazon Service (FBA) and again I learned a lot since I had bought wrong USB cables without knowing (read more about this lesson here).

Now I have taken another big step: with SendFromChina.com (SFC) I have found a service which allows me to store the starter kits until a buyer orders one of them from my shop. Then the fulfillment service from SFC will ship the starter kit from China directly to you, to destinations all over the world This solves all the problems I had with the drop shipping service I used before: often one of the four components was out of stock or the supplier decided to ship the four components in three separate packages, since they were stored in three different warehouses! Too much trouble for a relatively simple product!

Looking back I still think these were the right steps: build a MVP, proof that it works and continue to improve the product or service and reduce costs and time to manage it. The first shop was only a Paypal button and it took me about 25 minutes to process one order. On the Amazon platform everything is made for me by Amazon, I just have to ship the goods to the Amazon Warehouses and from time to time answer user questions. I still have to get acquainted to the new fulfillment service in China since they offer a lot of options, e.g. various shipment providers etc.

Could I raise your interest? Your ESP8266 WeatherStation is waiting on a shelf in Dongguan for you too!
Order now!

Posted by squix78

13 comments

    • Hi James

      Thank you for your interest in the WeatherStation. Which version of the Arduino IDE on which system are you using? Are you using the latest version of the Arduino IDE? Did you try to run a simple example like File > examples > ESP8266 > Blink?

      I need a bit more information to help you…

      -Dani

      • Dani:
        Thanks for your help and rapid reply. I had a previous ESP8266 project and there was a conflict. I had to delete a folder with the earlier package. Now, I have a compile error:

        WeatherStation_JGS:91: error: ‘drawFrame1’ was not declared in this scope

        bool (*frames[])(SSD1306 *display, SSD1306UiState* state, int x, int y) = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

        ^

        WeatherStation_JGS:91: error: ‘drawFrame2’ was not declared in this scope

        bool (*frames[])(SSD1306 *display, SSD1306UiState* state, int x, int y) = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

        ^

        WeatherStation_JGS:91: error: ‘drawFrame3’ was not declared in this scope

        bool (*frames[])(SSD1306 *display, SSD1306UiState* state, int x, int y) = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

        ^

        WeatherStation_JGS:91: error: ‘drawFrame4’ was not declared in this scope

        bool (*frames[])(SSD1306 *display, SSD1306UiState* state, int x, int y) = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

        ^

        WeatherStation_JGS:91: error: ‘drawFrame5’ was not declared in this scope

        bool (*frames[])(SSD1306 *display, SSD1306UiState* state, int x, int y) = { drawFrame1, drawFrame2, drawFrame3, drawFrame4, drawFrame5 };

        ^

        C:\Users\jsmirnio\Documents\Arduino\WeatherStation_JGS\WeatherStation_JGS.ino: In function ‘void setup()’:

        WeatherStation_JGS:156: error: ‘updateData’ was not declared in this scope

        updateData(&display);

        ^

        WeatherStation_JGS:158: error: ‘setReadyForWeatherUpdate’ was not declared in this scope

        ticker.attach(UPDATE_INTERVAL_SECS, setReadyForWeatherUpdate);

        ^

        C:\Users\jsmirnio\Documents\Arduino\WeatherStation_JGS\WeatherStation_JGS.ino: In function ‘void loop()’:

        WeatherStation_JGS:165: error: ‘updateData’ was not declared in this scope

        updateData(&display);

        ^

        C:\Users\jsmirnio\Documents\Arduino\WeatherStation_JGS\WeatherStation_JGS.ino: In function ‘void updateData(SSD1306*)’:

        WeatherStation_JGS:180: error: ‘drawProgress’ was not declared in this scope

        drawProgress(display, 10, “Updating time…”);

        ^

        C:\Users\jsmirnio\Documents\Arduino\WeatherStation_JGS\WeatherStation_JGS.ino: In function ‘bool drawFrame4(SSD1306*, SSD1306UiState*, int, int)’:

        WeatherStation_JGS:247: error: ‘drawForecast’ was not declared in this scope

        drawForecast(display, x, y, 0);

        ^

        exit status 1
        ‘drawFrame1’ was not declared in this scope

        I hope you can help with this – this is using the Weather station code from the Example folder.

        Thanks

        • In general this means that the drawFrame method was used, before it was declared. Did you start from a recent example as described in the manual? On top of your ino file you have to have something like this:
          void drawFrame1(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
          void drawFrame2(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
          void drawFrame3(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);
          void drawFrame4(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y);

          These are called function prototypes and they need to appear before you use them for the first time… Recent samples from the library have this fixed…

  1. You are correct! I re-wrote the code to re-arrange the functions as you describe. I followed the link in the pdf for the project. Maybe you might include the links to the most recent version on this page – as well as elsewhere – to help us find them.
    Thanks for attention and support

  2. is there a certain way to enter the Canadian Provinces and cities in the setting.h for Wunderground? Especially British Columbia (BC). I tried every way possible, that I can think of. And I’m not getting any date or icons either.

      • const String WUNDERGRROUND_LANGUAGE = “EN”;
        const String WUNDERGROUND_COUNTRY = “CANADA”;
        const String WUNDERGROUND_CITY = “CRANBROOK”;

  3. How do thee icons get pulled during the execution of the sketch? Can’t seem to get any icons to show to the screen

  4. Hi,
    Thank you for putting this out there – it is a fun project I got to work – I’m playing with IoT at night and don’t know a lot so really appreciate you put all this out there – hope you enjoy the coffee 🙂

    One question: I want to add a second location to display weather. What is the best way to do that? Got the frame to work, but when i try things like declaring a second WundergroundClient wunderground2(IS_METRIC); the board crashes when it updates the data…

    Any suggestions?
    Thanks!
    Paul

  5. I Like the ESP8266 Weather Station. (I purchased 2 of them). I have a couple of issues I’d like to have your help on. I can compile the code with no errors. I connect with my WiFi. I also get the correct time. However, I am getting one screen with N/A C, a screen with NA NA NA and a screen with 27.10 C and 48.20%.
    I would like to see the temperature in Fahrenheit. I used:
    const boolean IS_METRIC = false; should this give me temperature in Fahrenheit?
    I have my Wundergrround API key that I have entered.
    Thanks!
    Gene

  6. I bought the kit from amazon and have nothing but trouble with it.
    I started with latest arduino IDE and 2.3.0 of the core libraries for esp8266.

    – the wifiscan example can not find any base stations. after running for about a minute the thing crashes with a core dump ( a bunch of hex data , stack pointers and other unreadable gibbersh.

    [code]Exception (29):
    epc1=0x4000e1c3 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000018 depc=0x00000000

    ctx: cont
    sp: 3fff09e0 end: 3fff0e10 offset: 01a0

    >>>stack>>>
    3fff0b80: 3fff2050 00000182 40233fb0 4020bc0a
    3fff0b90: 40212ced 3fff2010 00000000 ffffff80
    3fff0ba0: 65736724 4020e1db 3fff2010 3fff1a90
    3fff0bb0: 40212f2e 3fff2010 3fff1a90 00000000
    3fff0bc0: 3ffefddc 3ffed6e0 3ffed65c 3fff1a90
    3fff0bd0: 00000000 00000000 00000001 00000000
    3fff0be0: 00000018 00000064 da34fe1a fffeffff
    3fff0bf0: 3ff20a00 0000ffff 3fff0c18 4020e882
    3fff0c00: 3ffed65c 3fff1a90 3fff1a90 00000000
    3fff0c10: da34fe1a 3fff127f 00000000 00000000
    3fff0c20: 00000000 00000000 00000000 00000000
    3fff0c30: 00000000 00000000 00000000 00000000
    3fff0c40: 00000000 00000000 00000000 4020f9d4
    3fff0c50: 3fff1a90 00000001 00000001 00000000
    3fff0c60: 00000000 3ffed6e0 3ffeeaf8 00000000
    3fff0c70: 402277ad 00000003 00000003 0000007d
    3fff0c80: 402278f9 00000003 00000001 00000000
    3fff0c90: 3fff1240 4022796e 00000003 00000001
    3fff0ca0: 402025dd 3ffefba0 00000001 00000000
    3fff0cb0: 40202614 feefeffe 3ffefba0 40202636
    3fff0cc0: feefeffe 3ffe84d8 3ffe84c4 4020279e
    3fff0cd0: feefeffe feefeffe feefeffe feefeffe
    3fff0ce0: feefeffe feefeffe feefeffe feefeffe
    3fff0cf0: feefeffe feefeffe feefeffe feefeffe
    3fff0d00: feefeffe feefeffe feefeffe feefeffe
    3fff0d10: feefeffe feefeffe feefeffe feefeffe
    3fff0d20: feefeffe feefeffe feefeffe feefeffe
    3fff0d30: feefeffe feefeffe feefeffe feefeffe
    3fff0d40: 401052ce 00000000 3ffe8404 40205ab8
    3fff0d50: 00000020 40105427 3ffefdf0 3ffefc54
    3fff0d60: 40205a34 0001c200 4020674c 3ffe8477
    3fff0d70: 3ffefd1c 0000001a 3ffe8476 40206c90
    3fff0d80: 0000001c 3ffefd1c 3fff1118 3ffefddc
    3fff0d90: 3fffdad0 00000000 3ffefd1c 402060bd
    3fff0da0: 3ffefba0 00000000 00000001 feefeffe
    3fff0db0: feefeffe feefeffe 3ffefd1c 3ffefddc
    3fff0dc0: 3fffdad0 3ffefba0 3ffefd1c 4020238c
    3fff0dd0: feefeffe feefeffe feefeffe feefeffe
    3fff0de0: feefeffe feefeffe feefeffe 3ffefddc
    3fff0df0: 3fffdad0 00000000 3ffefdd5 40206790
    3fff0e00: feefeffe feefeffe 3ffefdf0 40100114
    <<<stack<<<

    ets Jan 8 2013,rst cause:2, boot mode:(3,7)

    load 0x4010f000, len 1264, room 16
    tail 0
    chksum 0x42
    csum 0x42
    ~ld
    system param error
    0f 31 c8 ff c0 20 00 29 03 2d 0c 01 cb ff c0 00 00 08 31 c8 21 12 c1 10 €[/code]

    i found several peole on the interent that have similar issues.
    i then switched down to arduino 1.6.5 which is used in the PDF file and core 2.20. Same problem.
    no wifi connections.

    The Oled display works but it sits forever in a scanning loop waiting for wifi
    – weatherundergroudn page to get the key does not work.

    i found some other instructions from people with same issue
    someone suggested doing this

    WiFi.softAPdisconnect(true);
    WiFi.disconnect(true);

    no solution.
    then this :

    ESP.eraseConfig();
    ESP.reset();

    Now the module is bricked. even the blink example won't run anymore. it keeps on spitting out garbage on the serial port. i tried all baudrates. no avail. only garbage comes out. not a single program runs anymore.

    i went back to flashing the nodemcu firmware hoping that would work. no result.

    the ESP8266 seems to have lost its main firmware.

    very disappointed.

Leave a Reply