Сеть

Сеть

Настройка и включение сети

  1. Настройте интерфейс.

    -- Настройка Wi-Fi
    net.wf.setup(...)
  2. Запустите интерфейс.

    -- Запуск Wi-Fi
    net.wf.start()
  3. Взаимодействуйте с сетью, например, создайте экземпляр клиента MQTT и опубликуйте несколько сообщений.

  4. Остановите интерфейс.

    -- Остановка Wi-Fi
    net.wf.stop()

net.connected()

Проверьте доступность сети. Сеть доступна, если один из сетевых интерфейсов включен и имеет IP-адрес.

Аргументы: нет.

Возвращает: true, если сеть доступна, false, если не доступна, или исключение.

net.stat([table])

Получите сетевую информацию для всех доступных интерфейсов.

Аргументы:

  • table: если true, сетевая информация помещается в таблицу Lua, если false — информация выводится на консоль.

Возвращает:

  • если table равно false: ничего или исключение.

  • если table равно true: таблицу Lua с сетевой информацией или исключение. Эта таблица является массивом таблиц. Каждая запись соответствует интерфейсу, и каждый интерфейс имеет следующие поля:

    • interface: имя интерфейса (wf = Wi-Fi, en = Ethernet).
    • ip: IP интерфейса.
    • gw: IP шлюза интерфейса.
    • netmask: маска подсети интерфейса.
    • mac: MAC-адрес интерфейса.
/ > net.stat()
wf: mac address 24:0a:c4:00:c9:5c
   ip address 192.168.1.41 netmask 255.255.255.0
   gw address 192.168.1.1
net.stat(true)

ip = net.packip(ip1, ip2, ip3, ip4)

Возвращает представление IPv4-адреса в пакетной форме, которое можно использовать со всеми функциями модуля net, требующими IP-адрес в качестве аргумента. IP-адрес предоставляется из 4 элементов, составляющих IPv4-адрес: ip1.ip2.ip3.ip4

Аргументы:

  • ip1: первая часть IP-адреса
  • ip2: вторая часть IP-адреса
  • ip3: третья часть IP-адреса
  • ip4: четвертая часть IP-адреса

Возвращает: целое число, кодирующее IP-адрес.

localhost = net.packip(127,0,0,1)
print(localhost)
16777343

ip = net.packip(“ip”)

Возвращает представление IPv4-адреса в пакетной форме, которое можно использовать со всеми функциями модуля net, требующими IP-адрес в качестве аргумента. IP-адрес предоставляется в каноническом представлении IPv4.

Аргументы:

  • ip: строка IP-адреса в каноническом представлении IPv4.

Возвращает: целое число, кодирующее IP-адрес.

localhost = net.packip("127.0.0.1")
print(localhost)
16777343

ip1, ip2, ip3, ip4 = net.unpackip(ip, ‘*n’)

Возвращает распакованное представление IPv4-адреса, упакованного функцией net.packip. Распакованное представление предоставляется 4 элементами, составляющими IPv4-адрес.

Аргументы:

  • ip: упакованный IP-адрес

Возвращает:

  • ip1: первая часть IP-адреса
  • ip2: вторая часть IP-адреса
  • ip3: третья часть IP-адреса
  • ip4: четвертая часть IP-адреса
localhost = net.packip("127.0.0.1")
ip1, ip2, ip3, ip4 = net.unpackip(localhost, '*n')
print(ip1.." "..ip2.." "..ip3.." "..ip4)
127 0 0 1

ip = net.unpackip(ip, ‘*s’)

Возвращает распакованное представление IPv4-адреса, упакованного функцией net.packip. Распакованное представление IP-адреса предоставляется в каноническом представлении IPv4.

Аргументы:

  • ip: упакованный IP-адрес

Возвращает: строку IP-адреса в каноническом представлении IPv4.

localhost = net.packip("127.0.0.1")
ip = net.unpackip(localhost, '*s')
print(ip)
127.0.0.1

ip = net.lookup(hostname)

Выполняет поиск DNS.

Аргументы:

  • hostname: имя хоста, для которого выполняется поиск

Возвращает: упакованный IP-адрес хоста.

ip = net.lookup("whitecatboard.org")
print(net.unpackip(ip, "*s"))
207.148.248.143

