Program ESP8266 with Arduino IDE
Last couple of days I was trying to setup an ESP8266 module to program using Arduino environment. By Default ESP8266 bootloaded with AT Bootloader. Initially I connected ESP to Arduino and communicated using AT Mode via WiFiESP library.
The intention of my experiments is to add internet support in my Aeroponic controller. But AT mode deals with strings and thus increase the flash size, and when I added MQTT functionality with rest of Aeroponic sketch, I almost filled the flash size of Atmega328. So I decided to look for alternative options.
One of the beauty of ESP8266 is, it has it’s own flash memory. Also the integration with Arduino IDE. This way I can write Arduino sketch and embed it into ESP8266 instead of writing it to Atmega328.
Installing ESP8266 addon to Arduino IDE.
Sparkfun have a nice post about setting up the IDE. At the end of tutorial they choose ‘Sparkfun ESP8266 Thing’, instead I selected ‘Generic Esp8266 Module’, see the screen shot below.
Hardware Connection
To write Arduino sketches to ESP we need a USB TTL module. Connect the module as below.
-
ESP8266-> USB TTL
-
GND-> GND
-
TX-> RX
-
RX-> TX
-
GPIO0-> GND
I powered the ESP module from an external source, ESPs are really power hungry, I am not sure whether the USB module can give the required current.
-
ESP8266-> External power
-
VCC-> 3.3v
-
CH_PD->3.3v
Make sure you have a common GND, for ESP, External power and USB TTL. That means connect all GNDs together. If there is no common GND then expect the unexpected, IDE will keep throwing fatal exception.
Once the sketch is uploaded, connect GPIO0 to VCC, then switch off/on the ESP module. Now the ESP will start running the sketch.
Challenges
Keep getting wdt reset message as shown below. To test I added the blink demo with a serial write. This simple program works well until I add ‘ESP8266WiFi.h’, after this header file and uploading the sketch will start throwing the below in Serial monitor.
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v09f0c112
~ld
I tried a lot of options to resolve this issue. First I thought the module is not receiving enough current, so I powered it with 5v. This doesn’t make any difference.
In one of ESP forums some one suggest to erase flash using ESPTool, so I setup ESPTool and issued command like
This didn’t work out either. In another forum one person suggest to write blank.bin to 0x7E000, also mentioned that some times the reset can occur because of corrupted flash. This leads me to believe that corrupted flash causing the reset. So I decided to start all over again.
As an initial step I decided to boot with default AT bootloader. Here is a great post to follow.
While trying to bootload, esptool crashes always with ‘fatal exception’. I changed my USB Serial and tried again, this time all the bootloading steps works and configured the ESP back to AT mode. Then again I tried to burn the arduino sketch via Arduino IDE and it worked really well.
So I believe the wdt reset caused by, an issue with USB Serial module or corrupted flash. Now ESP8266 is working fine without any reset.
Aeroponic Controller V4
After the successful completion of my Aeroponic Contoller V3. I started designing the next version of the PCB. This time I decided to package every thing in a single board. In V3, controller depends on external relay modules to on/off devices. In the new version Relays are inbuilt. One of the major change in the new version is, the system is controlled by a bare bone Arduino using Atmega328. The new board has all the features of V3 plus some new features.
The board has several debugging features which allow me to monitor the internal activity of the system via a serial monitor. The board also has the ability to communicate to an external Arduino via I2C, this feature is very essential in case of testing and bug fixing.
V4 Controller with inbuilt Relay modules
V3 Controller with external relay modules
The below system is currently operational at my home. As you can see the system uses 4 external relay modules.
Features of the Controller system
Controlling Water Pump: One of the crucial part of Hydroponic/Aeroponic system is the cycling of water in periodic intervals. A water pump is used to cycle the water. The controller should be able to switch on motor in a particular interval and keep it on for a configured time. Say run motor every 30 mins and keep it on for 3 mins. This settings can be configured from the mobile application.
Nutrient Feeder: In Aeroponic/Hydroponic the fertilizers (called as nutrients) are mixed into the water. In normal scenario we need to add it manually, the system uses two dosage pumps to add nutrients. We can add nutrients two way, either via the mobile app or by manually pressing a button. Through mobile app, we can specify how may ml of nutrients need to mixed to water.
Nutrient Mixer: Used a small wave maker to mix the nutrients while adding it.
Maintain Reservoir Water Level: One of the important thing to consider is, the water pump should not dry run, if it does then ready to buy a new one. In this version, used water level sensors to know the water level. The system used a solenoid valve, which is connected to a water source. When the water level goes down to a set level, system will activate the valve and start filling the reservoir. Once the water reaches a set level, system will switch off the valve.
pH Feeder: This is a new feature, it’s very similar to Nutrient feeder. Instead of adding nutrients this feeder adds pH modifier like Phosphoric acid or similar modifiers to correct the pH level of the water.
Real Time Clock: To deal with time critical logics.
WiFi Module: Allow the system to communicate with Internet, this allow me to control the system from any where in the world.
Communication with the Controller: I am reusing the Android application I wrote for V3. As of now the system talks via Bluetooth.
Some experiments in Cyanotype Photographic printing
Last week I got interested in Cyanotype photographic printing and started investigating about the chemistry and the whole process of doing it. It’s real fun and cheap way of printing photographs. In short Cyanotype printing involves sensitizing Paper/wood/cloth/glass with some chemicals and expose it to UV radiation/Sun light with a negative film covering the print area.
There are hundreds of tutorial talking about the whole process, here I merely repeating the process again. In Cyanotype process two major components are the sensitizing chemical and the paper. Let’s talk about the steps in Cyanotype.
Sensitizing Chemistry
I followed the old Cyanotype process. The two chemicals I need for that is
-
Ammonium Ferric Citrate
-
Potassium Ferricyanide
Most of the tutorials of Cyanotype process talks about Ammonium Ferric Citrate (Green), I couldn’t find Green version instead I used the brown one.
These two chemicals comes as powder, so need to mix it to create A and B solution.
- Solution A: 100 ml water and 25g Ammonium Ferric Citrate mixed together.
- Solution B: 100 ml water and 10g Potassium Ferricyanide mixed together.
Note: some sources says, use distilled water, I used the normal filter water for mixing.
Both A and B should be kept in separate containers. This can be reused to create working solution. To create the working solution, take equal parts from two (A and B) solutions and then mix well.
Sensitizing the paper
Paper type is very important in Cyanotype process, I used different types of paper for this process. I got really good result from very cheap drawing paper sells at normal stationary shops, which cost around 8₹ for a large sheet and can cut 6 or more A4 sheets. I also tried with A4 paper which cost around 12₹ each and got a very dirty yellow look, which I didn’t like. I suggest start with cheap drawing paper.
Next we need to sensitize the paper with the working solution we created from the A and B solution. I used a normal paint brush and paint the solution to the paper. Make sure to use a moderate dark room. Keep the paper to dry in a dark place, I used my bookshelf to dry it completely. You can also use a hair dryer and can be used immediately, I don’t have a hair dryer instead I used a hot air gun in very mild temperature. The paper will turn yellow once it dried.
Printing or Exposing
I experimented with A4 size paper. To print photos, we need to create a negative of A4 size. To create the big negative I used a black and white photo and invert it in an image editing app. Then adjust the contrast to get a desired look for the negative. This negative should print on a transparent sheet, I bought couple of OHP sheet and print the negative using my laser printer.
Next we need to expose the sensitized paper with UV rays. I used an A4 size plywood and transparent plexi glass to keep the paper and negative in position. Here is good video showing the whole process.
Sun light is the best resource for UV rays. But I live in an apartment and I don’t get enough sunlight in my balcony. So I used a light source created for my Aeroponic system. My Light source is an array of 3W red and blue LEDs, which I sourced from Aliexpress and assembled by me and my father. Also this artificial UV source helped me to experiment at night as well. Below is my UV light source, it’s not very fancy, a DIY system. Important part is, it’s shock proof :).
In normal sun light, we need to expose the paper for about 8-10mins, in my light source I need to expose for around 50mins. I experimented with different exposure time and came to 50mins as ideal.
Developing
Developing the paper is an easy process, just dip the exposed paper in water for 3 to 4 mins. My tap water is bit Alkaline, Cyanotype works well in Acidic water, so I put couple of drops of Phosphoric acid to water to make it acidic and wash for a minute then wash it in normal tap water for about 3 mins. The timing can only determined by trial and error, when you see the blue color is fading take the paper out and keep it for drying.
Some prints
1. Dirty yellow stained print, this caused by the paper type. This A4 sheet is around 12₹, but gives me a very bad output.
2. An over exposed print, highlight become mild blue. Under UV Light for around 2hrs
3. Reasonable good print, exposed for around 50mins.
All the above photos are scanned using a normal scanner not from a good photo scanner. Later I will post some photos from my photo scanner. The actual image looks a bit more bluish.
What next?
I need to spend some time experimenting the bleaching and tanning process. The whole process is real fun, need to experiment with different photos as well.
First time experience with Analogue Photography
I was shooting in DSLR and mobile phone for quiet a long time, I started with D40 and some years ago moved to D7100. Photography is my hobby and I am not a pro. One of my long time wish was to shoot in Film but I never got a chance to realize my dream. Thoughts that kept me away from buying an SLR was
-
Is it worth to spend money on some thing that is difficult to use
-
Cost of the film
-
Who will process the films and cost involved in processing and digitizing
A month ago, my CEO Simon Weeks visited India and he gave me a very surprising and one of my most valued gift, a Nikon FM3A along with couple of Black and White films. It’s one of the greatest Camera ever made, Ken Rockwell has a great post about this camera. With this Camera, my journey starts in Film photography. At first I didn’t knew how to load a film, Simon gave me a short introduction about loading the film and theoretically he take me through the processes of washing the film.
Capturing
As a DSLR user, I am habituated to check the LCD to see the preview of what I captured and adjust the exposure settings, if I am not satisfied. In film world I have no preview, so I should be very clear about the metering techniques and exposure. I have a good knowledge about Exposure but I refreshed my knowledge once again to make sure I will not do any mistake while capturing in film camera.
Photographing in FM3A is quiet a new experience. This camera will not autofocus, but the split screen focusing system is a great feature, which allows me to focus easier. Still I get some out of focus photos and learning my focusing skills. I really enjoy photographing with FM3A, it’s a very simple system, not many settings to fiddle with. Adjust the exposure and Aperture (if needed) and click shutter release, as simple as that.
Note: Shouldn’t try film SLR, if you are shooting in DSLR with Auto mode dialed in. It’s like sitting in a driverless car, in this case camera adjust Aperture and Exposure by itself, photographer only need to do is simply click the shutter release button. Instead in SLR world, you need to adjust the exposure yourself.
Processing
I went through a lot of articles and videos explaining the film processing. First thing to do film processing at home, is a developing tank, I checked most of the Indian ecom sites and they were pretty expensive or I didn’t like it much. From one of the facebook group I came to know about fotosingstore.in and ordered a Paterson Developing Tank
In my searches I come across film photographer named Prasanna Subbarayan, in one of the post he talk about developing film using XRay developer. I contacted him via email and later I talked to him via phone. He gave me the chemistry of developing using XRay developer. I got some developer from my Dentist and developed the first film roll. The result was good. First of all I cant judge my developing skills yet, learning from mistakes.
For developing my second film roll I bought Sterling Universal Film developer from GG Wellings, Sterling developer cost 60 Rs, to create 1 litre stock solution. I used XRay fixer to fix 35mm film.
Ofcourse I need a dark room to load the film, as of now I used one of my room at night with all light switched off, to make complete light proof, I cover myself and film using a blanket. It’s too hot : ). My father is making a setup to load film, I will update the photo of it later.
Digitizing
I used my DSLR to photograph the negative, then invert it via any processing application. But I didn’t get a good quality from it, to get good quality I need a macro lens. Then I tried with my iPhone camera and started getting satisfactory images. To capture the film, I created a small light box using an empty cardboard box. I felt like, I am getting a better result than anticipated, I decided to buy a dedicated Film Scanner. I got a good deal in Amazon.in for Canon 5600f and bought the scanner too. I did some scanning and I am getting pretty decent photographs.
How to reduce cost in Film photography
Every one knows film is the costliest part in film photography. In India, an ILFORD 100 cost around 800 INR. It’s pretty expensive. One way to reduce cost is to buy bulk 100ft films and use a day light film loader. This will reduce the cost to around 60INR per roll. My next item to buy is a Film loader and couple of reusable cassettes. Then I can be a full time Film photographer 🙂
What I love about Film photography
When I edit my DSLR photos, mostly I convert my photos to Black and white, I tried to achieve a film feel with a bit of grains. Now with film, I got what I really wanted. Also the process of developing, and after 15 to 20mins of development process, the moment you see the washed negative, it’s all real fun. I really didn’t get that anticipation in Digital world, I know what I got from the Preview screen of my Digital camera.
Some of the photos I shot in FM3A
You can also see more photos of mine at lumiagraphs.com
ISP Shield for Arduino Uno to program 3 different Atmega
Couple of weeks ago I designed and etched a home made pcb to program my Atmega 40 pin family micro processors. After that I redesign the PCB layout, so that I could program all the necessary processors like Atmega 40 pin, Atmega 28 pin and Attiny 8 pin family processors in a single board. I named this board as Kevino after my son Kevin. I also wanted this board in Red because my son is crazy about Red but fab house said it’s difficult for low volumes, so went with standard Green solder mask.
I received the board yesterday and assembled all the components. Below is the final outcome.
Features of the board
1. Program any one chip by selecting the respective chip via the red dip switch.
2. The chips can be Bootloaded and programmed via Arduino uno Or using a USBASP programmer.
3. Should be able to program and monitor serial communication using USB to TTL Adapter. I can plug the TTL adapter to the female pins in the board.
4. I can also test Blink program, an on board LED to test Blink and make sure the chip bootloaded successfully.
Let see how it looks when connected to Uno
With this shield I can Bootload and program all the Atmega Processors I used for experimenting.
Happy hacking…
Home made DC – DC converter for Microprocessor
One important tool when you deal with Microprocessors are, regulated power supply. To power my standalone Atmega’s and test the working I assembled a regulator in a breadboard along with Atmega. I cant relay on some thing running in a breadboard, a loose wire can create tiring troubleshooting. So I decided to build a permanent solution by creating a PCB and assembling the components.
My requirement is simple, connect a 12v adapter and I need 5v and 3.3v output. The 3.3v should provide a minimum 300mA. I have to use this power supply to power ESP8266 or any module that uses 3.3v. I am using LM2575 to provide 5v and LM1117 for 3.3v. Theoretically LM2575 can withstand upto 40v.
Below is the Schematic.
Here is the PCB I created and assembled at home.
Printed side
Lacking some soldering skills, still learning how to solder well.
I can give input voltage via the DC Jack or screw terminal. Three female pins at the right hand side provide 5v, GND and 3.3v. Forgot to include a LED to show the voltage status.
Schematic of standalone Arduino with FTDI Programming
I recently wrote a post explaining how to setup an Arduino in a breadboard. This post will show the schematic of the system. It’s a very simple system with minimal components. Here I used Atmega 32a. To program the chip I used an FTDI module.
To program the chip via FTDI module, we have to bootload it first. I used an Arduino Uno as the ISP, I have a home made board to bootload or program Atmega 40 pin family processors.
Once the chip is programmed it can be directly powered by a 9 or 12v DC Adapter. Here I used LM2575 switching regulator to step down the source voltage to 5v. Switching regulators are very energy efficient and produce very less heat compare to linear regulators like LM7805. I am powering the system using a 12v DC source. If there is no adapter then the module can be powered from the FTDI module by shorting the jumper.
Here I configured the processor to run at 16MHZ external clock. If we are using 8MHZ internal clock then we can avoid the crystal and the two 22pF caps.
Happy hacking…
Arduino system in a breadboard
After successfull completion of the first prototype of my Aeroponic controller, I decided to redesign the system with more functionalities. In the new design I need external EEPROM, WiFi and more but I am running out of extra pins in my Nano to support all the new functionalities in my mind. I cant go to Mega, as it will increase the size of my system and cost. So I decided to experiment with Atmega32a which has 32 I/O pins and can accommodate all my new requirements. But I have to run this chip standalone without all the luxury provided by Arduino board, like USB connection, Power regulation, etc.
I bought couple of Atmega32a from the market and boot loaded using the Arduino ISP Shield. Tested the chip using a blinky sketch and it worked well.
The next task is run it standalone from an external power source. Atmega32 can handle voltage upto 5.5v and my Aeroponic controller runs with an external power source of 12v. So I need to use a regulator to step down the voltage from 12 to 5v. One option could be to use LM7805 but in my experiments I could see this regulator produces a lot of heat. I come across this switching regulator called LM2575 and every one says it works really well and not produce much heat. I bought couple of these regulators with fixed 5v output.
The data sheet of LM2575 provides a schema to connect the regulator as shown below.
[Note: Above picture from the Datasheet of LM2575]
Yesterday night I decided to combine all the parts together to create a standalone board to run the blinky sketch.
I wired LM2575 as described in the above schema in a breadboard, checked the output voltage and it was 5v. I left the system for couple of hours to see any heat coming out. After the heat testing I decided to connect Atmega32a to the power source and make the standalone system.
[Note: Above picture from the Datasheet of Atmega32]
Here is the wiring.
- Atmega VCC to LM2575 5v output
- Atmega GND to common GND
- Atmega XTAL1 and XTAL2 to 16mghz crystal, and two 22pf ceramic capacitor from each leg of the crystal to GND.
- Atmega RXD to FTDI USB’s TXD
- Amega TXD to FTDI USB’s RXD
- FTDI USB’s GND to common GND.
The FTDI adapter allows me to see the debug information I am writing to the serial port. The blinky sketch I uploaded also write ‘Hello world’ to serial port.
Let’s see how to looks in a breadboard. As you can see it’s very minimal.
Now it’s a standalone board which can run Arduino sketch and can easily fit in my new board.
Next task will be to try programming the Atmega using the connected FTD USB to TTL adapter.