Rewrite whole project as a Arduino IDE project
The lua flashing never really worked and I had so many problems flashing the hardware. The Arduino IDE does it much better so this is now written in thes Arduino language which looks like C++. Still need to explain the hardware setup.
This commit is contained in:
parent
4dc9e79f28
commit
b61dddea01
11 changed files with 162 additions and 242 deletions
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
|||
[submodule "luatool"]
|
||||
path = luatool
|
||||
url = https://github.com/4refr0nt/luatool.git
|
26
README.md
26
README.md
|
@ -5,26 +5,28 @@ This is my first stab at a wireless termometer.
|
|||
## Getting the code
|
||||
|
||||
git clone https://github.com/jeena/esp8266-temperature.git
|
||||
cd esp8266-temperature
|
||||
git submodule init
|
||||
git submodule update
|
||||
|
||||
## Setup
|
||||
|
||||
It expects a credentials.lua file with content like this:
|
||||
Open the esptmp.ino file in the Arduino IDE.
|
||||
|
||||
SSID = "myssid"
|
||||
PASSWORD = "mypasswd"
|
||||
It expects the credentials for your WiFi in the file like this:
|
||||
|
||||
Copy the credentials.lua.example file into credentials.lua and change
|
||||
it so et matches your wifi credentials.
|
||||
const char* ssid = "myssid";
|
||||
const char* password = "mypass";
|
||||
|
||||
Change the credentials in esptmp.ino so it matches your wifi credentials.
|
||||
|
||||
## Flashing
|
||||
|
||||
To put the code onto the ESP8266 you need the luatool which is
|
||||
included as a git submodule.
|
||||
1. Under File -> Preferences set as Additional Boards Manager URLs:
|
||||
http://arduino.esp8266.com/versions/2.3.0/package_esp8266com_index.json
|
||||
2. Chose under Tools -> Board the "Node MCU 1.0 (ESP12-E Module)"
|
||||
3. Press the Upload button
|
||||
|
||||
Use flash.sh to flash it via /dev/ttyUSB0
|
||||
## Hardware Setup
|
||||
|
||||
t.b.d.
|
||||
|
||||
## License
|
||||
|
||||
|
@ -36,4 +38,4 @@ esp8266-temperature is free software: you can redistribute it and/or modify it u
|
|||
|
||||
esp8266-temperature is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with esp8266-temperature. If not, see http://www.gnu.org/licenses/.
|
||||
You should have received a copy of the GNU General Public License along with esp8266-temperature. If not, see http://www.gnu.org/licenses/.
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
pin = 4
|
||||
ow.setup(pin)
|
||||
|
||||
counter=0
|
||||
lasttemp=-999
|
||||
|
||||
dofile("dallas.lua")
|
||||
dofile("server.lua")
|
|
@ -1,2 +0,0 @@
|
|||
SSID = "MyWifi"
|
||||
PASSWORD = "mypasswd"
|
|
@ -1,6 +0,0 @@
|
|||
function getTemp()
|
||||
t = require("ds18b20")
|
||||
t.setup(9)
|
||||
addrs = t.addrs()
|
||||
lasttemp = t.read(nil,t.C)
|
||||
end
|
143
ds18b20.lua
143
ds18b20.lua
|
@ -1,143 +0,0 @@
|
|||
--------------------------------------------------------------------------------
|
||||
-- DS18B20 one wire module for NODEMCU
|
||||
-- NODEMCU TEAM
|
||||
-- LICENCE: http://opensource.org/licenses/MIT
|
||||
-- Vowstar <vowstar@nodemcu.com>
|
||||
-- 2015/02/14 sza2 <sza2trash@gmail.com> Fix for negative values
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- Set module name as parameter of require
|
||||
local modname = ...
|
||||
local M = {}
|
||||
_G[modname] = M
|
||||
|
||||
-- Local used variables
|
||||
|
||||
-- DS18B20 dq pin
|
||||
local pin = nil
|
||||
-- DS18B20 default pin
|
||||
local defaultPin = 9
|
||||
|
||||
-- Local used modules
|
||||
|
||||
-- Table module
|
||||
local table = table
|
||||
-- String module
|
||||
local string = string
|
||||
-- One wire module
|
||||
local ow = ow
|
||||
-- Timer module
|
||||
local tmr = tmr
|
||||
-- Limited to local environment
|
||||
setfenv(1,M)
|
||||
|
||||
-- Implementation
|
||||
|
||||
C = 'C'
|
||||
F = 'F'
|
||||
K = 'K'
|
||||
function setup(dq)
|
||||
pin = dq
|
||||
if(pin == nil) then
|
||||
pin = defaultPin
|
||||
end
|
||||
ow.setup(pin)
|
||||
end
|
||||
|
||||
function addrs()
|
||||
setup(pin)
|
||||
tbl = {}
|
||||
ow.reset_search(pin)
|
||||
repeat
|
||||
addr = ow.search(pin)
|
||||
if(addr ~= nil) then
|
||||
table.insert(tbl, addr)
|
||||
end
|
||||
tmr.wdclr()
|
||||
until (addr == nil)
|
||||
ow.reset_search(pin)
|
||||
return tbl
|
||||
end
|
||||
|
||||
function readNumber(addr, unit)
|
||||
result = nil
|
||||
setup(pin)
|
||||
flag = false
|
||||
if(addr == nil) then
|
||||
ow.reset_search(pin)
|
||||
count = 0
|
||||
repeat
|
||||
count = count + 1
|
||||
addr = ow.search(pin)
|
||||
tmr.wdclr()
|
||||
until((addr ~= nil) or (count > 100))
|
||||
ow.reset_search(pin)
|
||||
end
|
||||
if(addr == nil) then
|
||||
return result
|
||||
end
|
||||
crc = ow.crc8(string.sub(addr,1,7))
|
||||
if (crc == addr:byte(8)) then
|
||||
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
|
||||
-- print("Device is a DS18S20 family device.")
|
||||
ow.reset(pin)
|
||||
ow.select(pin, addr)
|
||||
ow.write(pin, 0x44, 1)
|
||||
-- tmr.delay(1000000)
|
||||
present = ow.reset(pin)
|
||||
ow.select(pin, addr)
|
||||
ow.write(pin,0xBE,1)
|
||||
-- print("P="..present)
|
||||
data = nil
|
||||
data = string.char(ow.read(pin))
|
||||
for i = 1, 8 do
|
||||
data = data .. string.char(ow.read(pin))
|
||||
end
|
||||
-- print(data:byte(1,9))
|
||||
crc = ow.crc8(string.sub(data,1,8))
|
||||
-- print("CRC="..crc)
|
||||
if (crc == data:byte(9)) then
|
||||
t = (data:byte(1) + data:byte(2) * 256)
|
||||
if (t > 32767) then
|
||||
t = t - 65536
|
||||
end
|
||||
|
||||
if (addr:byte(1) == 0x28) then
|
||||
t = t * 625 -- DS18B20, 4 fractional bits
|
||||
else
|
||||
t = t * 5000 -- DS18S20, 1 fractional bit
|
||||
end
|
||||
|
||||
if(unit == nil or unit == 'C') then
|
||||
-- do nothing
|
||||
elseif(unit == 'F') then
|
||||
t = t * 1.8 + 320000
|
||||
elseif(unit == 'K') then
|
||||
t = t + 2731500
|
||||
else
|
||||
return nil
|
||||
end
|
||||
t = t / 10000
|
||||
return t
|
||||
end
|
||||
tmr.wdclr()
|
||||
else
|
||||
-- print("Device family is not recognized.")
|
||||
end
|
||||
else
|
||||
-- print("CRC is not valid!")
|
||||
end
|
||||
return result
|
||||
end
|
||||
|
||||
function read(addr, unit)
|
||||
t = readNumber(addr, unit)
|
||||
if (t == nil) then
|
||||
return nil
|
||||
else
|
||||
return t
|
||||
end
|
||||
end
|
||||
|
||||
-- Return module table
|
||||
return M
|
148
esptmp.ino
Normal file
148
esptmp.ino
Normal file
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
ESP8266 mDNS responder sample
|
||||
|
||||
This is an example of an HTTP server that is accessible
|
||||
via http://esp8266.local URL thanks to mDNS responder.
|
||||
|
||||
Instructions:
|
||||
- Update WiFi SSID and password as necessary.
|
||||
- Flash the sketch to the ESP8266 board
|
||||
- Install host software:
|
||||
- For Linux, install Avahi (http://avahi.org/).
|
||||
- For Windows, install Bonjour (http://www.apple.com/support/bonjour/).
|
||||
- For Mac OSX and iOS support is built in through Bonjour already.
|
||||
- Point your browser to http://esp8266.local, you should see a response.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
#include <ESP8266WiFi.h>
|
||||
#include <ESP8266mDNS.h>
|
||||
#include <WiFiClient.h>
|
||||
#include <OneWire.h>
|
||||
#include <DallasTemperature.h>
|
||||
|
||||
const char* ssid = "Jeenas";
|
||||
const char* password = "mypass";
|
||||
|
||||
// Data wire is conntec to the Arduino digital pin 5
|
||||
#define ONE_WIRE_BUS 5
|
||||
// Setup a oneWire instance to communicate with any OneWire devices
|
||||
OneWire oneWire(ONE_WIRE_BUS);
|
||||
// Pass our oneWire reference to Dallas Temperature sensor
|
||||
DallasTemperature sensors(&oneWire);
|
||||
|
||||
// TCP server at port 80 will respond to HTTP requests
|
||||
WiFiServer server(80);
|
||||
|
||||
String getTemp()
|
||||
{
|
||||
// Call sensors.requestTemperatures() to issue a global temperature and Requests to all devices on the bus
|
||||
sensors.requestTemperatures();
|
||||
// Why "byIndex"? You can have more than one IC on the same bus. 0 refers to the first IC on the wire
|
||||
return String(sensors.getTempCByIndex(0));
|
||||
}
|
||||
|
||||
void setup(void)
|
||||
{
|
||||
Serial.begin(115200);
|
||||
|
||||
// Connect to WiFi network
|
||||
WiFi.begin(ssid, password);
|
||||
Serial.println("");
|
||||
|
||||
// Wait for connection
|
||||
while (WiFi.status() != WL_CONNECTED) {
|
||||
delay(500);
|
||||
Serial.print(".");
|
||||
}
|
||||
Serial.println("");
|
||||
Serial.print("Connected to ");
|
||||
Serial.println(ssid);
|
||||
Serial.print("IP address: ");
|
||||
Serial.println(WiFi.localIP());
|
||||
|
||||
// Set up mDNS responder:
|
||||
// - first argument is the domain name, in this example
|
||||
// the fully-qualified domain name is "esp8266.local"
|
||||
// - second argument is the IP address to advertise
|
||||
// we send our IP address on the WiFi network
|
||||
if (!MDNS.begin("esp8266")) {
|
||||
Serial.println("Error setting up MDNS responder!");
|
||||
while (1) {
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
Serial.println("mDNS responder started");
|
||||
|
||||
// Start TCP (HTTP) server
|
||||
server.begin();
|
||||
Serial.println("TCP server started");
|
||||
|
||||
// Add service to MDNS-SD
|
||||
MDNS.addService("http", "tcp", 80);
|
||||
|
||||
// Start up the library
|
||||
sensors.begin();
|
||||
}
|
||||
|
||||
void loop(void)
|
||||
{
|
||||
// Check if a client has connected
|
||||
WiFiClient client = server.available();
|
||||
if (!client) {
|
||||
return;
|
||||
}
|
||||
|
||||
Serial.println("");
|
||||
Serial.println("New client");
|
||||
|
||||
// Wait for data from client to become available
|
||||
while (client.connected() && !client.available()) {
|
||||
delay(1);
|
||||
}
|
||||
|
||||
// Read the first line of HTTP request
|
||||
String req = client.readStringUntil('\r');
|
||||
|
||||
// First line of HTTP request looks like "GET /path HTTP/1.1"
|
||||
// Retrieve the "/path" part by finding the spaces
|
||||
int addr_start = req.indexOf(' ');
|
||||
int addr_end = req.indexOf(' ', addr_start + 1);
|
||||
if (addr_start == -1 || addr_end == -1) {
|
||||
Serial.print("Invalid request: ");
|
||||
Serial.println(req);
|
||||
return;
|
||||
}
|
||||
req = req.substring(addr_start + 1, addr_end);
|
||||
Serial.print("Request: ");
|
||||
Serial.println(req);
|
||||
client.flush();
|
||||
|
||||
String s;
|
||||
if (req == "/")
|
||||
{
|
||||
IPAddress ip = WiFi.localIP();
|
||||
String ipStr = String(ip[0]) + '.' + String(ip[1]) + '.' + String(ip[2]) + '.' + String(ip[3]);
|
||||
s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>Hello from ESP8266 at ";
|
||||
s += ipStr;
|
||||
s += " </html>\r\n\r\n";
|
||||
Serial.println("Sending 200");
|
||||
}
|
||||
else if (req == "/tmp")
|
||||
{
|
||||
s = getTemp();
|
||||
s = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n";
|
||||
s += getTemp();
|
||||
Serial.println("Sending 200");
|
||||
}
|
||||
else
|
||||
{
|
||||
s = "HTTP/1.1 404 Not Found\r\n\r\n";
|
||||
Serial.println("Sending 404");
|
||||
}
|
||||
client.print(s);
|
||||
|
||||
Serial.println("Done with client");
|
||||
}
|
||||
|
11
flash.sh
11
flash.sh
|
@ -1,11 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
luafiles=`find . -name "*.lua" -not -path "./luatool/*" -exec basename \{} \;`
|
||||
|
||||
|
||||
|
||||
for f in $luafiles
|
||||
do
|
||||
sudo python2 ./luatool/luatool/luatool.py --port /dev/ttyUSB0 --src $f --dest $f -b 74880 --delay 0.05
|
||||
done
|
||||
|
29
init.lua
29
init.lua
|
@ -1,29 +0,0 @@
|
|||
-- load credentials, 'SSID' and 'PASSWORD' declared and initialize in there
|
||||
dofile("credentials.lua")
|
||||
|
||||
function startup()
|
||||
if file.open("init.lua") == nil then
|
||||
print("init.lua deleted or renamed")
|
||||
else
|
||||
print("Running")
|
||||
file.close("init.lua")
|
||||
-- the actual application is stored in 'application.lua'
|
||||
dofile("application.lua")
|
||||
end
|
||||
end
|
||||
|
||||
print("Connecting to WiFi access point...")
|
||||
wifi.setmode(wifi.STATION)
|
||||
wifi.sta.config(SSID, PASSWORD)
|
||||
-- wifi.sta.connect() not necessary because config() uses auto-connect=true by default
|
||||
tmr.alarm(1, 1000, 1, function()
|
||||
if wifi.sta.getip() == nil then
|
||||
print("Waiting for IP address...")
|
||||
else
|
||||
tmr.stop(1)
|
||||
print("WiFi connection established, IP address: " .. wifi.sta.getip())
|
||||
print("You have 3 seconds to abort")
|
||||
print("Waiting...")
|
||||
tmr.alarm(0, 3000, 0, startup)
|
||||
end
|
||||
end)
|
1
luatool
1
luatool
|
@ -1 +0,0 @@
|
|||
Subproject commit 28ff7a18c802adf9beac211226e1673ec4b70a8d
|
27
server.lua
27
server.lua
|
@ -1,27 +0,0 @@
|
|||
temp = -999
|
||||
|
||||
t = require("ds18b20")
|
||||
t.setup(4)
|
||||
addrs = t.addrs()
|
||||
|
||||
mycounter=0
|
||||
srv=net.createServer(net.TCP)
|
||||
srv:listen(80, function(conn)
|
||||
conn:on("receive", function(conn, payload)
|
||||
if string.find(payload,"?myarg=") then
|
||||
mycounter=mycounter+1
|
||||
m="<br>Value= " .. string.sub(payload, string.find(payload,"?myarg=")+7,string.find(payload,"HTTP")-2)
|
||||
else
|
||||
m=""
|
||||
end
|
||||
|
||||
_temp = t.read(nil,t.C)
|
||||
|
||||
if _temp ~= nil then
|
||||
temp = _temp
|
||||
end
|
||||
|
||||
conn:send("<h1> Hello, this is Jeenas ESP8266.</h1><p>How are you today.<br> Count=" .. mycounter .. m .. "<br>Heap=" .. node.heap() .. "<br>Temp=" .. temp)
|
||||
end)
|
||||
conn:on("sent", function(conn) conn:close() end)
|
||||
end)
|
Loading…
Add table
Add a link
Reference in a new issue