Wi-Fi

net.wf.scan([table])

Выполняет сканирование Wi-Fi сетей.

Аргументы:

  • table: если true, результат сканирования возвращается в таблице Lua, если false — результат выводится на консоль.

Возвращает:

  • если table равно false: ничего или исключение.

  • если table равно true: таблицу Lua с результатами сканирования или исключение. Эта таблица представляет собой массив таблиц. Каждая запись соответствует станции. Каждая станция предоставляет следующие поля:

    • ssid: SSID точки доступа.
    • rssi: сила сигнала RSSI.
    • auth: тип авторизации. Может быть net.wf.auth.OPEN, net.wf.auth.WEP, net.wf.auth.WPA_PSK, net.wf.auth.WPA2_PSK или net.wf.auth.WPA_WPA2_PSK.
    • ch1: основной канал точки доступа
    • ch2: второстепенный канал точки доступа
-- Scan wifi, and print to the console
/ > net.wf.scan()


                           SSID  RSSI          AUTH  CH1  CH2
-------------------------------------------------------------
          Xarxa Wi-Fi de JAUME2   -43      WPA2_PSK    6    0
           Xarxa Wi-Fi de JAUME   -85  WPA_WPA2_PSK   11    0
-- Scan wifi, and get result into a table
scan = net.wf.scan(true)

net.wf.setup(net.wf.mode.STA, ssid, password, [ip, mask, gw, dns1, dns2, powersave, channel, hidden])

Настройка интерфейса Wi-Fi в режиме STA (станция / клиент).

Аргументы:

  • ssid: SSID сети для подключения.
  • password: пароль сети.
  • ip: IP-адрес в упакованном представлении. Используйте функцию net.packip для этого.
  • mask: сетевая маска в упакованном представлении. Используйте функцию net.packip для этого.
  • gw: IP-адрес шлюза в упакованном представлении. Используйте функцию net.packip для этого.
  • dns1 (необязательно): IP основного DNS-сервера для разрешения имен, в упакованном представлении. Используйте функцию net.packip для этого. Если этот аргумент не предоставлен, dns1 устанавливается на 8.8.8.8.
  • dns2 (необязательно): IP вторичного DNS-сервера для разрешения имен, в упакованном представлении. Используйте функцию net.packip для этого. Если этот аргумент не предоставлен, dns2 устанавливается на 8.8.4.4.
  • powersave (необязательно): энергосбережение. Может быть net.wf.powersave.NONE (не устанавливать энергосбережение) или net.wf.powersave.MODEM. Значение по умолчанию - net.wf.powersave.NONE.
  • channel (необязательно):
    • Начальный номер канала для подключения к точке доступа. Это натуральное число от 1 до 13. Установите значение 0, если канал точки доступа неизвестен.
    • Значение по умолчанию - 0.

Возвращает: ничего или исключение.

-- Setup a wifi connection using a dynamic IP
net.wf.setup(net.wf.mode.STA, "ssid", "password")
-- Setup a wifi connection using a static IP
-- ip: 172.16.209.224
-- net mask: 255.255.0.0
-- gw: 172.16.0.1
-- dns1: 8.8.8.8
-- dns2: 8.8.4.4
net.wf.setup(
   net.wf.mode.STA,
   "ssid",
   "password",
   net.packip(172,16,209,224), net.packip(255,255,255,0),
   net.packip(172,16,0,1),
   net.packip(8,8,8,8), net.packip(8,8,4,4)
)

net.wf.setup(net.wf.mode.AP, ssid, password, [powersave, channel, hidden])

Настройка интерфейса Wi-Fi в режиме AP (точка доступа).

Аргументы:

  • ssid: SSID сети для подключения.
  • password: пароль сети.
  • powersave (необязательно): энергосбережение. Может быть либо net.wf.powersave.NONE (не устанавливать энергосбережение) или net.wf.powersave.MODEM. Значение по умолчанию - net.wf.powersave.NONE.
  • channel (необязательно): номер канала, используемого точкой доступа Soft-AP. Это натуральное число от 1 до 13. Значение по умолчанию - 0.
  • hidden (необязательно): если true, SSID скрыт, если false, видим.

Возвращает: ничего или исключение.

