Montage |
https://www.banggood.com/600Pcs-Black-Carbon-Steel-10_9-Grade-Hexagon-Cap-Button-Head-Flat-Head-Screw-Nuts-Assortment-Set-p-1371234.html?rmmds=search&ID=41527&cur_warehouse=CN
Dit is ideale oplossing voor de Wifi sensor. |
- Aansluitingen
|
Je moet zelf pins aan de module solderen. Vervolgens kan de module met bijvoorbeeld een breadboard worden gebruikt.
- Seriële verbinding
Let op bij het aansluiten dat de Rx (Receive=ontvanger) van de ESP-01 moet worden aangesloten op een Tx (Transmit=zender) van de Arduino.
- Voedingsspanning
De voedingsspanning is 5Vdc. Alle andere aansluitpennen werken ook op TTL niveau.
|
Initialisatie |
Voor het gemak is hier een Arduino Mega 2560 gebruikt omdat deze meerdere seriële poorten bevat. Verder moet je op je mobiel een app installeren zoals bijvoorbeeld Wifi Analyzer. Hiermee kan je de Wifi signalen in je omgeving analyseren. Zodra de voeding wordt aangezet gaat het rode power-on ledje branden op de module. Bovendien verschijnt er in de Wifi Analyzer een acces point op kanaal 1, 2412 mHz, AI-THINKER_C1B532 (5e:cf:7f:c1:b5:32), safety = ESS, of iets vergelijkbaars.
Het blijkt dat het op mijn netwerk beter is om de snelheid terug te zetten naar 57600. Dit leidt tot aanzienlijk minder problemen op het netwerk. |
- Wat wil ik eigenlijk?
|
De ESP-01 is een zeer gecompliceerde module want hij bestaat uit meerdere gebruiksmodes. Dit komt omdat het eigenlijk een compleet systeem is dat eigenlijk geen Arduino nodig heeft. Daardoor bestaan er meerdere gebruiksmogelijkheden. Als je vervolgens op het internet gaat zoeken blijkt het nogal verwarrend te zijn. Je moet goed in de gaten houden wat je precies wil/verwacht van je ESP01.
|
|
Wat is deze module? |
Dit onderdeel bestaat uit een ESP-01 module (Wifi interfacing) en een verloopstukje naar een Arduino breadboard. Het verloopstukje zorgt er bijvoorbeeld voor dat de module op 5Vdc werkt. Ook de seriële communicatie mag gebeuren op 5Vdc.
De ESP-01 module bevat een ESP826 µcontroller, een Wifi chip en een opgebakken antenne. Dit is dus een complete IoT oplossing op zichzelf en heeft voor het gebruik zonder Arduino een eigen webpagina. Deze pagina gaat over het gebruik van de ESP-01 als module gekoppeld aan een Arduino, oftewel: `Hoe verbindt ik mijn Arduino robot met het internet?` Het mag hier wel verklapt worden dat dit via een seriële poort gebeurt.
Er bestaan 2 versies van de ESP-01 module, namelijk de blauwe oude (met 512k Byte flashgeheugen) en de nieuwe zwarte (met 1M Byte flashgeheugen). Wij beschrijven de (zwarte) nieuwe versie. Verder is de software op de ESP8266 µcontroller reeds volledig geschikt gemaakt als Wifi module voor algemeen gebruik met een Arduino. |
AT systeem test |
De module komt met AT software, dat wil zeggen dat de module zich laat sturen met AT-commando`s. AT is een afkorting voor “ATtention” en werd vroeger gebruikt met modems. Deze AT commando`s worden via een seriële verbinding op 115200 bps gecommuniceerd. Upload de ESP-01 sketch naar de Arduino en start. De systeem test antwoordt met Ok. Daarna laat de GMR zien dat wij met versie AT version:1.1.0.0(May 11 2016 18:09:56) van de voorgeïnstalleerde AT-software werken. Dit is een recente versie en deze loopt enkel op de nieuwe modules met groot geheugen. Het vervelende is dat er vele versies van de AT-software bestaan die allen een beetje anders zijn. Een andere AT versie zal dus anders reageren en mogelijkerwijze ook andere commando`s kennen. AT commando`s zijn leuk om netwerk mee te testen etc. maar ze zijn langzaam en omslachtig om mee te werken in een eigen sketch. Vandaar de volgende stap met bibliotheken.
|
Arduino bibliotheken |
- Welke bibliotheek heb ik nodig?
(Bron) The WiFi library is written for the Arduino WiFi Shield, which is completely different than the ESP8266. You cant use the WiFi library with the ESP8266. The ESP8266WiFi library is part of ESP8266 core for Arduino: https://github.com/esp8266/Arduino. which is used to directly program the ESP8266 via the Arduino IDE. The ESP8266WiFi library is similar to the WiFi library in that it attempts to use the same API but the actual code inside the libraries is different.
It appears that you are instead using the ESP8266 as a WiFi module. Likely it is connected to your Mega via serial and the ESP8266 is running the AT firmware. For that usage I recommend this library: https://github.com/bportaluri/WiFiEsp. It also uses the standardized API. When you are using the ESP8266 as a module you will not want to use the ESP8266 core for Arduino as you will be programming the Mega rather than the ESP8266.
- WifiEsp
WifiEsp blijkt de enige library die de regie op de Arduino houdt en de ESP01 als module gebruikt. De WiFiEsp bibliotheek laat zich installeren zoals iedere andere bibliotheek. WiFiEsp example: WebServerLed werkt dan, na enkele kleine aanpassingen, uitstekend. Wij zoeken een bibliotheek die werkt zonder dat wij iets op de ESP01 hoeven te installeren. In dat geval gebruiken we de ESP01 als WiFi module voor de Arduino. Er bestaan vele Wifi bibliotheken. Zo is er standaard een Wifi bibliotheek ingebouwd in de Arduino IDE. Deze is gebouwd voor een wifi schild dat via de SPI bus communiceert en dus sowieso ongeschikt is voor ons.
|
ESP8266 bibliotheken |
Het is ook mogelijk om de ESP01 zelfstandig te gebruiken, dus zonder Arduino. Hiervoor bestaat een aparte pagina.
|
//This is an include, so no parsing needed
$qry2 = ("SELECT onderdelen.*,
soortonderdeel.id
FROM onderdelen
JOIN soortonderdeel ON onderdelen.idsrtodd = soortonderdeel.id
WHERE onderdelen.partid = $idpart
;");
$result2 = pg_query($con1, $qry2);
$row4 = pg_fetch_array($result2); //Make the fields accesible
foreach( $row4 AS $key => $val ){
$$key = stripslashes( $val );
}
$jaar = substr($changeddate,0,4);
$maand = substr($changeddate,5,2);
$dag = substr($changeddate,8,2);
$lastupdate = ("$jaar $maand $dag");
$prtsrttxt = get_txt($con1, 26, 1, $idsrtodd);
$jaar = substr($createddate,0,4);
$maand = substr($createddate,5,2);
$dag = substr($createddate,8,2);
$create_stamp = ("$dag $maand $jaar");
//GENERAL INFO FOR EVERY USER **************************************************
echo (" ");
echo (""); //Header
$tmp = get_txt($con1, 9, $koekje[2], 3923); //Fieldname at screen
if ($koekje[3]=="1") { //If this user wants to translate then
echo ("$tmp"); //If desired
}else{ echo ("$tmp"); } //Else just show if no need to translate
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
echo (" (edit)");
}
echo ("Algemene informatie test | ");
if ($codetext) { //Code like KY-026 or NA-41
echo ("");
$tmp = get_txt($con1, 9, $koekje[2], 3739); //Fieldname at screen
if ($koekje[3]=="1") { //If this user wants to translate then
echo ("$tmp"); //Class for colour
}else{ //So you are not allowed to translate
echo $tmp; //Show screenname of this field in user language
} //End of If you want to translate this fieldname at screen
echo ("  | ");
if ($codelink) {
echo ("$codetext");
}else{
echo ("$codetext");
} //End of if ($pinoutlink)
echo (" | ");
} //End of if ($codetext)
$tmp = get_txt($con1, 9, $koekje[2], 3741); //Fieldname at screen
if ($prijseurinclbtw > 0){ //Show price indication
$prijs_formatted = number_format($prijseurinclbtw / 100, 2, ',', '.');
echo ("$tmp   | ");
echo ("");
if ($urlprijs){
echo ("€  $prijs_formatted");
}else{
echo ("€  $prijs_formatted");
} //End of if ($urlprijs > "")
echo (" | ");
} //End of if ($prijseurinclbtw > 0)
if ($sketchtext) { //Link to OWN SOFTWARE
$tmp = get_txt($con1, 9, $koekje[2], 3738); //Fieldname at screen
echo ("$tmp   | ");
if ($sketchlink) {
echo ("$sketchtext");
}else{
echo ("$sketchtext");
} //End of if ($sketchlink)
echo (" | ");
} //End of if ($sketchtext)
$tmp = get_txt($con1, 9, $koekje[2], 3744); //Fieldname at screen
if ($pinouttext) { //Pinout
echo ("$tmp   | ");
if ($pinoutlink) {
echo ("$pinouttext");
}else{
echo ("$pinouttext");
} //End of if ($pinoutlink)
echo (" | ");
}
$tmp = get_txt($con1, 9, 1, 3735); //Fieldname at screen
$tmp2 = get_txt($con1, 26, 1, $row4[16]); //Group name in its language
echo ("$tmp   | "); //MENU GROUP
echo ("");
echo ("$tmp2 | ");
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
$tmp = get_txt($con1, 9, $koekje[2], 3918); //Fieldname at screen LANGUAGE
if ($row4[26] == 1) {$imgname = "nederland.png";}
if ($row4[26] == 2) {$imgname = "deutschland.png";}
if ($row4[26] == 3) {$imgname = "uk.png";}
if ($row4[26] == 4) {$imgname = "france.png";}
echo ("$tmp | ");
echo ("");
echo (" | ");
$tmp = get_txt($con1, 9, $row4[27], 3919); //Fieldname at screen
$statuskey = get_status_key($con1, $status);
$tmp2 = get_txt($con1, 61, $koekje[2], $statuskey); //Fieldname at screen
echo ("$tmp   | "); //STATUS
echo ("$status $tmp2 | ");
}
$tmp = get_txt($con1, 9, 1, 3966); //Fieldname at screen
echo ("$tmp   | "); //LAST CHANGED
$tmp = substr($changeddate, 0, 10);
echo ("$tmp | ");
echo (" ");
return;
////////////////////////////////////////////////////////////////////////////////
function get_status_key($con, $num){
$qry = ("SELECT id FROM status WHERE nr = $num ;");
$result = pg_query($con, $qry);
$row = pg_fetch_array($result);
return ("$row[0]");
}
// LIST ALL SOFTWARE THAT WILL RUN OM THIS PART *****************************
// INCLUDED IN ALL ROBOTS TO CHECK THEIR DIRECTORY
$qry2=("SELECT tblsystext.txtname
, software.urlmain
, software.sftname
, software.sftid
, software.controller
FROM software
LEFT JOIN tblsystext ON software.controller = tblsystext.recordid
WHERE position(' $idpart ' in software.prtlst) > 0
AND software.rstid = 2
AND tblsystext.lanid = $koekje[2]
AND tblsystext.txlid = 19
ORDER BY sftname ASC
, controller ASC
;");
$result = pg_query($con1, $qry2);
if (pg_num_rows($result)>0) { //Only if at least 1 program exists
echo (' ');
echo (""); //Header
$tmp = get_txt($con1, 9, $koekje[2], 3922); //Fieldname at screen
if ($koekje[3]=="1") { //If this user wants to translate then
echo ("$tmp"); //If desired
}else{ echo ("$tmp"); } //Else just show if no need to translate
echo (" |
---|
");
while($col = pg_fetch_array($result)){
$col[0] = ("$col[0]");
echo (" ");
echo ("$col[2]   | ");
echo ("$col[0] | ");
if ($koekje[0] > 0 and $koekje[3]>0){ //User is logged in and translates
echo ("");
echo ("(Edit) | ");
}
echo (' ');
}
echo (' ');
}
?>
// LIST ALL ROBOTS THAT INCLUDE THIS PART ***********************************
// $idpart
// INCLUDED IN ALL ROBOTS TO CHECK THEIR DIRECTORY
$qry_bpp=("SELECT farmbotversie.id
, farmbotversie.part_list
, tblsystext.txtname
FROM farmbotversie
LEFT JOIN tblsystext ON farmbotversie.id = tblsystext.recordid
WHERE tblsystext.txlid = 27
AND tblsystext.lanid = $koekje[2]
ORDER BY tblsystext.txtname ASC
;");
$result_bpp = pg_query($con1, $qry_bpp);
$header = 0;
while($colbpp = pg_fetch_array($result_bpp)){ //Only if at least 1 robot exists
if(substr_count($colbpp[1], " $idpart ") > 0){
if ($header == 0) {
echo ("");
echo (""); //Header
$tmp = get_txt($con1, 9, $koekje[2], 3879); //Fieldname at screen
if ($koekje[3]=="1") { //If this user wants to translate then
echo ("$tmp"); //If desired
}else{ echo ("$tmp"); } //Else just show if no need to translate
echo (" | ");
$header++;
} //End of if ($header == 0)
echo ("");
echo ("$colbpp[2]");
//Show software van deze bot
$qry=("SELECT software_basedir
FROM farmbotversie
WHERE id = $colbpp[0];");
$result = pg_query($con1, $qry);
$col = pg_fetch_array ($result ,0);
$dir1 = "/var/www/html/robotigs/software/$col[0]";
$arr1 = glob($dir1, GLOB_ONLYDIR);
if (isset($arr1[0])){
$folder = $arr1[0];
$countertmp = 0;
echo ("");
foreach (scandir($folder, 1) as $filename) {
if ($filename<>"." AND $filename <>".."){
if ($countertmp == 0){
$countertmp++;
} //End of if ($countertmp == 0)
$tmp = "/";
$dir = substr($folder, 14) ."/";
$link = $tmp .$dir .$filename;
$showname = substr($filename, 0 ,-4);
echo ("- ");
echo "$showname";
echo ("
");
} //End of if ($filename<>"." AND $filename <>".."){
} //End of foreach (scandir($folder, 1) as $filename)
echo ("");
} //End of if (isset($arr1[0]))
echo (" | ");
}
}
if ($header > 0){
echo (" ");
}
?>
Warning: include(/var/www/html/robotigs/includes/wishlistperpart.php): Failed to open stream: No such file or directory in /var/www/html/robotigs/includes/parts_header.php on line 128
Warning: include(): Failed opening '/var/www/html/robotigs/includes/wishlistperpart.php' for inclusion (include_path='.:/usr/share/php') in /var/www/html/robotigs/includes/parts_header.php on line 128
| //Location:/robotigs/includes/ picts_show.php
// Requieres: $pict_list and several picture handling javascript routines
//*** FROM HERE ON THE PICTURE CORNER STARTS -----------------------------------
if ($pict_list){ //There are 1 or more pictures to be printed
echo ("");
$counter = 0;
$aantal = str_word_count($pict_list, 0, "0123456789");
$lijst = str_word_count($pict_list, 1, "0123456789");
while($counter < $aantal){
$pictkey = $lijst[$counter];
$qryy1 = ("SELECT *
FROM illustrations
WHERE ill_id = $pictkey
;");
$resulty1 = pg_query($con1, $qryy1);
while($row = pg_fetch_array($resulty1)){ //Fields accesible by their name
foreach( $row AS $key => $val ){
$$key = stripslashes( $val );
}
}
$image = ("/robotigs/documentatie/plaatjes/$ill_name");
$pictfull = str_replace('_small', '', $image); //Pictfull=biggest version
$alt = ("Just wait till your 57....");
$txtname = get_txt($con1, 18, $koekje[2], $ill_id); //Robot illustrations subtitles
echo ("");
echo (' ');
$nummer = $counter + 1;
$txtAfb = get_txt($con1, 9, $koekje[2], 3865); //Pic Afb
if ($koekje[0]>0 and $koekje[3]>0){ //User is logged in and translates
echo ("$txtAfb $nummer: ");
echo ("$txtname");
echo (" ");
echo ("Ontkoppelen ");
if ($counter==0){
echo ("Up ");
}else{
echo ("Up ");
}
if ($nummer == $aantal){
echo ("Down");
}else{
echo ("Down");
}
}else{ //Else of if Meaning the current useer is logged in
echo ("$txtAfb $nummer: $txtname");
}
echo (''); //End of this picture
$counter++; //Prepair for next picture
}
echo (' | '); //All pictures are printed
} //End of if there are 1 or more pictures to be printed ----------------------
?>