WEB SERIAL API permette di collegare ARDUINO con un COMPUTER, tramite una porta seriale USB.
E’ possibile inviare dati da COMPUTER verso ARDUINO e da ARDUINO verso COMPUTER; tutto questo grazie a javascript e, in particolare, a WEB SERIAL API. In questo brevissimo articolo, riporto un esempio. Ecco il codice per ARDUINO, che contiene istruzioni per comunicare attraverso una porta seriale (Serial.Begin, Serial.println, Serial.read) e il codice html e javascript con le istruzioni WEB SERIAL API.
*** PAGINA HTML per controllare ARDUINO ***
<html>
<head>
<meta charset = "UTF-8">
<style>
body{
background-color: #cce6ff;
}
header{
text-align: center;
height: 100px;
padding-top: 1px;
background-color: #3399ff;
color: #FFFFFF;
font-size: x-large;
}
h3{
margin-top: 2px;
text-align: center;
background-color: #80bfff;
}
form{
width: 45%;
display: inline-block;
margin: 20px;
}
footer{
margin-top: 3%;
text-align: center;
}
</style>
<script>
// var uint8array = new TextEncoder().encode("someString");
// var string = new TextDecoder().decode(uint8array);
var valori;
var uint8array;
var stringa;
var port;
var reader;
var writer;
var encoder;
function inizializza() {
valori = "cavoli miei";
document.all.valoriletti.value = "";
}
function cancella() {
document.all.valoriletti.value = "";
}
async function selezionaeapriportaascolta() {
// Prompt user to select any serial port.
port = await navigator.serial.requestPort();
// Wait for the serial port to open.
await port.open({ baudRate: 9600 });
// Listen to data coming from the serial device.
reader = port.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) {
// Allow the serial port to be closed later.
reader.releaseLock();
break;
}
// value is a Uint8Array.
stringa = new TextDecoder().decode(value);
valori = stringa;
document.all.valoriletti.value = document.all.valoriletti.value + valori;
}
}
async function scrivileggiseriale(comando) {
// Prompt user to select any serial port.
// port = await navigator.serial.requestPort();
// Wait for the serial port to open.
// await port.open({ baudRate: 9600 });
alert("Stai per inviare il comando");
encoder = new TextEncoder();
writer = port.writable.getWriter();
await writer.write(encoder.encode(comando));
writer.releaseLock();
}
// async function chiudiporta() {
// await port.close();
// }
</script>
</head>
<body onload="inizializza();" >
<header>
<h1>ARDUINO - Porta USB - Lettura - Scrittura</h1>
</header>
<textarea id = "valoriletti" rows = "20" cols = "20"></textarea>
<br>
<br>
<input type="text" id = "comando0" name = "comando0" /><br><br>
<br>
<button onclick="selezionaeapriportaascolta();" > Leggi seriale </button><br><br>
<input type="button" value="Invia il comando (scrittura/lettura)" onclick="scrivileggiseriale(document.all.comando0.value);" />
<br><br>
<input type="button" value="Cancella messaggi" onclick="cancella();" />
<footer>
<h1>ARDUINO - Leggo e Scrivo sulla "seriale"</h1>
</footer>
</body>
</html>
************************************
*** Sketch per ARDUINO *************
char dato = 'z';
void setup()
{
pinMode(5,OUTPUT);
Serial.begin(9600);
}
void loop()
{
dato = Serial.read();
if (dato == 'A') {digitalWrite(5,HIGH);};
if (dato == 'S') {digitalWrite(5,LOW);};
Serial.println(" Ho ricevuto ==> " + String(dato));
Serial.println("Prova di trasmissione, ogni 500 millisecondi...");
delay(500);
}
***********************************************
Per altre informazioni su WEB SERIAL API consiglio di cercare su internet. In questo articolo ho voluto semplicemente riportare un esempio pratico.
Andrea Paolini (Amministratore del Blog).