net.wf.setup(net.wf.mode.STAENT, ssid [, identity, username, password, ca, cert, key, keypwd, timecheck, powersave, channel, hidden])

Настройка интерфейса Wi-Fi в режиме STA (станция/клиент), где точка доступа требует аутентификации WPA2 enterprise.

Аргументы:

  • ssid: SSID сети для подключения.
  • identity (необязательно): nil, пустая строка или требуемый идентификатор WPA2 enterprise.
  • username (необязательно): nil, пустая строка или требуемое имя пользователя WPA2 enterprise.
  • password (необязательно): nil, пустая строка или требуемый пароль WPA2 enterprise.
  • ca (необязательно): nil, пустая строка или /path/to/my-ca.pem.
  • cert (необязательно): nil, пустая строка или /path/to/my-client.crt.
  • key (необязательно): nil, пустая строка или /path/to/my-client.key.
  • keypwd (необязательно): nil, пустая строка или пароль для my-client.key.
  • timecheck (необязательно): одно из net.wf.timecheck.DEFAULT, net.wf.timecheck.ENABLE, net.wf.timecheck.DISABLE.
  • powersave (необязательно): энергосбережение. Может быть либо net.wf.powersave.NONE (не устанавливать энергосбережение) или net.wf.powersave.MODEM. Значение по умолчанию - net.wf.powersave.NONE.
  • channel (необязательно): номер канала, используемого точкой доступа Soft-AP. Это натуральное число от 1 до 13. Значение по умолчанию - 0.
  • hidden (необязательно): если true, SSID скрыт, если false, видим.

Возвращает: ничего или исключение.

net.wf.start([async])

Запуск интерфейса Wi-Fi.

Аргументы:

  • async (необязательно): если true, интерфейс запускается асинхронно (без ожидания получения IP), если false, интерфейс запускается синхронно. Если не указано, значение по умолчанию для этого аргумента - true.

Возвращает: ничего или исключение.

net.wf.stop()

Остановка интерфейса Wi-Fi.

Аргументы: нет.

Возвращает: ничего или исключение.

net.wf.wps(type [, callback])

Подключение к Wi-Fi с использованием WPS вместо SSID+Password. Эта функция доступна только если при сборке использовался CONFIG_ESP32_WIFI_NVS_ENABLED.

Аргументы:

  • type: тип WPS. Может быть либо net.wf.wpstype.PBC или net.wf.wpstype.PIN.
  • callback (необязательно): если type равно net.wf.wpstype.PIN, то здесь должен быть предоставлен Lua-колл

Ethernet

-- Setup an ethernet connection using a dynamic IP
net.en.setup()
-- Setup an ethernet connection using a static IP
-- ip: 192.168.1.200
-- net mask: 255.255.255.0
-- gw: 192.168.1.1
-- dns1: 8.8.8.8
-- dns2: 8.8.4.4
net.en.setup(
   net.packip(192,168,1,200), net.packip(255,255,255,0),
   net.packip(192,168,1,1),
   net.packip(8,8,8,8), net.packip(8,8,4,4)
)

net.en.setup()

Настройка Ethernet-соединения с динамическим IP. Настройки соединения получаются от сервера DHCP.

Аргументы: нет.

Возвращает: ничего или исключение.

-- Настройка Ethernet-соединения
net.en.setup()

net.en.start([async])

Запуск Ethernet-интерфейса.

Аргументы:

  • async (необязательно): если true, интерфейс запускается асинхронно (без ожидания получения IP), если false, интерфейс запускается синхронно. Если не указано, значение по умолчанию для этого аргумента - true.

Возвращает: ничего или исключение.

-- Настройка Ethernet-соединения
net.en.setup()

-- Запуск
net.en.start()

net.en.stop()

Остановка Ethernet-интерфейса.

Аргументы: нет.

Возвращает: ничего или исключение.

-- Setup an ethernet connection
net.en.setup()

-- Start
net.en.start()

....

-- Stop
net.en.stop()

Утилиты

net.ping(host, count, interval, size, timeout)

Утилита net.ping используется для проверки доступности хоста в сети с использованием протокола IP (Internet Protocol). Аргументы:

  • host: это строка с именем хоста или его IP-адресом
  • count: количество посылок
  • interval: интервал между посылками
  • size: размер посылки
  • timeout: тайм-аут

