Digital Camera FS2

Days after publishing this post about ArduCam and ESP8266 I got some good feedback and 2 friends asked me to get one Camera. At the same time my new 3D Printer “Prusa MK3” has arrived so I decided to make a case remake and release a new small Low-Resolution, instant WiFi upload Camera. What I’m trying to achieve here is a digital Polaroid. Press the shooter buttton and the JPEG will be uploaded to a digital gallery in the next 4 seconds. So it’s a pure WiFi camera, without memory card, and you need to be online to use it.
And that’s nowadays very easy right ? You just need to make a mobile hotspot in the phone if you are outside home. And if the camera does not detect a WiFi then creates an Access point called:
CAM-autoconnect

Then you have to connect to it through the phone and browse 162.168.4.1 there will greet you a “WiFi manager” so you can select a WiFi and write the credentials to make a connection. After that you are all set, you just need to enable the hotspot and the camera will reset and connect to it automatically.

It can take a picture both with the shutter button or have a Video stream or Photo shoot via the Web UI. ( cam.local )

 

3D Renderings made with Blender

I decided to make a small release of 5 FS2 digital WiFi instant upload cameras at the price of 70 € each.

Materials and costs if anyone is interested to make one are the following:

  • 1S 3.7V Li-Polymer  (Got one in eBay)
    Battery size: 6 x 41 x 68mm  2000mAh /hr
    8.50 €
  • Charger: Adafruit Micro Lipo w/MicroUSB Jack  (eBay Not in the picture since this is just my personal prototype)
    8 €
  • Arducam Multi Camera Adapter Board 2MP (eBay)
    25 €
  • Wemos D1 mini
    6 € but can be purchased for less
  • Various connectors and cables (8 Pin SPI white)
    2.5 €

That gives a total of 50 € as total hardware costs, printing the case and testing that all works together I’m summing up and additional 20. And you can get 1 year of API use for free. Then you can move it to your own server or you will get part of my Amazon AWS invoice ;)

With the battery full loaded should be online for about 18 hours. It has an On/Off switch that is still not in the picture.

The photos now when it has all cables soldered are better than before although I liked some of the strange effects when the cables where loose. The idea is to make a camera that you shoot blindly without looking at the frame. That gives for me interesting results and I had a lot of fun with it. That combined that in about 4 seconds the picture is already online is really cool. If you are interested in getting one just contact me through this website. Shipping costs are not included.

Picture previews:

1280x960

Photo shooter has 3 options:

  1. ONE CLICK Shuts only one picture
  2. LONG CLICK enters time-lapse mode (a picture every 5 min. but can be configured to your request, should be minimun time 5 seconds though)
  3. DOUBLE CLICK disables time-lapse mode

The picture is uploaded in my API but the code is called PHP-gallery and it’s in a public repository on github so it can be hosted in any location that supports PHP 5+ and image-magick (Thumbs generator)

ArduCAM plus Espressif equals WiFiCAM

I’ve been having some fun taking pictures last weekend with a self built camera. It costs about 15 € in Ebay and summing up the 6 of the ESP8266 Wemos D1 it makes a total hardware cost of 21 euros. Let’s say 35 if you add a Lion battery and an USB charger to it.

The most basic layout looks like this.

Using here a 2 megapixels ArduCam. There is also a 5 megapixels version. The Pin definition of the camera is like any other serial parallel interface device:

Wiring with Wemos D1
D0 CS
D7 Mosi
D6 Miso
D5 Clk
D2 Sda
D1 Scl

Arducam put together some Instructions Kit where you can find the previous table plus a demo example here.

I went a bit further and made a simple PHP Gallery plus upload-receiver hook and packed it together in a git repository here:

Php bootstrap4 image gallery

I got some critics saying that this is of course invented and I’m not creating anything new here. But of course the idea is not to make a professional WiFi camera. If so I will simply get one ! The idea was to built one from the scratch.

And the beauty of it is that it does not take perfect pictures. Just because now it’s not soldered sometimes it makes an interesting noise in the pictures and imperfections. The idea is to take this and make it whatever you want. Like for example a security cam that takes a serie of pictures or even records a stream when it detects movement. Or get a 5MB pixels more advanced camera and pack it together in a 3D printed case putting a shutter button and some eink display to preview the picture and change settings.

This is an example of a picture with noise:

And this another one when the right amount of light is there and the cables are good connected

For more pictures and to see how the Php gallery script works check this link.

Postman self documenting tests and runner import

I’ve been working on the last days doing extensive API testing and needed to find an easy way to document my tests. Postman offers already something very useful that uploads your tests documentation to their website. But sometimes we need just a simple HTML that can be privately delivered to the client.

That’s where this project was born:

https://github.com/martinberlin/postman-reporter

The intention of this simple PHP script is to generate a Standalone HTML for your Postman tests that you can send to the client without the need to upload all the tests in the open internet.

It serves to achieve two things:

  1. Make a standalone HTML document from your Postman Collections
  2. Import the test run-results into a mysql database

