2017-01-05 2 views
0

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

Первый один:

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 B roker через протокол MQTT. Я новичок в этих темах. Если кто-то сможет справиться с моей проблемой, это будет оценено. Спасибо за вашу помощь ...

ответ

1

enter image description here

enter image description here

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

Не обижайтесь, но иногда мне интересно, как вы, ребята, действительно можете найти свой путь к 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/

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

Я надеюсь, что это достаточно помочь ...

+0

Большая часть этого ответа отвечает на вопрос, который не был задан (как это сделать поиск Google). Эта информация, вероятно, будет лучше в качестве комментария, так что ответ на поставленный вопрос легко идентифицируется. Кроме того, эффект «Я не знаю, что я не знаю» может заставить начинающих использовать неэффективные запросы Google, которые кажутся очевидными людям с большим опытом. –

+4

@ KelsonBall Я не согласен. Веб-поиск может оказаться неэффективным 10 лет назад. Но сегодня я даже могу щелкнуть по значку микрофона и спросить мой компьютер «как я могу прочитать файл в nodemcu?» и это даст мне полный ответ с примерами ... как это неэффективно? он также не имеет большого опыта в качестве программиста для получения этих знаний. на самом деле вам даже не нужно знать Google. Достаточно обратиться к документации, которая действительно поставляется с комплектом разработки ... – Piglet

+2

@ Piglet Я полностью разделяю ваше разочарование, но по какой-то причине я продолжаю: -/ –

Смежные вопросы