ESP32 på breadboard

ESP32Om man vill använda en ESP32 på ett breadboard, så får man ofta problem, anledningen till detta är att kortet oftast blir för brett för ett vanligt breadboard, När kortet sitter i så har man bara en rad lediga hål på ena sidan och man kommer inte åt hålen på andra sidan. Det finns dock en enkel lösning. Klicka här för att se denna lösning.

Ny kamera provas.

picam

Jag håller just nu på att prova ut en ny kamera till min “väderkamera”. Den här gången så är det en PiCamera med en Raspberry Pi som får agera webbkamera. Den är riktad nästan exakt mot söder.

Tyvärr så hände något med kameran idag så att bilden blev helt grön, jag vet inte om det blev för varmt i lådan där kamera och Pi satt monterad eller om det var för att kameran fått alldeles för starkt ljus på sensorn. Just nu fungerar den iaf.

Den är bara igång mellan 07.00 och 19.00 och det sköts automatiskt. Anledningen till detta är dels att på natten så syns ändå inget väder men främst att eftersom kameran står på insidan av mitt köksfönster så blir det gärna en massa reflexer i glaset som man helst vill undvika.

Programmet för att kontrollera det hela är ganska enkelt och kan ses härunder eller laddas hem här.

 

#! /usr/bin/python
# -*- coding: utf-8 -*-
 
# webcam.py - Göran Gustafsson 2015 https://gorgusgfx.se
#
# Program som hanterar bildtagning, skalning och uppladdning av bilder
# till en server. Programmet är tänkt att köras en gång per minut
# via cron.
#
 
import os
import time
import Image
import ImageOps
import paramiko
 
 
# Funktionen som laddar upp small.jpg och big.jpg till webbservern
 
def upload():
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('ssh.address.com', username="username", password="password")
    sftp = ssh.open_sftp()
    localpath = '/home/pi/webcam/big.jpg'
    remotepath = 'wp-content/cam/big.jpg'
    sftp.put(localpath, remotepath)
    localpath = '/home/pi/webcam/small.jpg'
    remotepath = 'wp-content/cam/small.jpg'
    sftp.put(localpath, remotepath)
    sftp.close()
    ssh.close()
    return 0
 
 
# Här kollar vi om vi ligger inom tidsfönstret och beroende på om vi gör
# det eller inte så tas antingen en ny bild av kameran eller så laddas 
# offline-bilden upp.
 
localtime = time.localtime(time.time())
tm = "{0:0>2}".format(localtime.tm_hour)
if (int(tm)>6 and int(tm)<20):
    # Först tar vi bort flaggfilen om den finns och sen tas själva bilden
    # med maxupplösning. Därefter laddas bilden in, skalas om och sparas 
    # två gånger innan de bägge bilderna laddas upp till servern.
 
    if  os.path.exists('/home/pi/webcam/flag.txt'): os.remove('/home/pi/webcam/flag.txt')
    command = "raspistill -w 2592 -h 1944 -rot 270 -o /home/pi/webcam/bild.jpg"
    os.system(command)
    im = Image.open("/home/pi/webcam/bild.jpg")
    img = ImageOps.fit(im,(640,480))
    img.save("/home/pi/webcam/big.jpg",quality=60,optimize=True,progressive=True)
    img = ImageOps.fit(im,(178,134),Image.ANTIALIAS)
    img.save("/home/pi/webcam/small.jpg",quality=75,optimize=True,progressive=True)
    upload()
else:
    # Om flaggfilen inte finns så kopiera offline-bilden till big.jpg 
    # och small.jpg och ladda upp dem till servern. Skapa sen flaggfilen 
    # för att tala om att vi gjort detta. Då slipper vi slösa bandbredd 
    # på att ladda upp samma 2 bilder gång på gång på gång...
 
    if not os.path.exists('/home/pi/webcam/flag.txt'):
        im = Image.open("/home/pi/webcam/offline.jpg")
        im.save("/home/pi/webcam/small.jpg",quality=90,optimize=True,progressive=True)
        im.save("/home/pi/webcam/big.jpg")
        upload()
        fd=open("/home/pi/webcam/flag.txt",'w')
        fd.close()

 

Morse-kodare

På den gamla goda C64-tiden, i slutet av 80-talet, så gjorde jag ett program för att enkelt kunna “sända” morsekod. Detta gjordes genom att i högtalaren spela upp morsekoden samtidigt som reläet till bandpelaren var tänkt att kopplas istället för en telegrafinyckel. Eftersom jag var mer intresserad av programmeringsbiten än av radiobiten så provades det aldrig ”skarpt”, men jag lyssnade långa stunder på hur programmet arbetade.

För några år sedan gjorde jag en liknande sak till Arduino och nu har jag äntligen lagt upp det här på hemsidan.

Klicka här för att läsa mer.

Kameramultiplexer till Raspberry Pi

Multiplexer-kort

Multiplexer-kort

Hur bra en Raspberry Pi än är så finns det tillfällen när man vill ha möjligheten att ansluta mer än en kamera, t.ex. om man vill bygga en bokskanner, en panoramakamera eller om man har kameror med olika objektiv som man vill kunna växla mellan.

Hittills har det inte funnits något sådant men nu har ett företag tagit fram en multiplexer som gör det möjligt att använda upp till 4 kameror per kort. Det går sedan att använda 4 kort så att man totalt kan använda 16 kameror till samma Raspberry Pi.

Det är ett företag som heter IVMech som tillverkar dessa kort. I dagsläget så kostar de drygt $80 men med lite tur och en eventuellt ökad efterfrågan så kanske priset sjunker.

Multiplexern kan inte bara växla kamera för stillbilder utan den klarar även att växla video bra och snabbt, perfekt för t.ex. en robot med flera kameror med olika objektiv.

Självklart så blir det en liten fördröjning på kortet mellan in- och utgång men jag tycker inte att en halv nanosekund är mycket att bråka om. Det kommer i praktiken inte att spela någon som helst roll. Att växla mellan de olika kamerorna tar betydligt längre tid, ca 50 nanosekunder. Inte heller det är något att klaga på.

Härunder är en video som visar exempel på att växla mellan olika kameror.