Visualizzazione post con etichetta wifi. Mostra tutti i post
Visualizzazione post con etichetta wifi. Mostra tutti i post

venerdì 22 gennaio 2021

ESP32Cam primi approcci

 Veramente orami e' qualche mese che ho ricevuto dalla Cina il mio primo ESP32Cam, un mostriciattolo che ha a bordo il ESP32 uno slot per MicroSD card, una telecamera ed una serie di pin a cui poter collegare il ....resto del mondo!



Ho gia' fatto un sacco di progettini con l'ESP32, tutti in C, utilizzando la IDE di Arduino e la modalita' "classica" di programmazione: upload via seriale del firmware compilato attraverso la Ide di Arduino .

Su questo sistema di operare, ci sono in rete migliaia di Tutorial anche blasonati, come per esempio quelli di Adafruit, mentre per quanto riguarda Python e MicroPython, ancora non si trova un granche'.

Considerato pero' che ho imparato a programmare con Python, vorrei imparare anche a sviluppare qualcosa di mio su ESP con questo linguaggio.


Quindi , vediamo un po' come fare per far diventare produttiva la giornata!

Intanto, primo consiglio, in rete si trovano diverse fonnti che vendono la scheda ESP32Cam, io consiglio quella completa  della sua basetta con presa USB e interfaccia seriale integrata, che e' molto comoda, viene riconosciuta subito dal sistema operativo, e ci evita di dover ricorre a fili volanti e interfacce seriali posticce, per poter lavorare. Costa pochissino (meno di 1 euro) e non ci sono motivi per non utilizzarla, almeno per la fase di prototipazione, quando fare l'upload del firmware e' una operazione frequente. Quando la parte di sviluppo sara' terminata, se volessimo utilizzare bene gli spazi, potremmo sempre sfilare la basetta seriale e, magari costruirne una apposita con i sensori di cui necessitiamo gia' previste e montati onboard.Quindi nel caso si volesse optare per la soluzione con scheda seriale esterna questi sono le connessioni da effettuare:


Il ponticello tra GPIO0 e GND e' indispensabile per "dire" al microcontrollore che siamo in flash mode e che stiamo per inviare il firmware.

Recuperare l'ultima versione del firmware dal sito 

Dal alto pc, se siamo su Linux, il comando per fare upload del sistema operativo MicroPython si deve utilizzare :

$ esptool.py –chip esp32 -p <nome_porta> write_flash -z 0x1000 <path_del_firmware>

Se siamo su windows ed abbiamo difficolta' ad installare il sistema di siluppo di Espressif (esptools), possiamo :

