diff --git a/modules/ds18b20.CN.md b/modules/ds18b20.CN.md
new file mode 100644
index 00000000..0ad302a3
--- /dev/null
+++ b/modules/ds18b20.CN.md
@@ -0,0 +1,139 @@
+#DS18B20 模块
+##引用
+
+ds18b20 = require("ds18b20")
+
+##常量
+C, F, K
+
+
+##setup()
+####描述
+设置DS18B20所在的Pin。
+
+####语法
+setup(pin)
+
+####参数
+pin: 1~10, IO 编号。如果参数为nil,会自动设定为9(GPIO2).
+
+####返回值
+nil
+
+####示例
+```lua
+ds18b20 = require("ds18b20")
+ds18b20.setup(9)
+```
+
+####参见
+**-** []()
+
+
+
+## addrs()
+####描述
+返回单总线上所有DS18B20器件的地址列表(table)。如果没有执行过setup(pin),则会自动对引脚9(GPIO2)进行单总线模式初始化。
+
+####语法
+addrs()
+
+####参数
+nil
+####返回值
+addrs: 返回包含单总线上所有DS18B20器件的地址列表(table)。其中地址是字符串类型(String)。如果失败则返回nil.
+
+####示例
+```lua
+ds18b20 = require("ds18b20")
+ds18b20.setup(9)
+addrs = ds18b20.addrs()
+if (addrs ~= nil) then
+ print("Total DS18B20 sensors: "..table.getn(addrs))
+end
+```
+
+####参见
+**-** []()
+
+
+
+## readNumber()
+####描述
+读取温度数值。如果没有执行过setup(pin),则会自动对引脚9(GPIO2)进行单总线模式初始化。
+
+####语法
+readNumber(addr, unit)
+
+####参数
+addr: 字符串, DS18B20地址。 如果该参数为nil,会自动选择第一个发现的地址。
+unit: 单位转换,只接受常量C(摄氏度),F(华氏度), K(开氏度)。如果该参数为nil,会自动选择常量C(摄氏度) 。
+
+####返回值
+t1: 数值,温度的整数部分。如果读取失败返回nil.
+t2: 数值,温度的小数部分。如果读取失败返回nil.
+
+####示例
+```lua
+t=require("ds18b20")
+t.setup(9)
+addrs=t.addrs()
+-- Total DS18B20 numbers, assume it is 2
+print(table.getn(addrs))
+-- The first DS18B20
+print(t.readNumber(addrs[1],t.C))
+print(t.readNumber(addrs[1],t.F))
+print(t.readNumber(addrs[1],t.K))
+-- The second DS18B20
+print(t.readNumber(addrs[2],t.C))
+print(t.readNumber(addrs[2],t.F))
+print(t.readNumber(addrs[2],t.K))
+-- Just read
+print(t.readNumber())
+-- Just read as fahrenheit
+print(t.readNumber(nil,t.F))
+-- Read as values
+t1, t2 = t.readNumber()
+```
+####参见
+**-** []()
+
+
+## read()
+####描述
+读取温度字符串。如果没有执行过setup(pin),则会自动对引脚9(GPIO2)进行单总线模式初始化。
+
+####语法
+read(addr, unit)
+
+####参数
+addr: 字符串, DS18B20地址。 如果该参数为nil,会自动选择第一个发现的地址。
+unit: 单位转换,只接受常量C(摄氏度),F(华氏度), K(开氏度)。如果该参数为nil,会自动选择常量C(摄氏度) 。
+
+####返回值
+t: 字符串,表示成字符串形式的温度。如果读取失败返回nil.
+
+####示例
+```lua
+t=require("ds18b20")
+t.setup(9)
+addrs=t.addrs()
+-- Total DS18B20 numbers, assume it is 2
+print(table.getn(addrs))
+-- The first DS18B20
+print(t.read(addrs[1],t.C))
+print(t.read(addrs[1],t.F))
+print(t.read(addrs[1],t.K))
+-- The second DS18B20
+print(t.read(addrs[2],t.C))
+print(t.read(addrs[2],t.F))
+print(t.read(addrs[2],t.K))
+-- Just read
+print(t.read())
+-- Just read as centigrade
+print(t.read(nil,t.C))
+
+```
+####参见
+**-** []()
+
diff --git a/modules/18b20.lua b/modules/ds18b20.lua
similarity index 99%
rename from modules/18b20.lua
rename to modules/ds18b20.lua
index a9503238..3857c941 100644
--- a/modules/18b20.lua
+++ b/modules/ds18b20.lua
@@ -102,6 +102,8 @@ function readNumber(addr, unit)
t = (data:byte(1) + data:byte(2) * 256) * 1125 + 320000
elseif(unit == K) then
t = (data:byte(1) + data:byte(2) * 256) * 625 + 2731500
+ else
+ return nil
end
t1 = t / 10000
t2 = t % 10000