Sincronizaci
´
on de relojes embebidos en Internet
(E-SIC) sin hardware dedicado
Embedded Synchronizing Internet Clocks (E-SIC) without dedicated hardware
Javier Alejandro Atadia
∗1
, Ramiro Alonso
∗2
, Leonardo Mart
´
ın Carducci
∗3
∗
Universidad de Buenos Aires, Facultad de Ingenier
´
ıa, Argentina
1
jaatadia@fi.uba.ar,
2
ralonso@fi.uba.ar,
3
lcarducci@fi.uba.ar
Abstract—E-SIC is an algorithm designed to synchronize the
clocks of embedded controllers through a Local Area Network
(LAN) using 802.11 (WI-FI) technology. It’s based on the SIC
algorithm that synchronizes frequency between the clocks by
taking advantage of the symmetry of the networks round trip
time. By considering an historic window of measurements
and the usage of the mode as an estimation tool, the E-SIC
algorithm has achieved absolute clock sync between two
devices with a higher accuracy than two milliseconds without
the requirement of extra hardware.
Keywords: clock; synchronization; WI-FI; IoT.
Resumen— E-SIC es un algoritmo dise
˜
nado para la
sincronizaci
´
on de relojes en controladores embebidos a trav
´
es
de una red local (LAN) con tecnolog
´
ıa 802.11 (WI-FI). Dicho
algoritmo esta basado en el algoritmo SIC que sincroniza
frecuencia entre relojes suponiendo la simetr
´
ıa en los caminos
de ida y retorno de los mensajes. Al utilizar una ventana de
tiempo hist
´
orica y la moda como herramienta de estimaci
´
on,
el algoritmo E-SIC logra sincronizaci
´
on entre dispositivos con
una exactitud mejor que dos milisegundos sin necesidad de
hardware extra.
Palabras clave: relojes; sincronizaci
´
on; WI-FI; IoT.
I. INTRODUCCI
´
ON
La Facultad de Ingenier
´
ıa de la Universidad de Buenos
Aires, ha comenzado el desarrollo de redes de sensores
para la medici
´
on de distintas variables f
´
ısicas (por ejemplo:
aceleraci
´
on triaxial o temperatura) en diversas estructuras
civiles. Dichas mediciones presentan un per
´
ıodo de muestreo
de 2 ms por lo que debemos asegurar una sincronizaci
´
on
absoluta con un error menor a 1 ms para poder correlacionar
los datos recolectados por los diferentes dispositivos que
supervisan una estructura.
Un sistema distribuido de tiempo real consiste en un
conjunto de nodos que est
´
an interconectados por un red
local y se comunican solamente mediante el intercambio de
mensajes. Cada nodo es una computadora auto contenida
(o microcontrolador) y contiene un reloj de tiempo real de
la precisi
´
on que puede dar un cristal de cuarzo [1] de uso
est
´
andar en dichos microcontroladores. Dependiendo del uso
espec
´
ıfico que se le de a cada sistema, se le exigir
´
a a los
relojes que est
´
en sincronizados con la exactitud requerida
en cada caso. La misma puede ser desde el orden de los
segundos, hasta los microsegundos.
Presentamos a continuaci
´
on un an
´
alisis de los sistemas de
sincronizaci
´
on existentes. Cabe destacar que la bibliograf
´
ıa
existente sobre la sincronizaci
´
on de relojes en sistemas
distribuidos tanto en redes cableadas como inal
´
ambricas [2]
es bastante extensa por lo que solo citaremos la necesaria
para comprensi
´
on del marco general del tema.
a) Global Navigation Satellite System (GNSS): Los
algoritmos de Sincronizaci
´
on por GNSS [3] utilizan la
se
˜
nales de una constelaci
´
on sat
´
elites geosincr
´
onicos para
para estimar el tiempo. Cada nodo debe tener el hardware
necesario para recibir dichas se
˜
nales y debe contar con
disponibilidad constate de al menos cuatro sat
´
elites suficien-
temente dispersos por el cielo y no debe haber obstrucciones
para que la sincronizaci
´
on sea confiable. La visibilidad de
los sat
´
elites en posiciones alejadas hace casi impracticable
este sistema en muchas situaciones. Trabajos previos han
logrado sincronizaciones menores a los 3 µs [4], pero debido
a la aplicaci
´
on de nuestros dispositivos en estructuras civiles
donde la se
˜
nal es f
´
acilmente obstruida y principalmente el
costo extra en la construcci
´
on de los sensores hacen que esta
opci
´
on no sea viable.
b) Network Time Protocol (NTP): NTP [5] es el al-
goritmo de facto utilizado en Internet. Nodos clientes se
sincronizan contra un nodo servidor envi
´
andole paquetes
a trav
´
es de UDP y esperando su respuesta. NTP realiza
un an
´
alisis estad
´
ıstico de los datos recolectados y suele
sincronizar en forma absoluta cada un minuto, modificando
el RTC (Real Time Clock) local, que a su vez se traduce en
variaciones del reloj del orden de los cientos de milisegun-
dos. Dichas variaciones impiden la correlaci
´
on de los datos
con una precisi
´
on en el orden de 1 ms.
c) Precision Time Protocol (PTP): El algoritmo PTP
[6] cuenta con una arquitectura maestro-esclavo donde el
proceso de sincronizaci
´
on es comenzado por el nodo mae-
stro. Este algoritmo se usa en redes locales cableadas y con
hardware dedicado logra una precisi
´
on de microsegundos.
La implementaci
´
on de dicho protocolo en sistemas embe-
bidos e inal
´
ambricos ha sido estudiada por diversos autores
y se han logrado resultados aceptables con eficiencia en-
erg
´
etica [7] [8] [9]. Sin embargo, el hardware necesario para
que el algoritmo alcance la exactitud requerida aumentan el
costo de los nodos, lo que imposibilita su uso en nuestro
sistema.
d) Synchronizing Internet Clocks (SIC): El algoritmo
SIC [10] trabaja en modo cliente-servidor. El cliente realiza
consultas peri
´
odicas al servidor y analiza estad
´
ısticamente
los resultados para estimar par
´
ametros de conversi
´
on para
el reloj interno, en donde se utiliza una funci
´
on que provee
la hora con la correcci
´
on. Este algoritmo no cambia el
Revista elektron, Vol. 5, No. 2, pp. 112-119 (2021)
ISSN 2525-0159
112
Recibido: 09/10/21; Aceptado: 08/11/21
Creative Commons License - Attribution-NonCommercial-
NoDerivatives 4.0 International (CC BY-NC-ND 4.0)
https://doi.org/10.37537/rev.elektron.5.2.137.2021
Original Article
reloj interno por lo que se evitan saltos de tiempo cuando
se realizan las consultas. Sin embargo, este algoritmo fue
concebido para sincronizaci
´
on en frecuencia en Internet, y
por lo tanto no es una sincronizaci
´
on absoluta, como es
necesario en este caso. Los errores reportados de valores
absolutos rondan las d
´
ecimas de milisegundos, con algunos
microsegundos en la sincronizaci
´
on de frecuencia.
El protocolo SIC cuenta con un m
´
aquina de estados que
puede tomar tres diferentes valores, NO-SYNC, PRE-SYNC y
SYNC. SIC empieza en estado NO-SYNC, toma una muestra
cada un segundo, y a los seiscientos segundos transiciona
al estado PRE-SYNC debido a que ya puede calcular un
primer valor de sincronismo. Finalmente luego de sesenta
segundos de encontrarse en el estado PRE-SYNC el estado
cambia al estado SYNC porque tiene mediciones suficientes
para calcular con precisi
´
on la diferencia de relojes. De esta
manera, una vez inicializado el algoritmo
´
este demora once
minutos hasta que comienza a producir aproximaciones.
Si en cualquier momento se detecta un cambio sustancial
en los tiempos de las muestras recolectadas, o se pierden
suficientes muestras, el estado vuelve a NO-SYNC (porque
estima un cambio de ruta) y comienza nuevamente el
proceso.
II. ALGORITMO DE SINCRONIZACI
´
ON E-SIC
El algoritmo E-SIC toma como base el algoritmo SIC [10]
y le realiza modificaciones para lograr los requerimientos de
sincronizaci
´
on absoluta esperados.
A. Protocolo de intercambio de paquetes
El protocolo de intercambio de paquetes del algoritmo E-
SIC es el mismo que el presentado por el algoritmo SIC.
El cliente intercambia paquetes sobre UDP (del ingl
´
es, User
Datagram Protocol) como podemos apreciar en la Fig. 1.
El intercambio de paquetes comienza cuando el cliente
emite un paquete con el timestamp del instante de su envi
´
o
al servidor (t
1
). El servidor recibe el paquete luego de
un tiempo desconocido que denominaremos t(c → s) y
le adjunta su timestamp correspondiente a la recepci
´
on de
dicho paquete (t
2
). Una vez procesado el paquete, el servidor
lo reenv
´
ıa al cliente adjunt
´
andole previamente su timestamp
actual (t
3
). Finalmente el cliente recibe el paquete despu
´
es
de un tiempo desconocido que denominaremos t(s → c) y
le agrega su timestamp correspondiente a la recepci
´
on (t
4
).
De esta manera el cliente ahora cuenta con cuatro valores
que procesar
´
a para poder realizar correcciones al momento
de informar el tiempo actual. N
´
otese que los timestamps t
1
y t
4
fueron creados usando el reloj del cliente, mientras que
los timestamps t
2
y t
3
refieren al reloj del servidor. Si tanto
el mensaje o su respuesta se pierden en el camino, esto es
detectado y se procede a descartar la presente medici
´
on. Si
llegasen a ocurrir una determinada cantidad de estos fallos
sucesivos el algoritmo se reinicia, comenzando nuevamente
el proceso de sincronizaci
´
on.
En la linea 11 del Algoritmo 1 se desencadena el inter-
cambio de paquetes descriptos en pseudoc
´
odigo del Algor-
timo 2, y finalmente el Algoritmo 3 muestra el pseudocodigo
del intercambio de paquetes del lado del servidor.
Fig. 1. Intercambio de paquetes del algoritmo SIC.
B. Cambios al algoritmo SIC
En la implementaci
´
on y definici
´
on del algoritmo E-SIC se
realizaron los siguientes cambios: eliminaci
´
on del an
´
alisis de
cambio de caminos, eliminaci
´
on de la verificaci
´
on de firmas
de paquetes y del reloj local para el cambio de estados,
y modificaci
´
on del estimador del desfasaje instant
´
aneo. El
objetivo es hacer el protocolo m
´
as simple para adecuarlo as
´
ı
al uso de microcontroladores y al entrono de un red de
´
area
local (del ingl
´
es, LAN) que es un entorno controlado. Todas
estas modificaciones atacan temas transversales al proceso
de la sincronizaci
´
on
1) An
´
alisis de cambio de caminos: El algoritmo SIC
cuenta con un mecanismo que detecta el cambio de rutas
que recorren los paquetes entre el cliente y el servidor,
y en caso de detectar dicho cambio procede a limpiar
es estado interno del modelo y recomenzar el proceso de
sincronizaci
´
on desde su primer fase. Debido a la aplicaci
´
on
por la cual se desarroll
´
o este trabajo, basta con que nuestro
sistema funcione dentro de una red local (LAN), por lo que
no habr
´
a cambio de las rutas entre los nodos del sistema.
Por este motivo procedemos a remover esta secci
´
on del
algoritmo.
2) Firma de paquetes y validaciones de identidad: Para
asegurar que los paquetes que reciben el servidor y los
clientes sean autentificados, la especificaci
´
on de algoritmo
SIC propone un esquema de validaci
´
on de paquetes y firmas;
de esta manera el modelo se encuentra protegido en caso
ante ciertos ataques maliciosos. Suponiendo que el tr
´
afico
del algoritmo no deber
´
ıa salir de la LAN sobre la que
tenemos completo control, estos procesamientos adicionales
de seguridad pueden ser obviados sin suponer una vul-
nerabilidad en el sistema; ya que no se atraviesa ning
´
un
enrutador intermediario.
3) Uso del reloj local: El algoritmo SIC supone que
se colecta una muestra por segundo y utiliza el transcurso
del tiempo para controlar la transici
´
on de estados y no la
cantidad de muestras recolectadas. Debido a esto, En caso de
demoras o fallos en la recolecci
´
on de las marcas de tiempos
(timestamps), se produce una transici
´
on de estados antes de
que este posea todas las muestras que requiere para realizar
una buena estimaci
´
on. Como soluci
´
on a estos problemas
introduciremos una variable que funcionara como contador
de los ciclos que han transcurrido, por lo que el uso del reloj
local quedara limitado s
´
olo a la recolecci
´
on de timestamps.
4) C
´
alculo del desfasaje instant
´
aneo: En esta secci
´
on
introducimos un m
´
etodo de c
´
alculo de desfasaje y su
correcci
´
on, ver el Algoritmo 1 utilizado. La primera gran
diferencia entre el algoritmo SIC y su variante E-SIC es
la introducci
´
on de una constante para modelar la diferencia
Revista elektron, Vol. 5, No. 2, pp. 112-119 (2021)
ISSN 2525-0159
113
http://elektron.fi.uba.ar
entre los tiempos de ida y de regreso de los paquetes al
servidor. El c
´
alculo de la diferencia instant
´
anea de los relojes
se basa en la siguiente ecuaci
´
on:
t
c
= t
s
+ φ , (1)
donde t
c
representa el tiempo seg
´
un el reloj del cliente,
t
s
representa el tiempo seg
´
un el reloj del servidor, y φ
representa el desfasaje entre ellos. Consideramos que el
valor de φ varia en el tiempo siguiendo el Simple Skew
Model [11]:
φ(t) = K + F · t , (2)
donde K es una constante que representa la diferencia abso-
luta entre el tiempo de los dos relojes y F que representa la
diferencia en frecuencia de los dos relojes. K y F se podr
´
ıan
modelar como variables aleatorias pero eso est
´
a fuera del
alcance de este trabajo.
Si aplicamos los valores de la interacci
´
on entre el cliente y
servidor que describimos en la secci
´
on anterior a la ecuaci
´
on
1 obtenemos las siguientes ecuaciones:
t
1
= t
2
− t(c → s) + φ (3)
t
4
= t
3
+ t(s → c) + φ , (4)
donde:
• t
1
: timestamp utilizando el reloj del cliente del mo-
mento en el que el mensaje de sincronizaci
´
on fue
enviado por el cliente.
• t
2
: timestamp utilizando el reloj del servidor del mo-
mento en el que el mensaje de sincronizaci
´
on fue
recibido por el servidor.
• t
3
: timestamp utilizando el reloj del servidor del mo-
mento en el que la respuesta del mensaje de sin-
cronizaci
´
on fue enviada por el servidor.
• t
4
: timestamp utilizando el reloj del cliente del mo-
mento en el que la respuesta del mensaje de sin-
cronizaci
´
on fue recibida por el cliente.
• t(c → s): tiempo que demor
´
o el env
´
ıo del paquete entre
el cliente y el servidor.
• t(s → c): tiempo que demor
´
o el env
´
ıo de la respuesta
entre el servidor y el cliente.
Suponiendo la constante ρ como la relaci
´
on entre la
demora del env
´
ıo del paquete sobre la demora de la re-
cepci
´
on obtenemos la siguiente ecuaci
´
on:
t(c → s) = ρ · t(s → c) . (5)
Despejando las demoras de env
´
ıo de paquetes de las
ecuaciones 3 y 4 obtenemos las ecuaciones 6 y 7 respecti-
vamente:
t(c → s) = φ − t
1
+ t
2
(6)
t(s → c) = −φ − t
3
+ t
4
, (7)
de esta manera, reemplazando 6 y 7 en 5 obtenemos
φ − t
1
+ t
2
= ρ · (−φ − t
3
+ t
4
) . (8)
Despejando φ de la ecuaci
´
on 8 llegamos al resultado:
φ =
t
1
− t
2
− ρ · t
3
+ ρ · t
4
ρ + 1
. (9)
Dicha ecuaci
´
on se puede observar en la l
´
ınea 14 del
Algoritmo 1.
El uso de ρ responde a que en los procesos de redes WiFi
puede existir asimetr
´
ıa entre el comportamiento del punto de
acceso y los clientes, afectando as
´
ı al φ. Si supusi
´
esemos
simetr
´
ıa entre los caminos de env
´
ıo y recepci
´
on de los pa-
quetes, es decir ρ = 1, llegamos a la ecuaci
´
on 10 propuesta
por el algoritmo SIC. Dicha constante la consideramos una
variable conocida del sistema:
φ = (t
1
− t
2
− t
3
+ t
4
)/2 . (10)
5) Estimaci
´
on del desfasaje: Una vez que obtenemos el
desfasaje instant
´
aneo, este es guardado en un vector junto
con las
´
ultimas 599 muestras (l
´
ınea 15 del Algoritmo 1).
Debido a que el modelado del ruido en la mediciones
no es sencillo, ya que depende de muchos factores que
podr
´
ıan tener correlaci
´
on entre ellos, s
´
olo trabajamos con
las mediciones estad
´
ısticas de los tiempos. Cada sesenta
muestras tomamos la moda de las estimaciones instant
´
aneas,
esto nos asegura que estemos tomando los valores m
´
as fre-
cuentes de φ. La moda la calcularemos utilizado el algoritmo
Half Sample Mode (HSM) [12], que analiza recursivamente
el vector de muestras hasta encontrar la posici
´
on de la
moda. Una vez encontrada la moda, tomaremos los quince
valores ubicados a su alrededor para luego ser guardados
junto con las modas que hemos ido extrayendo durante
los
´
ultimos treinta minutos (lineas 18-23). Finalmente, las
modas guardadas son interpoladas linealmente y promedi-
adas con las anteriores interpolaciones (lineas 36-26). Tras
lograr la sincronizaci
´
on inicial luego de 12 minutos de su
inicializaci
´
on para el algoritmo SIC y aproximadamente 30
minutos para el algoritmo E-SIC, en el caso que no se hayan
perdido mediciones, estos son capaces de estimar el tiempo
del servidor usando el reloj interno y la siguiente formula
que se desprende de la ecuaci
´
on 1:
t
s
= (1 − pendiente) · t
c
− ordenada , (11)
done pendiente y ordenada son la pendiente y ordenada
al origen productos de las interpolaciones del algoritmo,
relacionando el tiempo en el servidor t
s
con el tiempo en
el cliente t
c
.
El algoritmo E-SIC introduce las siguientes diferencias al
calculo de la estimaci
´
on del valor de φ con respecto a su
contra parte SIC:
• Guardado del tiempo correspondiente al φ instant
´
aneo.
Por cada muestra recolectada, SIC extrae la mediana
de las estimaciones instant
´
aneas y las guarda para su
interpolaci
´
on junto con el t
1
de la muestra entrante.
Sin embargo, ya que φ varia en funci
´
on del tiempo,
debido a la diferencia de frecuencias entre los relojes,
esto introduce error en el c
´
alculo. E-SIC propone
guardar junto con cada estimaci
´
on instant
´
anea el valor
de tiempo al que corresponde dicha estimaci
´
on, de esta
manera eliminamos esa fuente de error.
• Uso de la moda en vez de la mediana. SIC propone el
uso de la mediana, ya que al estar dise
˜
nado para fun-
cionar sobre Internet, dicha medida proporciona mayor
robustez ante las variaciones de demoras causadas por
el tr
´
afico de datos (que presenta una estad
´
ıstica con
Revista elektron, Vol. 5, No. 2, pp. 112-119 (2021)
ISSN 2525-0159
114
http://elektron.fi.uba.ar
grandes variaciones). Como E-SIC funciona sobre una
´
unica LAN, el problema de las grandes variaciones de
tr
´
afico desaparece, entonces la moda y el entorno de
muestras alrededor de ella representan mejor el estado
actual del desfasaje. La diferencia entre las dos medidas
pueden ser observadas en la Fig. 2, donde vemos que
la moda se acerca m
´
as al pico de φ instant
´
aneo que la
mediana, situaci
´
on distinta a la que se observa usando
SIC en Internet. Dicha figura fue realizada deteniendo
el algoritmo tras el agregado de una nueva iteraci
´
on
del algoritmo, recolectando los valores de las
´
ultimas
600 estimaciones instant
´
aneas de φ y realizando un
histograma con ellas, donde marcamos la mediana y
la moda de las mencionadas muestras.
• Cambio de la frecuencia de extracci
´
on del vector de
muestras. El algoritmo SIC, plantea que por cada mues-
tra insertada realizamos una extracci
´
on de la mediana o
la moda y ese valor es apartado junto con los
´
ultimos 59
valores para el uso posterior en la interpolaci
´
on lineal.
El algoritmo E-SIC plantea espaciar esta extracci
´
on
a una vez por minuto y conservar las
´
ultimas 30
extracciones para realizar la interpolaci
´
on.
III. EXPERIMENTOS
El algoritmo fue implementado en un microcontrolador
ESP32 [13] utilizando el lenguaje de programaci
´
on C, por
medio de su compilador GCC. Para mayores detalles sobre
la implementaci
´
on, el c
´
odigo fuente se encuentra disponible
en https://github.com/jaatadia/tic-toc-sic.
Para su implementaci
´
on, el algoritmo fue modularizado
de manera tal que la recolecci
´
on y el procesamiento de los
timestamps sean independientes. Ya que la interacci
´
on con
los sistemas externos suele depender de llamadas al sistema,
esta decisi
´
on nos permite la portabilidad del procesamiento
de los timestamps a cualquier sistema de manera directa.
A. Banco de pruebas
Las mediciones se realizaron utilizando el banco de
pruebas de la Fig. 3. En esta podemos ver:
1. ESP32 funcionando en modo servidor.
2. Arduino funcionando como generador de una onda
cuadrada con un per
´
ıodo de diez segundos.
−125.650 −125.645 −125.640 −125.635 −125.630
ϕ
= tc - ts (Segundos)
0
10
20
30
40
50
60
# de muestras
Mediana
Moda
Fig. 2. Histograma de φ recolectados con distinci
´
on de la moda y la
mediana.
Algoritmo 1 E-SIC Cliente.
1: ALP HA ← 0.95 // Coeficiente de ponderaci
´
on de las interpolaciones.
2: NRO MODAS ← 15 // Cantidad de muestras al rededor de la moda
a tener en cuenta.
3: P ERIODO ← 60 // Cantidad de ciclos entre interpolaciones.
4: MAX M UEST RAS ← 600 // Tama
˜
no del vector que contienen
las muestras.
5: MAX M ODAS ← 30 ∗ NRO MODAS // Tama
˜
no del vector
que contienen las modas.
6: estado ← NO SY N C
7: contador ← 0
8: muestras ← 0
9: modas ← 0
10: while true do
11: (t
1
, t
2
, t
3
, t
4
) ← obtenerT imestamps()
12: contador ← contador + 1
13:
14: φ ← (t
1
− t
2
− ρ · t
3
+ ρ · t
4
)/(ρ + 1)
15: vectorDeMuestras[muestras] ← (t
1
, φ)
16: muestras ← (muestras + 1)%MAX MUESTRAS
17:
18: if (contador%P ERIODO == 0) then
19: modasAUtilizar ←
hsm(ordenar(vectorDeM uestras), NRO MODAS)
20: while (t
i
, φ
i
) ← modasAUtilizar do
21: vectorDeModas[modas] ← (t
i
, φ
i
)
22: modas ← (modas + 1)%MAX M ODAS
23: end while
24: end if
25:
26: if (estado == NO SY NC y contador ==
MAX
MUEST RAS) then
27: contador ← 0
28: (pendiente, ordenada) ←
interpolacion lineal(vectorModas)
29: estado ← P RE SY NC
30: else if ((estado == P RE SY NC o estado ==
SY NC) y contador == P ERIODO) then
31: contador ← 0
32: (aux
pendiente, aux ordenada) ←
interpolacion lineal(vectorMedianas)
33: pendiente ← ALP HA· aux pendiente +(1− ALPHA)·
pendiente
34: ordenada ← ALP HA · aux ordenada + (1 − ALP HA) ·
ordenada
35: estado ← SY NC
36: end if
37: dormirHastaElP roximoSegundo()
38: end while
Algoritmo 2 E-SIC Cliente: obtenerTimestamps().
1: t
1
← epoch() // tiempo del reloj del cliente
2: enviarServirdor(t
1
)
3: (t
1
, t
2
, t
3
) ← recivirDelServidor()
4: t
4
← epoch() // tiempo del reloj del cliente
5: return (t
1
, t
2
, t
3
, t
4
)
Algoritmo 3 E-SIC Servidor
1: while true do
2: (cliente, t
1
) ← recibir()
3: t
2
← epoch() // tiempo del reloj del servidor
4: ... // operaciones entre la recepci
´
on y el env
´
ıo propias de la
implementaci
´
on
5: t
3
← epoch() // tiempo del reloj del servidor
6: enviar(cliente, (t
1
, t
2
, t
3
))
7: end while
3. LED que se ilumina cuando la onda cuadrada generada
por el Arduino se encuentra en su valor alto.
4. Divisor de resistivo para adaptar la tensi
´
on de la onda
cuadrada a la tensi
´
on de entrada de los ESP32.
5. ESP32 funcionando en modo cliente.
Los ESP32 se alimentan a trav
´
es de un cable USB
Revista elektron, Vol. 5, No. 2, pp. 112-119 (2021)
ISSN 2525-0159
115
http://elektron.fi.uba.ar