Scaricare il Flash Dowload Tools qui   ( questa e' l'ultima versione, prebdere ovviamente la versione piu' recente) basta scompattarlo in una cartella ed siamo  subito operativi.

Fare click sul file  flash_download_tool_3.8.5.exe e scegliere il tasto Developer Mode e nella successiva finestra il tasto relativo al modello di ESP che abbiamo a disposizione.

Si aprira' questa finestra:


All'interno della quale va soltanto caricato il path del firmware appena scaricato del MicroPython. Gli altgri parametri dovrebbero andare bene senza essere toccati.

 A questo punto fare ERASE per cancellare la memoria flash da alti eventuali upload.

Poi  START, per iniziare l'upload.

Se tutto e' andato bene. ci trovermo, al termine del processo, il nostro ESP32Cam che sara' pronto per essere programmato in Python. Bastera' quindi collegarlo con PuTTY (per esempio) sulla porta COM che windows gli avra' assegnato. nel mio caso la COM10.

Alla prima connessione il nostro ESP rispondera' con il prompt di Python e sara' gia' pienamente operativo.

Cosa fare adesso?

Adesso abbiamo il mostriciattolo che risponde ai comandi, ma ancora non e' collegato alla rete e non puo' essere collegato da remoto. Quindi la prima cosa da fare e' farlo collegare alla rete.

Ci viene in aiuto la documentazione ufficiale di MicroPython per ESP32

import network

wlan = network.WLAN(network.STA_IF) # create station interface
wlan.active(True)       # activate the interface
wlan.scan()             # scan for access points
wlan.isconnected()      # check if the station is connected to an AP
wlan.connect('essid', 'password') # connect to an AP
wlan.config('mac')      # get the interface's MAC address
wlan.ifconfig()         # get the interface's IP/netmask/gw/DNS addresses

ap = network.WLAN(network.AP_IF) # create access-point interface
ap.config(essid='ESP-AP') # set the ESSID of the access point
ap.config(max_clients=10) # set how many clients can connect to the network
ap.active(True)         # activate the interface

Fatta la connessione al router casalingo (modificare opportunamente essid e password nel codice sopra con quelli corretti per la connessione al proprio router)

Attiviamo il WEBREPL per poter effettuare la connessione da remoto ed utilizzare la funzionalita' di upload e download dei file dal sistema operativo del ESP32Cam ( si perche' il sistema che abbiamo caricato si comporta come un vero e proprio sistema operativo sul quale possiamo caricare, scrivere leggere e cancellare file.

PS Se utilizziamo Linux e' tutto piu' semplice, come sempre, esiste infatti una applicazione ampy che basta chiamare per fare direttamente l'upload da terminale cosi:

$ ampy -p dev/ttyUSB0 put boot.py

Ma stiamo utilizzando windows, mio malgrado, quindi , secondo me, la maniera piu' veloce per ottenere il buon funzionamento del ESP32Cam e' questo, cioe' passare da WEBREPL per fare l'upload dei file che ci interessa caricare sul sistema.

import webrepl_setup

Con questa riga, e poi seguendo le richieste del programma, si stabilisce una password e si abilita la partenza del WEBREPL ad ogni restart o reset del sistema.

Proviamo se tutto funziona a dovere:

Da un qualsiasi browser connettere: http://micropython.org/webrepl/#1p2.168.NUMERO_IP_ESP:8266/

Inserire naturalmente l' IP dell'ESP32Cam, ed utilizzare la porta 8266 come specificato. Dovrebbe rispondere il nuovo sistema con la richiesta diella password di accesso che abbiamo creato con la prima chiamata del WEBREPL. Dare la password corretta ed il sistema rispondera' con il prompt di MicroPython

Ok a questo punto che siamo connessi e abbiamo il WEBREPL attivato, non ci resta altro che rendere queste modifiche permanenti in maniera che ad ogni statup del sistema questo si connetta al router in automatico e renda disponibile l'interfaccia remota per poter essere contattato anche se non direttamente collegato al pc.

Dal WEBREPL scarichiamo il file boot.py e modifichiamo la parte relativa ala connessione, per renderla automatica cosi:

fare il get del file boot.py


modificarlo con :

<code>

# This file is executed on every boot (including wake-boot from deepsleep)
import esp
esp.osdebug(None)
import webrepl
webrepl.start()
def do_connect():
    import network
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect('essid''password')
        while not wlan.isconnected():
            pass
    print('network config:', wlan.ifconfig())
do_connect()

</code>

E fare l'upload del file appena modificato con l'apposita funzione disponibile sul browser



A questo punto siamo pronti. Basta resettare (anche togliendo l'alimentazione) il nostro ESP32Cam ed al riavvio, in automatico si collleghera' al router e sara' connettibile tramite interfaccia WEBREPL all'indirizzo : IP_del_ESP:8266 da un qualsiasi browser.

Buon divertimento 

TecnoGeppetto



 





venerdì 21 settembre 2018

Orange Pi 2G-IoT e Raspbian - Istallazione e settaggi

Oggi mi sono dedicato alla configurazione del sistema su Orange Pi 2G-IOT, che qualche giorno fa mi è arrivata dalla fabbrica.
Dopo aver recuperato il file del sistema operativo direttamente dal sito del produttore qui ho creato la microSD, nella maniera tradizionale, come specificato qui .

Costruita la SD, l'ho inserita nella OrangePi, ho collegato la seriale per il debug e collegato la scheda alla alimentazione fornita da un alimentatore 5V 2A

Aperto una finestra di terminale con Putty su windows, mi sono messo in ascolto sulla seriale ed ho collegato l'alimentazione.

Tutto regolare, partito il sistema che arriva velocemente al login.

Si accede con root e orangepi come user e password.

Appena entrati nel sistema vieni consigliato di settare l'ambiente con il comando
sudo OrangePi_Settings
(per i miei gusti un po' troppo lungo e con troppe maiuscole, comunque....)

Il menu che appare ti invita (non ti fa fare altro!) a configurare il WiFi.

La prima volta, dopo aver aggiunto il nome del mio network interno e configurato l'accesso con la password, al reboot mi si è impallato tutto rimanendo appeso durante la fase di startup nella ricerca della scheda di rete durante il collegamento con l'access point.

Per velocizzare ho ricostruito la SD dal file originale e riproposto la medesima procedura, che al secondo tentativo sembra funzionare regolarmente
Quindi impostato nome del AP e password e fatto il reboot, adesso si logga regolarmente nel network casalingo e consente l'accesso attraverso la seriale di debug.

Sono quindi passato a collegare la OrangePi via ssh dalla rete interna.

Tutto sembra funzionare regolarmente

Utilizzare Raspberry Pi come Client WiFi e server DNS

Il sistema che vado configurando e' questo:

una Raspberry Pi che collega via WiFi un Router WiFi con server dhcp che ha accesso ad internet;
la Raspberry Pi attraverso la sua presa di rete ed uno switch di rete, condivide la connessione intenet con tutta la rete della mia mansarda.
In sostanza per ottenere la navigazione internet dalla mansarda dove abito, ho dovuto fare un link con l'appartamento sottostante dove risiede la linea telefonica ed il modem ADSL.

Come spesso succede per ottenere il risultato desiderato ho dovuto fare un mix di tutorial, l'mportante comunque e' sempre riuscire ad arrivare alla meta!Vedi le tribolazioni per il settaggio della chiavetta WiFi della Raspberry utilizzata come Client in questo post  


Comportandosi come router, la Raspberry Pi dovra' assegnare gli indirizzi ip alle macchine che la connetteranno, quindi per fare questo ho dovuto configurare il programma DNSMASQ.

Iniziamo con scaricare il software con

sudo apt-get install dnsmasq

poi si deve modificare il file /etc/dnsmasq.conf

sudo nano /etc/dnsmasq.conf

Inserendo prima della fine del file queste righe di codice:

interface=eth0
listen-address=192.168.1.1,127.0.0.1
dhcp-range=192.168.1.50,192.168.1.150,12h


In questo modo il dnsmasq assegna un numero ip variabile con un lease time di 12 ore, nel range di numeri  da 50 a 150 sulla interfaccia eth0 (la rete cablata collegata allo switch)

Poi ho attivato il port forwording tra le porte, modificando questo file

sudo nano /etc/sysctl.conf

 andando a cambiare, togliendo il #, questa riga del file di configurazione.

net.ipv4.ip_forward = 1

A questo punto diventiamo root con

sudo su

ed andiamo a modificare la trabella di routing con il comando

iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE


per controllare che tutto sia ok

iptables -t nat -L

Dovrebbe restituire questa scritta


Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- anywhere anywhere


Adesso  lo andiamo a scrivere con questo comando:

echo 1 > /proc/sys/net/ipv4/ip_forward


questa ultima istruzione deve essere data assolutamete con i privilegi di root

Per rendere permanenti questi comandi che altrimenti si resetterebbero al riavvio,viene utilizzata la tecnica di  scrivere tutto su un file e caricarlo ad ogni riavvio in quresto modo:

cd /etc/network
iptables-save > condivisione-internet.rules
touch attiva-condivisione-internet
chmod u+x attiva-condivisione-internet
nano attiva-condivisione-internet

inseriamo questo contenuto:

iptables-restore < /etc/network/condivisione-internet.rules
echo 1 > /proc/sys/net/ipv4/ip_forward

Ora modifichiamo il file /etc/network/interfaces

nano interfaces

ed aggiungere, nella configurazione dell'ingterfaccia wlan0 questa riga di codice che al boot della macchina fa leggere alla Raspberry Pi la configurazione salvata nel file prodotto sopra :

pre-up /etc/network/attiva-condivisione-internet


Se non mi sono dimenticato nulla e non ci sono errori, al reboot la Raspberry Pi si colleghera' al suo AP configurato nel wpa_supplicant e condividera' la connessione internet tramite la sua presa di rete


Di seguito i link da cui ho fatto osmosi:
https://www.lffl.org/2016/04/guida-dnsmasq-condividere-connessione-via-ethernet.html
http://vilnet.it/argo/linux-guide-trucchi-15/news/condividere-connessione-internet-terminale-321/#




mercoledì 19 settembre 2018

TP LINK TL-WN722N V3 Installare su RaspberryPi driver mancante

della serie anche le cose apparentemente semplici ti complicano la giornata!

La sfida di questo pomeriggio e' stata quella di far funzionare una delle mie piccole Raspberry Pi con una chiavetta acquistata fresca fresca nel negozio di un mio amico in mattinata.
La nuova istallazione dovra' servire per collegare dalla mansarda dove vivo, l'AP di casa che rimane due piani sotto a circa 30 - 35 metri di distanza.
Devo portare internet a casa, sebbene la connessione dove abito sia  come quella dei Flinkstone, lentissima e mai costante(ma qui in campagna questo passa il convento!).

Mi serve un client che condivida la sua connessione wifi con gli altri apparecchi casalinghi, quindi, dopo aver fatto una serie infinita di test con la funzione WDS o client di alcuni router wifi che mi trovo nel cassetto, senza essere arrivato da nessuna parte, ho deciso di utilizzare una Raspberry Pi che, sebbene sia sottopotenziata per questo scopo, dovrebbe consentirmi di fare velocemente e bene quello che ho in testa.(Come vedremo pero' il concetto di velocemente non si applica a questo sport!!!)
 Poi in un secondo momento potrei utilizzare anche la RPI per il controllo dell'appartamento attraverso la sua Raspicam. Ma questo progetto lo svilupperemo piu' avanti.

La prima delle Raspberry Pi che ho settato per questo scopo l'ho messa in garage con la stessa funzione. il garage e' molto piu' vicino al router casalingo e quindi non ho "patito" piu' di tanto. Ho collegato la chiavetta gia' usata in mille altre occasioni e impostato il software come descritto in seguito.
Per quella della mansarda invece, devo fare una istallazione esterna perche'  non ho ricezione diretta del segnale dal router.
Di conseguenza sono andato a prendere la chiavetta wifi con il bocchettone SMA per poter collegare una antenna esterna e puntarla verso la casa sottostante.

Alla connessione del dongle pero' mi accorgo che non sono istallati ancora  i driver, sigh!

ecco quale tutorial ho seguito per installare e far funzionare la mia chiavetta. TP LINK TL-WN722N V3

Questo si e' rivelato il  Tutorial migliore

The best and easiest way to handle this problem is as following
  1. sudo wget http://www.fars-robotics.net/install-wifi -O /usr/bin/install-wifi
    • Downloads the installation file
  2. sudo chmod +x /usr/bin/install-wifi
    • makes it executable
  3. Installation process
    • sudo install-wifi -c rpi-update
      - check for driver if rpi-update is run.
    • sudo rpi-update
      - if a driver is available you can run rpi-update to update firmware.
    • sudo install-wifi -u rpi-update
      - then update the driver for the new kernel installed by rpi-update.
    • sudo reboot
      - now reboot to update the kernel with the new wifi driver.

Nel cercare mi sono anche imbattuto in questo tutorial che con una vecchia versione di Linux ha funzionato subito. :

Here is what I did to get the TP-WN722N V.2 working on Raspberry Pi. The first command we need to do is use git and get the driver. git clone https://github.com/lwfinger/rtl8188eu... The next command we need to do is install some headers. sudo apt install raspberrypi-kernel-headers Once that is installed, which will take a few minutes. When need to run the following command. sudo ln -s /usr/src/linux-headers-$(uname -r) /lib/modules/$(uname -r)/build That command will just drop you down to the next line. The next commands are going to be the following. cd rtl8188eu make all sudo make install Once you are done. Do a sudo reboot and you should be good to do.


mercoledì 22 giugno 2016

ESP8266 i comandi AT

L' ESP8266 appena scartato dalla confezione originale dovrebbe avere gia' caricato il firmware di default che consente di comunicare attraverso semplici comandi AT Hayes compatibili, quelli dei vecchi modem telefonici, per capirsi. I vecchi appassionati della prima ora di internet se li ricordenranno sicuramente.

 Girovagando in rete ho trovato questo link dove vengono riepilogati tutti i comandi in maniera dettagliata.

Room-15

Riporto qui di seguito un copia ed incolla piu' significativo, rimandando al link sopra per un approfondimento  maggiore

I comandi AT riconosciuti dal modulo ESP8266


Index of all known AT commands

Basic WiFI layer TCPIP Layer
AT AT+CWMODE AT+CIPSTATUS
AT+RST AT+CWJAP AT+CIPSTART
AT+GMR AT+CWLAP AT+CIPSEND
AT+GSLP AT+CWQAP AT+CIPCLOSE
ATE AT+CWSAP AT+CIFSR
AT+CWLIF AT+CIPMUX
AT+CWDHCP AT+CIPSERVER
AT+CIPSTAMAC AT+CIPMODE
AT+CIPAPMAC AT+CIPSTO
AT+CIPSTA AT+CIUPDATE
AT+CIPAP +IPD

Line termination

ESP8266 expects  or CarriageReturn and LineFeed at the end of each command, but just ; seems to work too.

Command variants

Each command can have up to 4 variants changing the function of it. You can chose between them by appending one of four possible values to the end of the root command itself. These four appendices can have the following values "",=,"?",=?
Type Example Description
Test AT+CIPSTART=? Query the range of values (So far only AT+CWMODE=? uses it)
Query AT+CMD? Returns the current value of the parameter.
Set AT+CMD=Parameter Set the value of user-defined parameters in commands and run.
Execute AT+CMD Runs commands with no user-defined parameters.
Note:
  • Not all AT commands support all 4 variants.
  • [] = default value, not required or may not appear.
  • String values require double quotation marks, for example: AT+CWSAP="ESP756190","21030826",1,4.
  • Baud rate = 115200
  • AT instruction ends with “\r\n”

Commands

AT - Test AT startup

Variant Command Response Function
Execute AT OK Test if AT system works correctly

AT+RST - Restart module

Variant Command Response Function
Execute AT+RST OK Reset the module

ESP-01 Output after reset:

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

wdt reset
load 0x40100000, len 24444, room 16
tail 12
chksum 0xe0
ho 0 tail 12 room 4
load 0x3ffe8000, len 3168, room 12
tail 4
chksum 0x93
load 0x3ffe8c60, len 4956, room 4
tail 8
chksum 0xbd
csum 0xbd

ready

ESP-12 Output after reset:

\0x04B1\0x85 \0xff\0x13:'\0xe0;\0xcc;!G\0xfa\0x11\0xa9R\0xc6\0x83\0x01\0xd9\0x81
[Vendor:www.ai-thinker.com Version:0.9.2.4]

ready

AT+GMR - View version info

Variant Command Response Function
Execute AT+GMR version, OK Print firmware version
Parameters:
  • version: firmware version number
ESP-01 output:
00160901
ESP-12 output:
0018000902-AI03

AT+GSLP - Enter deep-sleep mode

Variant Command Response Function
set AT+GSLP=time time OK Enter deep sleep mode for time milliseconds
parameters:
  • time: Time to sleep in milliseconds
Example:
AT+GSLP=1500
Note:
Hardware has to support deep-sleep wake up (Reset pin has to be High).

ATE - Enable / Disable echo

Variant Command Response Function
Execute ATE0 OK Disable echo (Doesn’t send back received command)
Execute ATE1 OK Enable echo (Sends back received command before response)
Note:
I haven’t had any luck with this command yet. Both ATE0 and ATE1 return no this fun.
ATE returns OK
This changed with ESP-12 where the command functions exactly as expected!

AT+CWMODE - WIFI mode(station, AP, station + AP)

Variant Command Response Function
Test AT+CWMODE=? +CWMODE:(1-3) OK List valid modes
Query AT+CWMODE? +CWMODE:mode OK Query AP’s info which is connect by ESP8266.
Execute AT+CWMODE=mode OK Set AP’s info which will be connect by ESP8266.
Parameters:
  • mode: An integer designating the mode of operation either 1, 2, or 3.
    1 = Station mode (client)
    2 = AP mode (host)
    3 = AP + Station mode (Yes, ESP8266 has a dual mode!)
Notes:
ESP-12 came configured as host with ssid set to ESP_A0A3F2, no password, channel 1 You can use AT+CWSAP? to find the current settings.

AT+CWJAP - Connect to AP

Variant Command Response Function
Query AT+CWJAP? + CWJAP:ssid OK Prints the SSID of Access Point ESP8266 is connected to.
Execute AT+CWJAP=ssid,pwd OK Commands ESP8266 to connect a SSID with supplied password.
Parameters:
  • ssid:String, AP’s SSID
  • pwd:String, not longer than 64 characters
Example:
AT+CWJAP="my-test-wifi","1234test"  
Example AT+CWJAP?
+CWJAP:"my-test-wifi"  

AT+CWLAP - Lists available APs

Variant Command Response Function
Set AT+CWLAP=ssid,mac,ch +CWLAP:ecn,ssid,rssi,mac OK Search available APs with specific conditions.
Execute AT+CWLAP AT+CWLAP:ecn,ssid,rssi,mac OK Lists available Access Points.
Parameters:
  • ecn:
    • 0 = OPEN
    • 1 = WEP
    • 2 = WPA_PSK
    • 3 = WPA2_PSK
    • 4 = WPA_WPA2_PSK
  • ssid: String, SSID of AP
  • rssi: signal strength
  • mac: String, MAC address
Note:
On ESP-01 I have had no luck with the set version of this command (AT+CWLAP=...). If you know what it does please let me know.
On ESP-12, the Set version of the command allows to see if a certain SSID, with certain MAC on certain channel exists. If it doesit is returned as one line of the Execute version of this command.
Example AT+CWLAP:
+CWLAP:(3,"CVBJB",-71,"f8:e4:fb:5b:a9:5a",1)
+CWLAP:(3,"HT_00d02d638ac3",-90,"04:f0:21:0f:1f:61",1)
+CWLAP:(3,"CLDRM",-69,"22:c9:d0:1a:f6:54",1)
+CWLAP:(2,"AllSaints",-88,"c4:01:7c:3b:08:48",1)
+CWLAP:(0,"AllSaints-Guest",-83,"c4:01:7c:7b:08:48",1)
+CWLAP:(0,"AllSaints-Guest",-83,"c4:01:7c:7b:05:08",6)
+CWLAP:(4,"C7FU24",-27,"e8:94:f6:90:f9:d7",6)
+CWLAP:(2,"AllSaints",-82,"c4:01:7c:3b:05:08",6)
+CWLAP:(3,"QGJTL",-87,"f8:e4:fb:b5:6b:b4",6)
+CWLAP:(4,"50EFA8",-78,"74:44:01:50:ef:a7",6)
+CWLAP:(0,"optimumwifi",-78,"76:44:01:50:ef:a8",6)
+CWLAP:(3,"BHQH4",-95,"18:1b:eb:1a:af:5b",6)
+CWLAP:(3,"NETGEAR49",-86,"84:1b:5e:e0:28:03",7)
+CWLAP:(3,"ngHub_319332NW00047",-56,"20:e5:2a:79:b1:2f",11)
+CWLAP:(3,"BFZR4",-73,"18:1b:eb:1d:c3:91",11)
+CWLAP:(1,"5FFVL",-82,"00:26:b8:b5:c0:f2",11)
+CWLAP:(3,"59G6D",-77,"00:7f:28:6d:91:7b",11)
+CWLAP:(3,"N16FU",-53,"20:cf:30:ce:60:fe",11)
+CWLAP:(3,"ITS",-82,"90:72:40:21:5f:76",11)
+CWLAP:(3,"ITS",-79,"24:a2:e1:f0:04:e4",11)
Example AT+CWLAP="N16FU","20:cf:30:ce:60:fe",11:
+CWLAP:(3,"N16FU",-53,"20:cf:30:ce:60:fe",11)

AT+CWQAP - Disconnect from AP

Variant Command Response Function
Execute AT+CWQAP OK Disconnect ESP8266 from the AP is currently connected to.
Note:
After running this command, if you run AT+CWJAP? it still shows the AP you were connected to before.

AT+CWSAP - Configuration of softAP mode

Variant Command Response Function
Query AT+CWSAP? +CWSAP:ssid,pwd,ch,ecn OK Query configuration of ESP8266 softAP mode.
Set AT+CWSAP=ssid,pwd,ch,ecn OK Set configuration of softAP mode.
Parameters:
  • ssid: String, ESP8266’s softAP SSID
  • pwd: String, Password, no longer than 64 characters
  • ch: channel id
  • ecn:
    • 0 = OPEN
    • 2 = WPA_PSK
    • 3 = WPA2_PSK
    • 4 = WPA_WPA2_PSK
Example
AT+CWSAP="esp_123","1234test",5,3
AT+CWSAP? => +CWSAP:"esp_123","1234test",5,3

AT+CWLIF - List clients connected to ESP8266 softAP

Variant Command Response Function
Execute AT+CWLIF [ip,other] OK List information on of connected clients.
Parameters:
ip: IP address of a client connected to the ESP8266 softAP other: Other info, look at example. I don’t know what it means yet.
Example (ESP-01):
AT+CWLIF

192.168.4.100,3fff50b4:3fff50ba:3fff50c0:3fff50c6:3fff50cc:3fff50d2

OK
Example (ESP-12):
AT+CWLIF

192.168.4.100,c0:ee:fb:25:33:ec

OK
I ran the command after connecting to the ESP8266 with my cellphone.

AT+CWDHCP - Enable/Disable DHCP

Variant Command Response Function
Set AT+CWDHCP=mode,en OK Enable or disable DHCP for selected mode
Parameters:
  • mode:
    • 0 : set ESP8266 as a softAP
    • 1 : set ESP8266 as a station
    • 2 : set both ESP8266 to both softAP and a station
  • en:
    • 0 : Enable DHCP
    • 1 : Disable DHCP
Note:
This command doesn’t seem to work on firmware 00160901 (ESP-01) nor 0018000902-AI03 (ESP-12).

AT+CIPSTAMAC - Set MAC address of ESP8266 station

Variant Command Response Function
Query AT+CIPSTAMAC? +CIPSTAMAC:mac OK Print current MAC ESP8266’s address.
Execute AT+CIPSTAMAC=mac OK Set ESP8266’s MAC address.
Parameters:
  • mac: String, MAC address of the ESP8266 station.
Example:
AT+CIPSTAMAC="18:aa:35:97:d4:7b"
Note:
This command doesn’t seem to work on firmware 00160901

AT+CIPAPMAC - Set MAC address of ESP8266 softAP

Variant Command Response Function
Query AT+CIPAPMAC? +CIPAPMAC:mac OK Get MAC address of ESP8266 softAP.
Execute AT+CIPAPMAC=mac OK Set mac of ESP8266 softAP.
Parameters:
  • mac: String, MAC address of the ESP8266 softAP.
Example:
AT+CIPAPMAC=”2c:aa:35:97:d4:7b”
Note:
This command doesn’t seem to work on firmware 00160901

AT+CIPSTA - Set IP address of ESP8266 station

Variant Command Response Function
Query AT+CIPSTA? +CIPSTA:ip OK Get IP address of ESP8266 station.
Execute AT+CIPSTA=ip OK Set ip addr of ESP8266 station.
Parameters:
  • ip: String, ip address of the ESP8266 station.
Example:
AT+CIPSTA=”192.168.101.108”
Note:
This command doesn’t seem to work on firmware 00160901

AT+CIPAP - Set ip address of ESP8266 softAP

Variant Command Response Function
Query AT+CIPAP? +CIPAP:ip OK Get ip address of ESP8266 softAP.
Execute AT+CIPAP=ip OK Set ip addr of ESP8266 softAP.
Parameters:
  • ip: String, ip address of ESP8266 softAP.
Example:
AT+CIPAP="192.168.5.1"
Note:
This command doesn’t seem to work on firmware 00160901

AT+CIPSTATUS - Information about connection

Variant Command Response Function
Test AT+CIPSTATUS=? OK
Execute AT+CIPSTATUS STATUS:status +CIPSTATUS:id,type,addr,port,tetype OK Get information about connection.
Parameters:
  • status
    • 2: Got IP
    • 3: Connected
    • 4: Disconnected
  • id: id of the connection (0~4), for multi-connect
  • type: String, “TCP” or “UDP”
  • addr: String, IP address.
  • port: port number
  • tetype
    • 0 = ESP8266 runs as a client
    • 1 = ESP8266 runs as a server
Note:
On ESP-01 this command returns STATUS:1 instead (no extra info, but status changes) On 0018000902-AI03 this command returns STATUS:2 instead (no extra info, but status changes)

AT+CIPSTART - Establish TCP connection or register UDP port and start a connection

Variant Command Response Function
Set AT+CIPSTART=type,addr,port OK Start a connection as client. (Single connection mode)
Set AT+CIPSTART=id,type,addr,port OK Start a connection as client. (Multiple connection mode)
Test AT+CIPSTART=? [+CIPSTART:(id)(“type”),(“ip address”),(port)] OK List possible command variations)
Parameters:
  • id: 0-4, id of connection
  • type: String, “TCP” or “UDP”
  • addr: String, remote IP
  • port: String, remote port

AT+CIPSEND - Send data

Variant Command Response Function
Test AT+CIPSEND=? OK
Set AT+CIPSEND=length SEND OK Set length of the data that will be sent. For normal send (single connection).
Set AT+CIPSEND=id,length SEND OK Set length of the data that will be sent. For normal send (multiple connection).
Execute AT+CIPSEND Send data. For unvarnished transmission mode.

Normal Mode

Parameters:
  • id: ID no. of transmit connection
  • length: data length, MAX 2048 bytes

Unvarnished Transmission Mode

Wrap return “>” after execute command. Enters unvarnished transmission, 20ms interval between each packet, maximum 2048 bytes per packet. When single packet containing “+++” is received, it returns to command mode.

AT+CIPCLOSE - Close TCP or UDP connection

Variant Command Response Function
Test AT+CIPCLOSE=? OK
Set AT+CIPCLOSE=id OK Close TCP or UDP connection.For multiply connection mode
Execute AT+CIPCLOSE OK Close TCP or UDP connection.For single connection mode
Parameters:
  • id: ID no. of connection to close, when id=5, all connections will be closed.
Note:
In server mode, id = 5 has no effect!

AT+CIFSR - Get local IP address

Variant Command Response Function
Test AT+CIFSR=? OK
Execute AT+CIFSR +CIFSR:ip OK Get local IP address.
Parameters:
  • ip: IP address of the ESP8266 as an client.
Example AT+CIFSR:
10.101.10.134

AT+CIPMUX - Enable multiple connections or not

Variant Command Response Function
Set AT+CIPMUX=mode OK Enable / disable multiplex mode (up to 4 conenctions)
Query AT+CIPMUX? +CIPMUX:mode OK Print current multiplex mode.
Parameters:
  • mode:
    • 0: Single connection
    • 1: Multiple connections (MAX 4)
NOTE:
This mode can only be changed after all connections are disconnected. If server is started, reboot is required.

AT+CIPSERVER - Configure as server

Variant Command Response Function
Set AT+CIPSERVER=mode[,port] OK Configure ESP8266 as server
Parameters:
  • mode:
  • 0: Delete server (need to follow by restart)
  • 1: Create server
  • port: port number, default is 333
NOTE:
  1. Server can only be created when AT+CIPMUX=1
  2. Server monitor will automatically be created when Server is created.
  3. When a client is connected to the server, it will take up one connection,be gave an id.

AT+CIPMODE - Set transfer mode

Variant Command Response Function
Query AT+CIPMODE? +CIPMODE:mode OK Set transfer mode,normal or transparent transmission.
Set AT+CIPMODE=mode OK Set transfer mode,normal or transparent transmission.
Parameters:
  • mode:
  • 0: normal mode
  • 1: unvarnished transmission mode

AT+CIPSTO - Set server timeout

Variant Command Response Function
Query AT+CIPSTO? +CIPSTO:time Query server timeout.
Set AT+CIPSTO=time OK Set server timeout.
Parameters:
  • time: server timeout, range 0~7200 seconds

AT+CIUPDATE - update through network

!!! Don’t run this unless you know what you’re doing !!!

### !!! It will likely brick your device !!! Attempts to self-update from the internet.
Variant Command Response Function
Execute AT+CIUPDATE +CIPUPDATE:n OK Start update through network
Parameters:
-n:
- 1: found server
- 2: connect server
- 3: got edition
- 4: start update
Example:
AT+CIUPDATE

+CIUPDATE: 1
+CIUPDATE: 2
+CIUPDATE: 3
+CIUPDATE: 4

\0x02\0x8cl\0x8el\0x8e\0x1cp\0x0c\0x8c\0xf2nn\0xee\0x00l\0x8c\0x8el`
\0x02\0x90\0x12\0x12nnl\0x8cl`\0x02\0x0e\0x02nr\0x8e\0x92\0x92n\0x0c\0x0c
\0x02\0x8c\0x92`\0x02`
\0xf2n\0x0c\0x0c\0x0c\0x9e\0xe0b\0x82nl\0x8c\0x0c\0x8c
\0xf2nn\0xee\0x00\0x0c\0x8e\0x0elp\0xf2n\0xe0\0x10\0x02\0x0c
\0x0cr\0x8c\0x9c\0x9c\0xe2\0xe0\0x0c\0x0c\0x0c
\0x0cb\0x0cn\0xe2|\0x02\0xec\0xecl\0x8c\0x0cb\0x8c\0xf2nn
...forever

venerdì 13 settembre 2013

Attivare WiFi su Raspberry Pi

La scheda Raspberry Pi fa ormai parte da giorni della mia scrivania e dei miei progetti. Come per Arduino, dopo qualche giorno di tempo trascorso su altri progetti, mi sono accorto che non mi ricordo piu' come ho raggiunto alcuni risultati (sara' colpa dell'età??), per evitare di ricominciare sempre tutto da capo, mi sono deciso anche in questo caso, a raccontare gli sviluppi ed i progressi con Raspberry Pi qui sul blog, in maniera tale da essere utile anche a qualcuno di voi lettori che seguite le mie indicazioni.


Quindi, uno dei primi scogli che ho dovuto scavalcare e' stata la corretta gestione della chiavetta WiFi compatibile.
 Qui di seguito i passi che ho compiuto per farla riconoscere al sistema e far comunicare la Raspberry Pi con l' AP della mia stazione.
Intanto la chiavetta che ho scelto e' questa   per il costo esiguo, solo 8 euro e per la sua totale compatibilita' con Raspberry Pi.
Naturalmente il collegamento alla Raspberry mod. B e' piu' semplice, in quanto il modello B e' dotato di 2 porte USB, quindi in una si puo' installare la chiavetta e nell'altro la tastiera per effettuare le modifiche, nel caso della Rasp mod. A invece, si deve scegliere due strade, o utilizzare un HUB USB autoalimentato ( perche la Rasp non ce la fa a fornire corrente sia per l'alimentazione dell'HUB che per la chiavetta ) e quindi poter cosi' utilizzare la tastiera direttamente collegata via USB, oppure collegare la Rasp mod A via serale al Mac e comunicare tramite seriale con la Shell per le relative modifiche e settaggi. In questo caso ho utilizzato questa seconda scelta ( mi piace complicarmi la vita!!)
Si parte quindi con il  collegamento della Raspberry Pi mod A attraverso i PIN della GPIO ad un adattatore seriale USB che sara' collegato al Mac. Io ho utilizzato questo, ma va bene anche questo , collegato alla USB ed ai PIN  TX, RX, GND della GPIO. Per comunicare da Mac si deve aprire la finestra di Terminale e col comando " ls /dev " si deve controllare il nome con cui viene  "vista" la scheda USB-seriale , nel mio caso tty.usbmodem431 .
A questo punto ci si collega col programma " screen " al device e con la velocita' di default della Raspberry PI che e' 115200 baud.
screen /dev/tty.usbmodem431 115200
A questo punto si collega l'alimentazione alla Raspberry e, se tutto e' andato a buon fine, nella finestra di terminale dovrebbero scorrere le scritte del boot di sistema.
Fare quindi il login con utente e password, che di default con il sistema operativo raspbian sono "pi" e "raspberry" .
i successivi comandi dipendono anche dalla configurazione del AP casalingo, nel mio caso ho soltanto il controllo del Mac address, ho scelto di eliminare le chiavi WPA e di utilizzare solamente il controllo del mac address, quindi non ho necessita' di configurare il wpa_supplicant, comunque ho aggiunto due righe alla sua configurazione ugualmente.
questi i comandi in sequenza
sudo apt-get update
sudo apt-get upgrade
 
sudo vi /etc/network/interfaces
 
Questa e' la configurazione standard:
auto lo
 
iface lo inet loopback
iface eth0 inet dhcp
 
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
 
Ho modificato  questo punto 
iface wlan0 inet manual
per far si che Raspberry si aspetti la registrazione in rete attraverso un server dhcp che le fornira'  la corretta numerazione con questo
iface wlan0 inet dhcp
cosi' ho ottenuto il mio settaggio definitivo:
auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wireless-essid OpenWrtCova
wireless-mode managed
iface default inet dhcp

 Ma si puo' anche scegliere di dare una numerazione fissa alla Rasp modificando il file con  questi comandi:
 
auto lo
iface lo inet loopback
iface eth0 inet dhcp
allow-hotplug wlan0
iface wlan0 inet manual
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
 
A questo punto ho modificato la configurazione di wpa_supplicant cosi':
 
sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
 
Aggiungedo a quanto gia' scritto nel file questa parte:
network={
ssid="SSID-GOES-HERE"
}
Nel caso che avessi la protezione con chiave WPA  avrei dovuto modificare cosi':
 
network={
ssid="SSID-GOES-HERE"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP TKIP
group=CCMP TKIP
psk="WIFI-PASSWORD-GOES-HERE"
}
 A questo punto per vedere se la chiavetta WiFi viene correttamente vista dal sistema due semplici controlli:
 
iwlist scan
Operazione che rende la lista degli AP "sentiti" dalla chiavetta, tra i quali ci dovrebbe essere anche quello di casa.
 
poi
 
ifconfig wlan0 up
Per "dire" al sistema di accendere il WiFi
 
e quindi:
iwconfig wlan0 essid nome_rete key off
Per accedere alla connessione con l'AP ( modificare il nome_rete con il vero nome dell'AP di casa), e ricordo che key off va bene nel mio caso perche' non ho controlli WPA, altrimenti il comando sarebbe stato key open
 
A questo punto la chiavetta si dovrebbe essere gia' illuminata e dovrebbe gia' aver cominciato il colloquio con l'AP
per ricevere la corretta numerazione da parte del server dhcp, l'ultimo comando
dhclient wlan0
Adesso , se tutto e' andato bene,si dovrebbe essere collegati tramite la chiavetta all'AP di casa, e quindi dovrebbe essere possibile creare una connessione ssh anche da un altro computer della nostra rete domestica.
 
In bocca al lupo e Stay Tuned
Tecnogeppetto