Возвращает: ничего или исключение.

/ > net.ping("whitecatboard.org")
PING whitecatboard.org (5.196.211.36): 32 data bytes
60 bytes from 0.0.0.0: icmp_seq=1 time=37.567 ms
...
60 bytes from 0.0.0.0: icmp_seq=10 time=36.858 ms
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 36.479/36.897/37.567/0.251 ms
/ > net.ping("8.8.8.8")
PING 8.8.8.8 (8.8.8.8): 32 data bytes
60 bytes from 8.0.0.0: icmp_seq=1 time=27.440 ms
...
60 bytes from 8.0.0.0: icmp_seq=10 time=27.847 ms
10 packets transmitted, 10 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 27.440/27.762/27.853/0.140 ms

Пинг прерывается нажатием Ctrl-С.

ms = net.mping(host)

Является упрощенной версией net.ping. Аргументы:

  • host: это строка с именем хоста или его IP-адресом

Возвращает:

  • number; время отклика в миллисекундах. 0.0 - в случае ошибки или исключение в случае отстутствия сети.
/ > net.mping("whitecatboard.org")
202.892

code, ret = net.http.get(host, resource, content_type, [ssl_en], [port], [timeout], [connect_timeout])

Облегченная (и урезанная) версия (по-сравнению с библиотекой curl) http Get.

Аргументы:

  • host: строка с именем хоста или его IP-адресом
  • resource: строка пути к ресурсу
  • content_type: Сontent-Type запрашиваемого ресурса
  • ssl_en (опционально): boolean; true - запрашивать по https (порт 443), false - http (порт 80). По-умолчанию true.
  • port (опционально): порт.
  • timeout (опционально): тайм-аут отправки в миллисекундах. По-умолчанию: 3000.
  • connect_timeout (опционально): тайм-аут на подключение к серверу в секундах. По-умолчанию: 5.

Возвращает:

  • code: код ответа
  • ret: таблица со скаченным ответом. разбита на страницы по 1024 байта. Либо исключение.
code, ret = net.http.get("192.168.0.1", "/index.html", "text/html")
print(ret[1])

code, ret = net.http.download(host, resource, content_type, filename, [overwrite], [ssl_en], [timeout], [connect_timeout])

Облегченная версия (по-сравнению с библиотекой curl) http Get с сохранением результата в файл.

Аргументы:

  • host: строка с именем хоста или его IP-адресом
  • resource: строка пути к ресурсу
  • content_type: Сontent-Type запрашиваемого ресурса.
  • filename: имя файла для сохранения
  • overwrite (опционально): boolean; true - перезаписывать файл, false - вызвать исключение, если файл существует.
  • ssl_en (опционально): boolean; true - запрашивать по https (порт 443), false - http (порт 80). По-умолчанию true.
  • timeout (опционально): тайм-аут в миллисекундах. По-умолчанию: 3000.
  • connect_timeout (опционально): тайм-аут на подключение к серверу в секундах. По-умолчанию: 5.

Возвращает:

  • code: код ответа Либо исключение.
code = net.http.download("192.168.0.1", "/index.html", "text/html", "index.html", false, false)

code, ret = net.http.post(host, resource, content_type, [custom_headers], [body], [ssl_en], [port], [timeout], [connect_timeout])

Облегченная (и урезанная) версия (по-сравнению с библиотекой curl) http Post.

Аргументы:

  • host: строка с именем хоста или его IP-адресом
  • resource: строка пути к ресурсу
  • content_type: Сontent-Type
  • custom_headers (опционально): строка; дополнительные заголовки
  • body (опционально): строка; содержимое body запроса.
  • ssl_en (опционально): boolean; true - запрашивать по https (порт 443), false - http (порт 80). По-умолчанию true.
  • port (опционально): порт.
  • timeout (опционально): тайм-аут отправки в миллисекундах. По-умолчанию: 3000.
  • connect_timeout (опционально): тайм-аут на подключение к серверу в секундах. По-умолчанию: 5.

Возвращает:

  • code: код ответа
  • ret: таблица со скаченным ответом. разбита на страницы по 1024 байта. Либо исключение.