With the second one only the importing is done. It’s then up to you how to present this data. It populates two tables, resume and detail, first one with the performance result and the detailed with a line per test. Much more information can be extracted from the runner json this is just a kickstart idea. Have fun with it!

If it calls your interest then please read more details in the github repository.

Installing web screenshot programs in Amazon AWS AMI servers

Installing in my Amazon instance some image manipulation tools, I want to share the two command-lines that saved me a lot of time in this post: (credits given)

Go to https://wkhtmltopdf.org/downloads.html and depending on your version download the CentOS, for me the right was

CentOS 7 x86_64
sudo yum install yourDownloaded.rpm
sudo yum install ImageMagick

Then you can simple take screenshots of the web using :
wkhtmltoimage

and convert them to any format that you like. The image of this post is a screenshot ot the Zeit newspaper converted to -monochrome also:

convert your-image.png -monochrome output-image.png

 

Playing with a Wemos D1 (ESP8266)

After learning some Arduino and building some demos I decided to give it a try to another Chips. And this one is the ESP8266, you can find it in eBay or alixpress searching for “wemos D1”

Basically this little guy has kind of the same capabilities of an Atmel chip with less Digital outputs(9) but comes with WiFi built it. So that means you can use it as a station (STA) or a soft access point. That enables to do a lot of stuff, for example deploying this with sensors and being able to read from another device connected with the same Wifi all of them. In turn, you could control the digital outputs, and turn on / off stuff that are connected to the D1.

This is just a small example built in 5 minutes. I just connected a led with a proper resistance to D4. I still do not understand well with pin 2 turns on D4 but that is important now since it’s just a small demo.

UPDATE: Now I understand. You need to use the constants to get the right pins. So using D4 will automatically point it to the right pin that is 2 :) But it’s just much simpler to use the constants unless you want to go all the time to the datasheet. After building this simple example I build a bigger one that can send a message from the web to a simple display and show some weather measurements. Will share it later on a new post if there is any interest about it. You can comment here if it would be interesting for you to read it.

NOTE: I made a mistake here and connected the 3.7 V. to the 3.3V pin. That is incorrect! It should be connected to the 5V pin that in turn goes to the power regulator
/*
* Based on ESP8266 LLMNR responder sample
* Copyright (C) 2017 Stephen Warren 
*
* Based on:
* ESP8266 Multicast DNS (port of CC3000 Multicast DNS library)
* Version 1.1
* Copyright (c) 2013 Tony DiCola (tony@tonydicola.com)
* ESP8266 port (c) 2015 Ivan Grokhotkov (ivan@esp8266.com)

* Instructions:
* - Update WiFi SSID and password as necessary.
* - Flash the sketch to the ESP8266 board.
* - Point your browser to http://ip-you-get-in-serial-monitor-arduino/
*
*/

#include 
#include 
#include 
#include 

const char* ssid = "yourRouterSSID";
const char* password = "yourPassword";

ESP8266WebServer web_server(80);

void handle_http_not_found() {
  web_server.send(404, "text/plain", "Not Found");
}

void handle_http_root() {
  // NOTE: Including bootstrap here just to make fancy buttons
  String headers = "	";
  String html = "Server options:
";
  html += "<a class='btn btn-primary' href='4/1' target='frame'>D4 on</a>
";
  html += "<a class='btn btn-primary' href='4/0' target='frame'>D4 off</a>
";
  html += "";
  web_server.send(200, "text/html", headers + html);
}

void handle4off() {
digitalWrite(2, 0);
web_server.send(200, "text/html");
}
void handle4on() {
digitalWrite(2, 1);
web_server.send(200, "text/html");
}

void setup(void) {
Serial.begin(115200);
pinMode(2, OUTPUT);
digitalWrite(2, 0);

// Connect to WiFi network
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

// Start LLMNR responder
LLMNR.begin("esp8266");
Serial.println("LLMNR responder started");
// Start HTTP server
web_server.onNotFound(handle_http_not_found);
web_server.on("/", handle_http_root);
web_server.on("/4/1", handle4on);
web_server.on("/4/0", handle4off);
web_server.begin();

Serial.println("HTTP server started");
}

void loop(void) {
web_server.handleClient();
}

So after uploading this little script to your Wemos and of course updating your SSID and password to your router it should act like a server. Notice that I’m using a hidden Iframe to keep things simple, since I see other examples that submit a Form to itself and analyze the arguments. That is cool maybe for a bigger applicaion, but for simple apps, is enough to just point to an URL and reply with a 200 Http status.

Penta-light uploaded to Thingiverse

El pase de diapositivas requiere JavaScript.

Designed in Blender just for fun, it’s a small 5 Led-diode lamp, that is powered by 3 AAA batteries. What I like about pentagons is that it does not matter from what angle you see the iluminated object, there are always 3 lights to see.

With the 100 Ohm resistances the light should stay about 30 hours long (depending of what rechargable batteries are used)

If you want more details the object can be downloaded here:
https://www.thingiverse.com/thing:2826520