Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
0f09d237
Commit
0f09d237
authored
Feb 10, 2015
by
HuangRui
Browse files
Merge branch 'dev' of
https://github.com/nodemcu/nodemcu-firmware
parents
361bedf0
a9398b1d
Changes
19
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
0f09d237
...
@@ -75,7 +75,7 @@ else
...
@@ -75,7 +75,7 @@ else
endif
endif
endif
endif
#############################################################
#############################################################
ESPTOOL
=
../tools/esptool.py
ESPTOOL
?
=
../tools/esptool.py
CSRCS
?=
$(
wildcard
*
.c
)
CSRCS
?=
$(
wildcard
*
.c
)
...
...
README.md
View file @
0f09d237
...
@@ -125,6 +125,7 @@ pre_build/latest/nodemcu_512k_latest.bin is removed. use pre_build/latest/nodemc
...
@@ -125,6 +125,7 @@ pre_build/latest/nodemcu_512k_latest.bin is removed. use pre_build/latest/nodemc
#define LUA_USE_MODULES_UART
#define LUA_USE_MODULES_UART
#define LUA_USE_MODULES_OW
#define LUA_USE_MODULES_OW
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_WS2812
#endif
/* LUA_USE_MODULES */
#endif
/* LUA_USE_MODULES */
...
...
// LUA_NUMBER_INTEGRAL
// LUA_NUMBER_INTEGRAL
...
@@ -330,3 +331,13 @@ cu:send("hello")
...
@@ -330,3 +331,13 @@ cu:send("hello")
ds18b20
=
nil
ds18b20
=
nil
package.loaded
[
"ds18b20"
]
=
nil
package.loaded
[
"ds18b20"
]
=
nil
```
```
####Control a WS2812 based light strip
```
lua
-- set the color of one LED on GPIO 2 to red
ws2812
.
write
(
4
,
string.char
(
0
,
255
,
0
))
-- set the color of 10 LEDs on GPIO 0 to blue
ws2812
.
write
(
3
,
string.char
(
0
,
0
,
255
):
rep
(
10
))
-- first LED green, second LED white
ws2812
.
write
(
4
,
string.char
(
255
,
0
,
0
,
255
,
255
,
255
))
```
app/include/lwip/app/espconn.h
View file @
0f09d237
...
@@ -394,5 +394,21 @@ extern sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
...
@@ -394,5 +394,21 @@ extern sint8 espconn_igmp_join(ip_addr_t *host_ip, ip_addr_t *multicast_ip);
*******************************************************************************/
*******************************************************************************/
extern
sint8
espconn_igmp_leave
(
ip_addr_t
*
host_ip
,
ip_addr_t
*
multicast_ip
);
extern
sint8
espconn_igmp_leave
(
ip_addr_t
*
host_ip
,
ip_addr_t
*
multicast_ip
);
/******************************************************************************
* FunctionName : espconn_recv_hold
* Description : hold tcp receive
* Parameters : espconn -- espconn to hold
* Returns : none
*******************************************************************************/
extern
sint8
espconn_recv_hold
(
struct
espconn
*
pespconn
);
/******************************************************************************
* FunctionName : espconn_recv_unhold
* Description : unhold tcp receive
* Parameters : espconn -- espconn to unhold
* Returns : none
*******************************************************************************/
extern
sint8
espconn_recv_unhold
(
struct
espconn
*
pespconn
);
#endif
#endif
app/include/lwip/tcp.h
View file @
0f09d237
...
@@ -277,6 +277,8 @@ struct tcp_pcb {
...
@@ -277,6 +277,8 @@ struct tcp_pcb {
/* KEEPALIVE counter */
/* KEEPALIVE counter */
u8_t
keep_cnt_sent
;
u8_t
keep_cnt_sent
;
u8_t
hold
;
};
};
struct
tcp_pcb_listen
{
struct
tcp_pcb_listen
{
...
...
app/include/user_config.h
View file @
0f09d237
...
@@ -63,6 +63,7 @@
...
@@ -63,6 +63,7 @@
#define LUA_USE_MODULES_OW
#define LUA_USE_MODULES_OW
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_MQTT
#define LUA_USE_MODULES_MQTT
#define LUA_USE_MODULES_WS2812
#endif
/* LUA_USE_MODULES */
#endif
/* LUA_USE_MODULES */
// #define LUA_NUMBER_INTEGRAL
// #define LUA_NUMBER_INTEGRAL
...
...
app/lwip/app/espconn.c
View file @
0f09d237
...
@@ -718,3 +718,32 @@ espconn_gethostbyname(struct espconn *pespconn, const char *hostname, ip_addr_t
...
@@ -718,3 +718,32 @@ espconn_gethostbyname(struct espconn *pespconn, const char *hostname, ip_addr_t
return
dns_gethostbyname
(
hostname
,
addr
,
found
,
pespconn
);
return
dns_gethostbyname
(
hostname
,
addr
,
found
,
pespconn
);
}
}
sint8
espconn_recv_hold
(
struct
espconn
*
pespconn
)
{
espconn_msg
*
pnode
=
NULL
;
if
(
pespconn
==
NULL
)
{
return
ESPCONN_ARG
;
}
pespconn
->
state
=
ESPCONN_WRITE
;
if
(
!
espconn_find_connection
(
pespconn
,
&
pnode
))
{
return
ESPCONN_ARG
;
}
espconn_tcp_hold
(
pnode
);
return
ESPCONN_OK
;
}
sint8
espconn_recv_unhold
(
struct
espconn
*
pespconn
)
{
espconn_msg
*
pnode
=
NULL
;
if
(
pespconn
==
NULL
)
{
return
ESPCONN_ARG
;
}
pespconn
->
state
=
ESPCONN_WRITE
;
if
(
!
espconn_find_connection
(
pespconn
,
&
pnode
))
{
return
ESPCONN_ARG
;
}
espconn_tcp_unhold
(
pnode
);
return
ESPCONN_OK
;
}
app/lwip/app/espconn_tcp.c
View file @
0f09d237
...
@@ -948,3 +948,19 @@ sint8 ICACHE_FLASH_ATTR espconn_tcp_delete(struct espconn *pdeletecon)
...
@@ -948,3 +948,19 @@ sint8 ICACHE_FLASH_ATTR espconn_tcp_delete(struct espconn *pdeletecon)
return
ESPCONN_ARG
;
return
ESPCONN_ARG
;
}
}
}
}
void
espconn_tcp_hold
(
void
*
arg
)
{
espconn_msg
*
ptcp_sent
=
arg
;
struct
tcp_pcb
*
pcb
=
NULL
;
pcb
=
ptcp_sent
->
pcommon
.
pcb
;
pcb
->
hold
=
1
;
}
void
espconn_tcp_unhold
(
void
*
arg
)
{
espconn_msg
*
ptcp_sent
=
arg
;
struct
tcp_pcb
*
pcb
=
NULL
;
pcb
=
ptcp_sent
->
pcommon
.
pcb
;
pcb
->
hold
=
0
;
}
app/lwip/core/tcp.c
View file @
0f09d237
...
@@ -1259,6 +1259,7 @@ tcp_alloc(u8_t prio)
...
@@ -1259,6 +1259,7 @@ tcp_alloc(u8_t prio)
#endif
/* LWIP_TCP_KEEPALIVE */
#endif
/* LWIP_TCP_KEEPALIVE */
pcb
->
keep_cnt_sent
=
0
;
//���ķ��ʹ���
pcb
->
keep_cnt_sent
=
0
;
//���ķ��ʹ���
pcb
->
hold
=
0
;
}
}
return
pcb
;
return
pcb
;
}
}
...
...
app/lwip/core/tcp_in.c
View file @
0f09d237
...
@@ -1137,7 +1137,7 @@ tcp_receive(struct tcp_pcb *pcb)
...
@@ -1137,7 +1137,7 @@ tcp_receive(struct tcp_pcb *pcb)
/* If the incoming segment contains data, we must process it
/* If the incoming segment contains data, we must process it
further. */
further. */
if
(
tcplen
>
0
)
{
if
(
(
tcplen
>
0
)
&&
(
!
pcb
->
hold
))
{
/* This code basically does three things:
/* This code basically does three things:
+) If the incoming segment contains data that is the next
+) If the incoming segment contains data that is the next
...
...
app/modules/modules.h
View file @
0f09d237
...
@@ -117,6 +117,15 @@
...
@@ -117,6 +117,15 @@
#define ROM_MODULES_BIT
#define ROM_MODULES_BIT
#endif
#endif
#if defined(LUA_USE_MODULES_WS2812)
#define MODULES_WS2812 "ws2812"
#define ROM_MODULES_WS2812 \
_ROM(MODULES_WS2812, luaopen_ws2812, ws2812_map)
#else
#define ROM_MODULES_WS2812
#endif
#define LUA_MODULES_ROM \
#define LUA_MODULES_ROM \
ROM_MODULES_GPIO \
ROM_MODULES_GPIO \
ROM_MODULES_PWM \
ROM_MODULES_PWM \
...
@@ -131,7 +140,8 @@
...
@@ -131,7 +140,8 @@
ROM_MODULES_ADC \
ROM_MODULES_ADC \
ROM_MODULES_UART \
ROM_MODULES_UART \
ROM_MODULES_OW \
ROM_MODULES_OW \
ROM_MODULES_BIT
ROM_MODULES_BIT \
ROM_MODULES_WS2812
#endif
#endif
app/modules/mqtt.c
View file @
0f09d237
...
@@ -725,8 +725,15 @@ static int mqtt_socket_connect( lua_State* L )
...
@@ -725,8 +725,15 @@ static int mqtt_socket_connect( lua_State* L )
if
(
mud
==
NULL
)
if
(
mud
==
NULL
)
return
0
;
return
0
;
if
(
mud
->
pesp_conn
)
if
(
mud
->
pesp_conn
){
//TODO: should I free tcp struct directly or ask user to call close()???
c_free
(
mud
->
pesp_conn
);
mud
->
pesp_conn
->
reverse
=
NULL
;
if
(
mud
->
pesp_conn
->
proto
.
tcp
)
c_free
(
mud
->
pesp_conn
->
proto
.
tcp
);
mud
->
pesp_conn
->
proto
.
tcp
=
NULL
;
c_free
(
mud
->
pesp_conn
);
mud
->
pesp_conn
=
NULL
;
}
struct
espconn
*
pesp_conn
=
NULL
;
struct
espconn
*
pesp_conn
=
NULL
;
pesp_conn
=
mud
->
pesp_conn
=
(
struct
espconn
*
)
c_zalloc
(
sizeof
(
struct
espconn
));
pesp_conn
=
mud
->
pesp_conn
=
(
struct
espconn
*
)
c_zalloc
(
sizeof
(
struct
espconn
));
if
(
!
pesp_conn
)
if
(
!
pesp_conn
)
...
...
app/modules/net.c
View file @
0f09d237
...
@@ -665,6 +665,10 @@ static int net_start( lua_State* L, const char* mt )
...
@@ -665,6 +665,10 @@ static int net_start( lua_State* L, const char* mt )
return
0
;
return
0
;
}
}
if
(
nud
->
pesp_conn
==
NULL
){
NODE_DBG
(
"nud->pesp_conn is NULL.
\n
"
);
return
0
;
}
pesp_conn
=
nud
->
pesp_conn
;
pesp_conn
=
nud
->
pesp_conn
;
port
=
luaL_checkinteger
(
L
,
stack
);
port
=
luaL_checkinteger
(
L
,
stack
);
stack
++
;
stack
++
;
...
@@ -1074,6 +1078,10 @@ static int net_dns( lua_State* L, const char* mt )
...
@@ -1074,6 +1078,10 @@ static int net_dns( lua_State* L, const char* mt )
return
0
;
return
0
;
}
}
if
(
nud
->
pesp_conn
==
NULL
){
NODE_DBG
(
"nud->pesp_conn is NULL.
\n
"
);
return
0
;
}
pesp_conn
=
nud
->
pesp_conn
;
pesp_conn
=
nud
->
pesp_conn
;
if
(
!
isserver
||
pesp_conn
->
type
==
ESPCONN_UDP
){
// self_ref is only needed by socket userdata, or udp server
if
(
!
isserver
||
pesp_conn
->
type
==
ESPCONN_UDP
){
// self_ref is only needed by socket userdata, or udp server
...
@@ -1185,6 +1193,54 @@ static int net_socket_send( lua_State* L )
...
@@ -1185,6 +1193,54 @@ static int net_socket_send( lua_State* L )
return
net_send
(
L
,
mt
);
return
net_send
(
L
,
mt
);
}
}
static
int
net_socket_hold
(
lua_State
*
L
)
{
const
char
*
mt
=
"net.socket"
;
struct
espconn
*
pesp_conn
=
NULL
;
lnet_userdata
*
nud
;
size_t
l
;
nud
=
(
lnet_userdata
*
)
luaL_checkudata
(
L
,
1
,
mt
);
luaL_argcheck
(
L
,
nud
,
1
,
"Server/Socket expected"
);
if
(
nud
==
NULL
){
NODE_DBG
(
"userdata is nil.
\n
"
);
return
0
;
}
if
(
nud
->
pesp_conn
==
NULL
){
NODE_DBG
(
"nud->pesp_conn is NULL.
\n
"
);
return
0
;
}
pesp_conn
=
nud
->
pesp_conn
;
espconn_recv_hold
(
pesp_conn
);
return
0
;
}
static
int
net_socket_unhold
(
lua_State
*
L
)
{
const
char
*
mt
=
"net.socket"
;
struct
espconn
*
pesp_conn
=
NULL
;
lnet_userdata
*
nud
;
size_t
l
;
nud
=
(
lnet_userdata
*
)
luaL_checkudata
(
L
,
1
,
mt
);
luaL_argcheck
(
L
,
nud
,
1
,
"Server/Socket expected"
);
if
(
nud
==
NULL
){
NODE_DBG
(
"userdata is nil.
\n
"
);
return
0
;
}
if
(
nud
->
pesp_conn
==
NULL
){
NODE_DBG
(
"nud->pesp_conn is NULL.
\n
"
);
return
0
;
}
pesp_conn
=
nud
->
pesp_conn
;
espconn_recv_unhold
(
pesp_conn
);
return
0
;
}
// Lua: socket:dns( string, function(ip) )
// Lua: socket:dns( string, function(ip) )
static
int
net_socket_dns
(
lua_State
*
L
)
static
int
net_socket_dns
(
lua_State
*
L
)
{
{
...
@@ -1243,6 +1299,8 @@ static const LUA_REG_TYPE net_socket_map[] =
...
@@ -1243,6 +1299,8 @@ static const LUA_REG_TYPE net_socket_map[] =
{
LSTRKEY
(
"close"
),
LFUNCVAL
(
net_socket_close
)
},
{
LSTRKEY
(
"close"
),
LFUNCVAL
(
net_socket_close
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
net_socket_on
)
},
{
LSTRKEY
(
"on"
),
LFUNCVAL
(
net_socket_on
)
},
{
LSTRKEY
(
"send"
),
LFUNCVAL
(
net_socket_send
)
},
{
LSTRKEY
(
"send"
),
LFUNCVAL
(
net_socket_send
)
},
{
LSTRKEY
(
"hold"
),
LFUNCVAL
(
net_socket_hold
)
},
{
LSTRKEY
(
"unhold"
),
LFUNCVAL
(
net_socket_unhold
)
},
{
LSTRKEY
(
"dns"
),
LFUNCVAL
(
net_socket_dns
)
},
{
LSTRKEY
(
"dns"
),
LFUNCVAL
(
net_socket_dns
)
},
// { LSTRKEY( "delete" ), LFUNCVAL ( net_socket_delete ) },
// { LSTRKEY( "delete" ), LFUNCVAL ( net_socket_delete ) },
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
net_socket_delete
)
},
{
LSTRKEY
(
"__gc"
),
LFUNCVAL
(
net_socket_delete
)
},
...
...
app/modules/ws2812.c
0 → 100644
View file @
0f09d237
#include "lualib.h"
#include "lauxlib.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
/**
* All this code is mostly from http://www.esp8266.com/viewtopic.php?f=21&t=1143&sid=a620a377672cfe9f666d672398415fcb
* from user Markus Gritsch.
* I just put this code into its own module and pushed into a forked repo,
* to easily create a pull request. Thanks to Markus Gritsch for the code.
*
*/
// ----------------------------------------------------------------------------
// -- This WS2812 code must be compiled with -O2 to get the timing right.
// -- http://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/
// The ICACHE_FLASH_ATTR is there to trick the compiler and get the very first pulse width correct.
static
void
ICACHE_FLASH_ATTR
send_ws_0
(
uint8_t
gpio
)
{
uint8_t
i
;
i
=
4
;
while
(
i
--
)
GPIO_REG_WRITE
(
GPIO_OUT_W1TS_ADDRESS
,
1
<<
gpio
);
i
=
9
;
while
(
i
--
)
GPIO_REG_WRITE
(
GPIO_OUT_W1TC_ADDRESS
,
1
<<
gpio
);
}
static
void
ICACHE_FLASH_ATTR
send_ws_1
(
uint8_t
gpio
)
{
uint8_t
i
;
i
=
8
;
while
(
i
--
)
GPIO_REG_WRITE
(
GPIO_OUT_W1TS_ADDRESS
,
1
<<
gpio
);
i
=
6
;
while
(
i
--
)
GPIO_REG_WRITE
(
GPIO_OUT_W1TC_ADDRESS
,
1
<<
gpio
);
}
// Lua: ws2812.write(pin, "string")
// Byte triples in the string are interpreted as G R B values.
// ws2812.write(4, string.char(0, 255, 0)) uses GPIO2 and sets the first LED red.
// ws2812.write(3, string.char(0, 0, 255):rep(10)) uses GPIO0 and sets ten LEDs blue.
// ws2812.write(4, string.char(255, 0, 0, 255, 255, 255)) first LED green, second LED white.
static
int
ICACHE_FLASH_ATTR
ws2812_write
(
lua_State
*
L
)
{
const
uint8_t
pin
=
luaL_checkinteger
(
L
,
1
);
size_t
length
;
const
char
*
buffer
=
luaL_checklstring
(
L
,
2
,
&
length
);
platform_gpio_mode
(
pin
,
PLATFORM_GPIO_OUTPUT
,
PLATFORM_GPIO_FLOAT
);
platform_gpio_write
(
pin
,
0
);
os_delay_us
(
10
);
os_intr_lock
();
const
char
*
const
end
=
buffer
+
length
;
while
(
buffer
!=
end
)
{
uint8_t
mask
=
0x80
;
while
(
mask
)
{
(
*
buffer
&
mask
)
?
send_ws_1
(
pin_num
[
pin
])
:
send_ws_0
(
pin_num
[
pin
]);
mask
>>=
1
;
}
++
buffer
;
}
os_intr_unlock
();
return
0
;
}
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
const
LUA_REG_TYPE
ws2812_map
[]
=
{
{
LSTRKEY
(
"write"
),
LFUNCVAL
(
ws2812_write
)},
{
LNILKEY
,
LNILVAL
}
};
LUALIB_API
int
luaopen_ws2812
(
lua_State
*
L
)
{
// TODO: Make sure that the GPIO system is initialized
LREGISTER
(
L
,
"ws2812"
,
ws2812_map
);
return
1
;
}
// ----------------------------------------------------------------------------
lua_examples/irsend.lua
View file @
0f09d237
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
-- Vladimir Dronnikov <dronnikov@gmail.com>
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
--
-- Example:
-- Example:
--
requir
e("irsend").nec(4, 0x00ff00ff)
--
dofil
e("irsend
.lua
").nec(4, 0x00ff00ff)
------------------------------------------------------------------------------
------------------------------------------------------------------------------
local
M
local
M
do
do
...
...
lua_examples/yet-another-bmp085.lua
View file @
0f09d237
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
-- Heavily based on work of Christee <Christee@nodemcu.com>
-- Heavily based on work of Christee <Christee@nodemcu.com>
--
--
-- Example:
-- Example:
--
requir
e("bmp085").read(sda, scl)
--
dofil
e("bmp085
.lua
").read(sda, scl)
------------------------------------------------------------------------------
------------------------------------------------------------------------------
local
M
local
M
do
do
...
@@ -59,20 +59,13 @@ do
...
@@ -59,20 +59,13 @@ do
MD
=
r16
(
0xBE
)
MD
=
r16
(
0xBE
)
end
end
-- get raw P
-- get raw P
local
p
-- NB: optimize for oss = 0
if
not
oss
then
oss
=
0
end
if
not
oss
then
oss
=
0
end
if
oss
==
0
then
if
oss
<=
0
then
oss
=
0
end
oss
=
0
if
oss
>
3
then
oss
=
3
end
w8
(
0xF4
,
0x34
)
w8
(
0xF4
,
0x34
+
64
*
oss
)
tmr
.
delay
(
5000
)
tmr
.
delay
((
4
+
3
^
oss
)
*
1000
)
p
=
r8
(
0xF6
)
*
256
+
r8
(
0xF7
)
local
p
=
r8
(
0xF6
)
*
65536
+
r8
(
0xF7
)
*
256
+
r8
(
0xF8
)
else
p
=
p
/
2
^
(
8
-
oss
)
w8
(
0xF4
,
0x34
+
64
*
oss
)
tmr
.
delay
(
30000
)
p
=
r8
(
0xF6
)
*
65536
+
r8
(
0xF7
)
*
256
+
r8
(
0xF8
)
p
=
p
/
2
^
(
8
-
oss
)
end
-- get T
-- get T
w8
(
0xF4
,
0x2E
)
w8
(
0xF4
,
0x2E
)
tmr
.
delay
(
5000
)
tmr
.
delay
(
5000
)
...
@@ -86,14 +79,14 @@ do
...
@@ -86,14 +79,14 @@ do
local
X1
=
B2
*
(
B6
*
B6
/
4096
)
/
2048
local
X1
=
B2
*
(
B6
*
B6
/
4096
)
/
2048
local
X2
=
AC2
*
B6
/
2048
local
X2
=
AC2
*
B6
/
2048
local
X3
=
X1
+
X2
local
X3
=
X1
+
X2
local
B3
=
((
AC1
*
4
+
X3
)
*
2
^
oss
+
2
)
/
4
local
B3
=
((
AC1
*
4
+
X3
)
*
2
^
oss
+
2
)
/
4
X1
=
AC3
*
B6
/
8192
X1
=
AC3
*
B6
/
8192
X2
=
(
B1
*
(
B6
*
B6
/
4096
))
/
65536
X2
=
(
B1
*
(
B6
*
B6
/
4096
))
/
65536
X3
=
(
X1
+
X2
+
2
)
/
4
X3
=
(
X1
+
X2
+
2
)
/
4
local
B4
=
AC4
*
(
X3
+
32768
)
/
32768
local
B4
=
AC4
*
(
X3
+
32768
)
/
32768
local
B7
=
(
p
-
B3
)
*
(
50000
/
2
^
oss
)
local
B7
=
(
p
-
B3
)
*
(
50000
/
2
^
oss
)
p
=
B7
/
B4
*
2
p
=
B7
/
B4
*
2
X1
=
(
p
/
256
)
^
2
X1
=
(
p
/
256
)
^
2
X1
=
(
X1
*
3038
)
/
65536
X1
=
(
X1
*
3038
)
/
65536
X2
=
(
-
7357
*
p
)
/
65536
X2
=
(
-
7357
*
p
)
/
65536
p
=
p
+
(
X1
+
X2
+
3791
)
/
16
p
=
p
+
(
X1
+
X2
+
3791
)
/
16
...
...
lua_examples/yet-another-dht22.lua
View file @
0f09d237
...
@@ -5,8 +5,8 @@
...
@@ -5,8 +5,8 @@
-- Vladimir Dronnikov <dronnikov@gmail.com>
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
--
-- Example:
-- Example:
-- print("DHT11",
requir
e("dht22").read(4))
-- print("DHT11",
dofil
e("dht22
.lua
").read(4))
-- print("DHT22",
requir
e("dht22").read(4, true))
-- print("DHT22",
dofil
e("dht22
.lua
").read(4, true))
-- NB: the very first read sometimes fails
-- NB: the very first read sometimes fails
------------------------------------------------------------------------------
------------------------------------------------------------------------------
local
M
local
M
...
...
lua_examples/yet-another-ds18b20.lua
View file @
0f09d237
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
-- Vladimir Dronnikov <dronnikov@gmail.com>
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
--
-- Example:
-- Example:
--
requir
e("ds18b20").read(4, function(r) for k, v in pairs(r) do print(k, v) end end)
--
dofil
e("ds18b20
.lua
").read(4, function(r) for k, v in pairs(r) do print(k, v) end end)
------------------------------------------------------------------------------
------------------------------------------------------------------------------
local
M
local
M
do
do
...
...
lua_modules/redis/redis.lua
0 → 100644
View file @
0f09d237
------------------------------------------------------------------------------
-- Redis client module
--
-- LICENCE: http://opensource.org/licenses/MIT
-- Vladimir Dronnikov <dronnikov@gmail.com>
--
-- Example:
-- local redis = dofile("redis.lua").connect(host, port)
-- redis:publish("chan1", foo")
-- redis:subscribe("chan1", function(channel, msg) print(channel, msg) end)
------------------------------------------------------------------------------
local
M
do
-- const
local
REDIS_PORT
=
6379
-- cache
local
pairs
,
tonumber
=
pairs
,
tonumber
--
local
publish
=
function
(
self
,
chn
,
s
)
self
.
_fd
:
send
((
"*3\r\n$7\r\npublish\r\n$%d\r\n%s\r\n$%d\r\n%s\r\n"
):
format
(
#
chn
,
chn
,
#
s
,
s
))
-- TODO: confirmation? then queue of answers needed
end
local
subscribe
=
function
(
self
,
chn
,
handler
)
-- TODO: subscription to all channels, with single handler
self
.
_fd
:
send
((
"*2\r\n$9\r\nsubscribe\r\n$%d\r\n%s\r\n"
):
format
(
#
chn
,
chn
))
self
.
_handlers
[
chn
]
=
handler
-- TODO: confirmation? then queue of answers needed
end
local
unsubscribe
=
function
(
self
,
chn
)
self
.
_handlers
[
chn
]
=
false
end
-- NB: pity we can not just augment what net.createConnection returns
local
close
=
function
(
self
)
self
.
_fd
:
close
()
end
local
connect
=
function
(
host
,
port
)
local
_fd
=
net
.
createConnection
(
net
.
TCP
,
0
)
local
self
=
{
_fd
=
_fd
,
_handlers
=
{
},
-- TODO: consider metatables?
close
=
close
,
publish
=
publish
,
subscribe
=
subscribe
,
unsubscribe
=
unsubscribe
,
}
_fd
:
on
(
"connection"
,
function
()
--print("+FD")
end
)
_fd
:
on
(
"disconnection"
,
function
()
-- FIXME: this suddenly occurs. timeout?
--print("-FD")
end
)
_fd
:
on
(
"receive"
,
function
(
fd
,
s
)
--print("IN", s)
-- TODO: subscription to all channels
-- lookup message pattern to determine channel and payload
-- NB: pairs() iteration gives no fixed order!
for
chn
,
handler
in
pairs
(
self
.
_handlers
)
do
local
p
=
(
"*3\r\n$7\r\nmessage\r\n$%d\r\n%s\r\n$"
):
format
(
#
chn
,
chn
)
if
s
:
find
(
p
,
1
,
true
)
then
-- extract and check message length
-- NB: only the first TCP packet considered!
local
_
,
start
,
len
=
s
:
find
(
"(%d-)\r\n"
,
#
p
)
if
start
and
tonumber
(
len
)
==
#
s
-
start
-
2
and
handler
then
handler
(
chn
,
s
:
sub
(
start
+
1
,
-
2
))
-- ends with \r\n
end
end
end
end
)
_fd
:
connect
(
port
or
REDIS_PORT
,
host
)
return
self
end
-- expose
M
=
{
connect
=
connect
,
}
end
return
M
tools/esptool.py
View file @
0f09d237
#!/usr/bin/env python
#!/usr/bin/env python
2
#
#
# ESP8266 ROM Bootloader Utility
# ESP8266 ROM Bootloader Utility
# https://github.com/themadinventor/esptool
# https://github.com/themadinventor/esptool
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment