Чтение текстового файла, находящегося на компьютере с NodeMCU, с использованием Lua

Моя проблема связана с чтением текстового файла (который находится на моем компьютере) в комплекте разработки NodeMCU. Я могу читать содержимое файла в терминале Ubuntu с помощью сценария Lua. Здесь я делюсь кодом, который использовал для чтения. Оба довольно хорошо работают в терминале Ubuntu.

Первый:

local open = io.open
local function read_file(path)
local file = open(path, "rb") -- r read mode and b binary mode
if not file then return nil end
local content = file:read "*a" -- *a or *all reads the whole file
file:close()
return content

Второй:

local fileContent = read_file("output.txt");
print (fileContent);

function file_exists(file)
  local f = io.open(file, "rb")
  if f then f:close() end
  return f ~= nil
end

-- get all lines from a file, returns an empty 
-- list/table if the file does not exist
function lines_from(file)
  if not file_exists(file) then return {} end
  lines = {}
  for line in io.lines(file) do 
    lines[#lines + 1] = line
  end
  return lines
end

-- tests the functions above
local file = 'output.txt'
local lines = lines_from(file)

-- print all line numbers and their contents
for k,v in pairs(lines) do
  print('line[' .. k .. ']', v)
end

Моя проблема возникает, когда я отправляю код в NodeMCU, используя Esplorer для отправки кода. Но ошибка возникает следующим образом:

attempt to index global 'io' (a nil value)
stack traceback:
    applicationhuff.lua:5: in function 'file_exists'
    applicationhuff.lua:13: in function 'lines_from'
    applicationhuff.lua:23: in main chunk
    [C]: in function 'dofile'
    stdin:1: in main chunk

Моя основная цель - прочитать эти данные и опубликовать их в Mosquitto Broker по протоколу MQTT. Я новичок в этих темах. Если кто-то сможет справиться с моей проблемой, мы будем признательны. Спасибо за вашу помощь...


person Odul Kivrak    schedule 05.01.2017    source источник


Ответы (1)


введите здесь описание изображения

введите здесь описание изображения

В NodeMCU нет io библиотеки. Поэтому вы получаете ошибку при индексировании io, что является нулевым значением.

Без обид, но иногда мне интересно, как вам, ребята, на самом деле удается найти свой путь к StackOverflow и даже написать код, не зная, как проводить базовые веб-исследования.

https://nodemcu.readthedocs.io/en/master/en/lua-developer-faq/

Прошивка заменила некоторые стандартные модули Lua, которые плохо согласовываются со структурой SDK с версиями, специфичными для ESP8266. Например, стандартные библиотеки io и os не работают, но были в значительной степени заменены библиотеками узлов и файлов NodeMCU.

https://nodemcu.readthedocs.io/en/master/en/modules/file/

Файловый модуль обеспечивает доступ к файловой системе и ее отдельным файлам.

Надеюсь, помощи достаточно ...

person Piglet    schedule 05.01.2017
comment
Большая часть этого ответа отвечает на вопрос, который не задавался (как выполнить поиск в Google). Эта информация, вероятно, была бы лучше в качестве комментария, чтобы ответ на заданный вопрос можно было легко идентифицировать. Кроме того, эффект «Я не знаю, чего не знаю» может побудить новичков использовать неэффективные запросы Google, которые кажутся очевидными людям с большим опытом. - person Kelson Ball; 06.01.2017
comment
@KelsonBall Я не согласен. 10 лет назад поиск в Интернете мог быть неэффективным. Но сегодня я могу даже щелкнуть значок микрофона и спросить свой компьютер, как мне прочитать файл в nodemcu? и он даст мне долбанный ответ с примерами ... как это неэффективно? также не требуется большого опыта программиста, чтобы получить эти знания. на самом деле вам даже не нужно знать Google. Достаточно обратиться к документации, которая на самом деле идет с комплектом разработки ... - person Piglet; 06.01.2017
comment
@Piglet Я полностью разделяю ваше разочарование, но по какой-то причине продолжаю: - / - person Marcel Stör; 06.01.2017
comment
Представьте себе дни, когда у нас не было интернета, и нам приходилось читать книги, документы и разговаривать с людьми :-) - person dda; 08.01.2017