ESP8266 Weather Station: Shipping From a Fulfillment Center in China

ESP32 Development Board WiFi+Bluetooth Ultra-Low Power Consumption Dual Cores ESP-32 ESP-32S Board
Integrated antenna and RF balun, power amplifier, low-noise amplifiers, filters, and power management module. The entire solution takes up the least amount of printed circuit board area. This board is used with 2.4 GHz dual-mode Wi-Fi and Bluetooth chips by TSMC 40nm low power technology, power and RF properties best, which is safe, reliable, and scalable to a variety of applications.

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

9 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

Leave a Reply