code, ret = net.http.post("192.168.0.101", "/", "application/json", "id: 12345\r\ntype:7", "body", false)

net.udp.sendto(host, port, data)

Отправить посылку по UDP.

Аргументы:

  • host: строка; адрес получателя.
  • port: число; порт.
  • data: строка; данные в строковом виде (строка допускает нули).

Возвращает: ничего или исключение.

socket = net.udp.bind(port)

Создать UDP-сокет, привязанный к заданному порту.

Аргументы:

  • port: число; порт.

Возвращает: сокет, ничего или исключение.

from, data = net.udp.recvfrom(socket, maxlen)

Принять данные.

Аргументы:

  • socket: идентификатор сокета, полученный net.udp.bind().
  • maxlen: число; максимальный ожидаемый размер данных.

Возвращает:

  • from: строка; ip-отправителя или nil, если данных нет.
  • data: строка; данные или nil. или исключение.

net.udp.close(socket)

Закрыть сокет.

Аргументы:

  • socket: идентификатор сокета, полученный net.udp.bind().

Возвращает: ничего.

Пример:

s = net.udp.bind(5555)

while true do
    from, data = net.udp.recvfrom(s, 100)
    if from then
        print(from, data)
    end
end

res = net.tcp.sendto(host, port, data, [timeout_s])

Функция для однократной передачи данных: открывает tcp-подключение, передает данные, закрывает tcp-подключение.

Аргументы:

  • host: строка; адрес получателя.
  • port: число; порт.
  • data: строка; данные в строковом виде (строка допускает нули).
  • timeout_s (опционально): число в секундах; тайм-аут подключения.

Возвращает:

  • res: boolean; true - в случае успеха, false - иначе.
    или исключение.

Пример:

net.tcp.sendto("192.168.68.110", 5555, "hello")

net.tcp.start([port], [callback], [autoclose], [redirectio])

Запустить TCP-сервер. Сервер может быть только один, но поддержкивает множественные подключения.

Аргументы:

  • port (опционально): порт.
  • callback: функция, которая будет выполняться при получении посылки. функция получает два параметра: строка с ip отправителя и данные в строковом виде (строка допускает нули).
  • autoclose (опционально): число секунд; через какое время без сообщений закрывать соединение; 0 - никода.
  • redirectio (опционально): boolean; если true - то весь вывод выполненных функция будет перенаправляться в ответ tcp клиенту.

Пример:

net.tcp.start(60, function (src, data) print(src, data) end, 60, false)

net.tcp.stop()

Остановить TCP-сервер.

net.tcp.running()

Вернуть состояние TCP-сервера: true - запущен, false - нет.

net.curl

Утилита net.curl обладает более широкими возможностями, чем net.http, но требует гораздо больше свободных ресурсов.

Утилита net.curl поддерживает следующие функции:

res, header, body = net.curl.get(url [, filename])

Отправка GET-запроса.

res, header, body = net.curl.post(url, tparams)

Отправка POST-запроса. Агрументы:

  • url: строка; URL-сервера, если начинается с ‘https://’ будет использоваться SSL
  • tparams: Lua таблица в виде ‘key=value’. Специальные ‘key’ значения:
    • _FILE_key: значение файла для отправки; если задан только ‘FILE’, ‘file’ будет использовано, как ключ. Можно загрузить больше одного файла.
    • _JSON_key: значение JSON; если задан только ‘JSON’, ‘json’ будет использоваться, как ключ.

Возвращает:

  • res: boolean, true в случае успеха, false в случае ошибки
  • hdr: возращает header ответа или сообщение об ошибке
  • body: возвращает body ответа или сообщение об ошибке

Пример:

     res, hdr, bdy = net.curl.post("http://loboris.eu/ESP32/test.php", {temp=24, user="esp32"})
 
     postreq = {
              temp=24,
              _FILE_file="test.jpg",
              _FILE_file2="data.txt",
              _JSON_jsondata="{\"name\":\"John\", \"age\":31}"
               }
     res, hdr, bdy = net.curl.post("http://loboris.eu/ESP32/test.php", postreq)

servername, serverport = net.curl.mailserver([servername, serverport])

Задает имя сервера для отправки почты. Агрументы:

  • servername: строка; url сервера
  • serverport: число; порт сервера

Возвращает: установленные servername, serverport

Пример:

net.curl.mailserver("smtp.адрес.сервера", 465)

ret, msg = net.s.curl.sendmail(options)

Отправка почтового сообщения.

Агрументы:

  • options: таблица со следующими значениями
    • user: строка; имя пользователя отправителя почты,
    • pass: строка; пароль отправителя почты,
    • to: таблица со списком строк - адресов получателей,
    • subj: строка; тема письма,
    • msg: строка; сообщение,
    • secure: boolean; true - ssl,
    • attach: таблица со списком прикрепленных файлов.

Возвращает: код статуса и сообщеине.

Пример:

options = {
user = "логин",
pass = "пароль",
to = {"получатель1", "получатель2"},
subj = "Тема",
msg = "Тестовая посылка",
secure = true,
attach = {"picture.jpg"}
}

ret, msg = net.curl.sendmail(options)

net.curl.cleanup()

Освобождает память, использованную curl.

Аргументы: ничего. Возвращает: ничего

version, versionnum = net.curl.info([showdetails])

Возвращет версию и доп. иноформацию.

Агрументы:

  • showdetails (опционально): boolean; если true - печатает в консоль доп. информацию. Возвращает:
  • version: строка; информация о версии.
  • versionnum: строка; информация о версии.
/ > net.curl.info(true)
Curl version info
  version: 7.54.1-DEV - 472577
Host: LUA-RTOS-ESP32
- IP V6 supported
- SSL supported
- LIBZ supported
- NTLM supported
- DEBUG NOT supported
- UNIX sockets NOT supported
Protocols:
- dict
- file
- ftp
- ftps
- gopher
- http
- https
- imap
- imaps
- pop3
- pop3s
- rtsp
- smtp
- smtps
- telnet
- tftp
7.54.1-DEV  472577

verbose = net.curl.verbose([verbose])

Устанавливает уровень вывода информации в ходе работы функций curl.

Аргументы:

  • verbose(необязательно): число; 0 - не выводить доп. информацию; 1 - выводить доп. информацию.

Возвращает:

  • verbose: число; текущий уровень.

progress_seconds = net.curl.progress([progress_seconds])

Показывать прогресс работы.

Аргументы:

  • progress_seconds (необязательно): число; вывод прогресса каждые progress_seconds секунд. 0 - не показывать.

Возвращает:

  • progress_seconds: число; текущий уровень.

timeout_seconds = net.curl.timeout([timeout_seconds])

Устанавливает таймаут.

Аргументы:

  • timeout_seconds(необязательно); число; По-умолчанию 60. Таймаут с секундах.

Возвращает:

  • timeout_seconds: число; текущий уровень.

maxbytes = net.curl.reclimit([maxbytes])

Устанавливает предельный размер для получаемых файлов в байтах.

Аргументы:

  • maxbytes(необязательно); число; Размер в байтах.

Возвращает:

  • maxbytes: число; текущий уровень.

net.scp

Утилиты для отправки и получения данных по ssh.

net.scp.get(host, port, src, dst, user, password)

Переносит файл src с удаленного хоста в файловую систему устройства Lua под именем dst.

-- Получить файл с именем src-filename.lua
net.scp.get("remotehost",22,"~/lua/src-filename.lua","/examples/lua/dst-filename.lua","username","secretpass")

net.scp.put(host, port, src, dst, user, password)

Переносит файл src из файловой системы устройства Lua на удаленный хост в файл с именем dst.

-- Поместить локальный файл с именем logfile.txt на удаленный хост
net.scp.get("remotehost",22,"/examples/lua/logfile.txt","~/logs/logfile.txt","username","secretpass")

res, header, resp = net.curl.ftp(upload, url, user, pass [, filename])

Взаимодействие с FTP-сервером.
Возможные FTP-операции: LIST, GET file, PUT file.
Если сервер поддерживает SSL/TLS, взаимодействие будет происходить в защищенном режиме.

Аргументы: нет.

  • upload: 0 для LIST и GET операций; 1 для file upload
  • url: строка ftp - url, должен начинаться с ‘ftp://’ или с ‘ftps://’
    • user: строка; имя пользователя
    • pass: строка; пароль
  • fname: опционально; строка:
    • если upload=0 LIST (список) или имя файла, который будет записан
    • если upload=1 имя файла, который будет отправлен на сервер

Возвращает:

  • res: boolean, true в случае успеха, false если ошибка
  • hdr: header ответа в случае успеха или сообщение об ошибке
  • resp: полученный LIST (список) или файл

Примеры:

-- list files in root directory
res, hdr, resp = net.curl.ftp(0, "ftp://speedtest.tele2.net", "anonymous", "lua.esp32@gmail.com")
 
-- send file to upload directory (file name MUST be given in URL)
res, hdr, resp = net.curl.ftp(1, "ftp://speedtest.tele2.net/upload/image77.jpg", "anonymous", "lua.esp32@gmail.com", "images/myimage.jpg")
 
-- list files in upload directory to check if file is uploaded (trailing slash MUST be given)
res, hdr, resp = net.curl.ftp(0, "ftp://speedtest.tele2.net/upload", "anonymous", "lua.esp32@gmail.com")
 
-- get file back under new name
res, hdr, resp = net.curl.ftp(0, "ftp://speedtest.tele2.net/upload/image77.jpg", "anonymous", "lua.esp32@gmail.com", "images/newimage.jpg")

net.ssh.exec(host, port, command line, user, password)

-- Выполнить команду на удаленном хосте
net.ssh.exec("remotehost",22,"cat /foo/bar/secret.txt","username","secretpass")

Сервисы

SNTP

Этот сервис может использоваться программистом для получения текущего времени от сервера NTP и обновления внутренних часов Lua RTOS этим временем.

Для запуска этого сервиса:

-- Настройка и запуск соединения Ethernet
net.en.setup()
net.en.start()

-- Синхронизация часов Lua RTOS с сервером NTP
net.service.sntp.start()

Функция net.service.sntp.start принимает необязательный аргумент для установки имени сервера NTP. Если этот аргумент не указан, имя сервера NTP устанавливается как “pool.ntp.org”.

Для остановки этого сервиса:

net.service.sntp.stop()

HTTP

Этот сервис может быть запущен для предоставления файлов через протокол http://. По соображениям безопасности корневая директория документов настраивается во время компиляции. Если HTTP-запрос не указывает на файл, а на каталог, то в этом каталоге ищется файл с именем index.lua или index.html. Если один из этих файлов найден, он предоставляется. Если ни один не найден, создается список директории. Если запрашивается файл, имя которого заканчивается на .lua, этот файл выполняется перед тем, как он будет предоставлен клиенту.

Для запуска этого сервиса:

-- Настройка и запуск соединения Ethernet
net.en.setup()
net.en.start()

-- Запуск HTTP-сервера
net.service.http.start()

-- Запуск HTTP-сервера на нестандартном порту
net.service.http.start(81)

-- Запуск HTTP-сервера с HTTPS на порту 443
net.service.http.start(80, 443, "/path/to/certificate.pem", "/path/to/privatekey.pem")

-- Запуск HTTP-сервера с HTTPS на порту 443, но без обслуживания HTTP
net.service.http.start(0, 443, "/path/to/certificate.pem", "/path/to/privatekey.pem")

Для остановки этого сервиса:

net.service.http.stop()

Captive DNS

Этот сервис может быть запущен для предоставления поддельных ответов DNS на запросы от других устройств. Это полезно, если устройство Lua RTOS создает Wi-Fi AP, и клиентам необходимо подключиться к устройству, например, для настройки реальных настроек Wi-Fi через веб-браузер. Сервис Captive DNS помогает, автоматически перенаправляя все запросы на разрешение имен на локальный IP устройства Lua RTOS так же, как это делают стандартные Captive-порталы Wi-Fi. Вместо предоставления сайта с кнопкой “принять”, как это делают обычно, устройство Lua RTOS может использовать HTTP-сервис с lua-скриптами, чтобы, например, представить форму настройки устройства Lua RTOS. Для большинства операционных систем форма автоматически откроется на клиентском устройстве, как только оно подключится к AP.

Для запуска этого сервиса:

-- Настройка и запуск соединения Ethernet
net.en.setup()
net.en.start()

-- Запуск HTTP-сервера
net.service.http.start()

-- Запуск Captive DNS
net.service.captivedns.start()