https://github.com/nodemcu
鏂囨。銆嬭嫳璇€濇ā鍧椼€婣DC ADC妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday jmattsson adc.c ADC妯″潡鎻愪緵瀵瑰唴缃瓵DC鐨勮闂€?/p>
鍦‥SP8266卤鍙湁涓€涓崟閫氶亾锛屼笌鐢垫睜鐢靛帇澶嶇敤銆傛牴鎹€滅壒瀹氬垵濮嬪寲鏁版嵁"(瀛楄妭107)涓殑璁?缃紝鍙互浣跨敤ADC璇诲彇澶栭儴鐢靛帇锛屾垨璇诲彇绯荤粺鐢靛帇(vdd33),浣嗕笉鑳藉悓鏃惰鍙栦袱鑰呫€?鍙互閫氳繃璇dc.force_init_mode()鍔熻兘閰嶇疆浣跨敤鍝妯″紡鐨凙DC 鈻¤娉ㄦ剰锛屽湪浠庝竴涓垏鎹?鍒板彟涓€涓猲ode.restart()涔嬪悗锛屽湪鏇存敼鐢熸晥涔嬪墠闇€瑕侀噸鏂板惎鍔ㄧ郴缁?渚嬪锛岄噸鏂板惎鍔ㄧ數 婧愶紝閲嶇疆鎸夐挳)銆?adc.force_init_mode () 妫€鏌诲苟鍦ㄥ繀瑕佹椂閲嶆柊閰嶇疆ESP init鏁版嵁鍧椾腑鐨凙DC妯″紡璁剧疆銆?adc.read () 瀵笰DC杩涜閲嗘牱銆?adc.readvdd33 () 璇诲彇绯荤粺鐢靛帇銆?/p>
adc.force_init_mode () 妫€鏌诲苟鍦ㄥ繀瑕佹椂閲嶆柊閰嶇疆ESPinit鏁版嵁鍧椾腑鐨凙DC妯″紡璁剧疆銆?鍙ユ硶 adc.force_init_mode(mode_value) 鍙傛暟 mode_value 鍏朵腑涔嬩竴 adc.INIT_ADC 鎴?adc . INIT_VDD33銆?杩斿洖 濡傛灉鍑芥暟蹇呴』鏇存敼妯″紡锛屽垯涓簍rue;濡傛灉妯″紡宸茬粡閰嶇疆锛屽垯涓篺alse銆傚湪鐪熸鐨勫洖鎶ヤ笂锛孍SP闇€瑕?閲嶆柊鍚姩鎵嶈兘浣挎洿鏀圭敓鏁堛€?鈥搃n you init.Lua: if adc.force_init_mode(adc.INIT_VDD33) then node.restart() return 鈥?donrt bother continuing^ the restart is scheduLed end print(鈥淪ystem voltage (mV):鈥? adc.readvdd33(0)) 涔熷彲浠ョ湅鐪?node.restart() adc.read 锛堬級 瀵笰DC杩涜閲嗘牱銆?鍙ユ硶 adc 銉?read(channel) 鍙傛暟 channel鍦‥SP8266涓婂缁堜负0 杩斿洖 閲嗘牱鍊硷紙鏁伴噺锛?濡傛灉ESP8266閰嶇疆涓轰娇鐢ˋDC璇诲彇绯荤粺鐢靛帇锛屽垯姝ゅ姛鑳藉皢濮嬬粓杩斿洖65535.杩欐槸纭欢鍜?鎴朣DK 闄愬埗銆?val = adc.read(0) adc.readvdd33 锛堬級 璇诲彇绯荤粺鐢靛帇銆?鍙ユ硶 adc 銉?readvdd33() 鍙傛暟 娌℃湁 杩斿洖 绯荤粺鐢靛帇锛堟浼忥級锛堜釜鏁帮級 濡傛灉ESP8266閰嶇疆涓轰娇鐢ˋDC瀵瑰閮ㄥ紩鑴氳繘琛岄噰鏍凤紝鍒欐鍔熻兘灏嗗缁堣繑鍥?5535.杩欐槸涓€涓‖ 浠跺拰/鎴朣DK闄愬埗銆?ADS1115 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?4鏃?fetchbot fetchbot ads!115.c
璇ユā鍧楁彁渚涘ADS1115 16浣嶆ā鏁拌浆鎹㈠櫒鐨勮闂畂 鉂惰鍛?鎵€鏈夋ā鎷熻緭鍏ョ殑缁濆鏈€澶ч瀹氬€奸兘-0.3V to VDD+0.3V绉颁负GND銆?ads!115.read () 鑾峰緱瀛樺偍鍦ㄥ厛鍓嶅彂甯冪殑杞崲鐨勫瘎瀛樺櫒涓殑缁撴灉锛?ads!115.setting () ADC鐨勯厤缃缃枲 ads!115.setup () 鍦ㄥ畾涔夌殑FC鍣ㄤ欢鍦板潃涓婂垵濮嬪寲鍣ㄤ欢銆?adslll5.startread () 鍦ㄥ崟娆℃ā寮忎笅鍚姩ADC璇绘暟锛岃浆鎹㈠畬鎴愬悗灏嗚皟鐢ㄤ竴涓彲閫夌殑鍥炶皟鍑芥暟锛屽湪璇ュ嚱 鏁颁腑鍙互鑾峰緱ADC杞崲缁撴灉銆?/p>
adslll5.read 锛堬級 鑾峰緱瀛樺偍鍦ㄥ厛鍓嶅彂甯冪殑杞崲鐨勫瘎瀛樺櫒涓殑缁撴灉锛屼緥濡傚湪杩炵画妯″紡鎴栬浆鎹㈠氨缁腑鏂€?鍙ユ硶 volt, volt_deCj adc = adslll5.read锛堬級 鍙傛暟 娌℃湁 杩斿洖 銉籿olt鐢靛帇锛堝崟浣峬V锛夛紙瑙佷笅闈㈢殑娉ㄩ噴锛?鈥olt_dec鐢靛帇鍗佽繘鍒讹紙瑙佷笅闈㈢殑娉ㄩ噴锛?鈥dc鍘熷鐨刟dc鍊?鉂舵敞鎰?濡傛灉浣跨敤娴偣鍥轰欢锛屽垯volt鏄诞鐐规暟銆傚湪鏁存暟鍥轰欢涓婏紝鏈€鍚庣殑鍊煎繀椤讳粠volt鍜岃繛鎺ヨ捣 鏉?volt_dec o local idj alert_pin, sda, scl = 0, 7, 6, 5 i2c.setup(id, sda, scl4 i2c.SLOW) adslll5.setup(adslll5.ADDR_GND) 鈥揷ontinuous mode adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPSJ adslll5.SINGLE_銆? adslll5.CONI --read adc resuLt with read() volt, volt_dec, adc = adslll5.read() print(volt, volt_dec, adc) 鈥揷omparator adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPS, adslll5.SINGLE_0, adslll5.CONI local function comparator(levels when) 鈥搑ead adc resuLt with read() when threshoLd reached voltj volt_decj adc = adslll5.read() print(volt4 volt_dec4 adc) end gpio.mode(alert_pinJ gpio.INT) gpio.trig(alert_pin, 鈥渂oth鈥? comparator) 鈥搑ead adc resuLt with read() volt, volt_decj adc = adslll5.read() print(volt, volt_dec, adc) adslll5.setting () ADC鐨勯厤缃缃€?鍙ユ硶 adslll5.setting(GAIN, SAMPLES, CHANNEL, MODE], CONVERSION_RDY][, COMPARATORj THRESHOLD_LOW, THRESHO 鍙傛暟 GAIN鍙紪绋嬪鐩婃斁澶у櫒
SAMPLES姣忕閲嗘牱鏁版嵁閫熺巼 adslll5.DR 8SPS
MODE璁惧鎿嶄綔妯″紡 銆俛dslll5.SINGLE_SHOT 鍗曞彂妯″紡 o adslll5.CONTINUOUS 杩炵画妯″紡 CONVERSION_RDY杞崲鍑嗗灏辩华鍚庣殑杞崲娆℃暟锛堝彲閫夛級 o adslll5.C0NV RDY 1 o adslll5.CONV_RDY_2 o adslll5.C0NV_RDY_4 鈥?COMPARATOR姣旇緝鍣ㄧ疆浣嶅悗鐨勮浆鎹㈡鏁?鍙€? O adslll5.COMP_lCONV O adslll5.COMP_2CONV O adslll5.C0MP_4C0NV 鈥?THRESHOLD_LOW O 0 - + GAIN_MAX鍗曠杈撳叆鐨勫崟浣嶄负mV O -GAIN_MAX - + GAIN_MAX 浠V涓哄樊鍒嗚緭鍏?鈥?THRESHOLD_HI O 0 - + GAIN_MAX鍗曠杈撳叆鐨勫崟浣嶄负mV O -GAIN_MAX - + GAIN_MAX 浠V涓哄樊鍒嗚緭鍏?/p>
杩斿洖 nil local id, sda, scl = 0, 6, 5 i2c.setup(id, sda, scl, i2c.SL0W) adslll5.setup(adslll5.ADDR_GND) adslll5.setting(adslll5.GAIN_6_144V4 adslll5.DR_128SPS, adslll5.SINGLE_0, adslll5.SING adslll5.setup () 鍦ㄥ畾涔夌殑FC鍣ㄤ欢鍦板潃涓婂垵濮嬪寲鍣ㄤ欢銆?鍙ユ硶 adslll5.setup(ADDRESS) 鍙傛暟 鈥?ADDRESS O adslll5.ADDR_ GND O adslll5.ADDR VDD O adslll5.ADDR SDA 0 adslll5.ADDR _SCL
杩斿洖 nil local idj sda, scl = 0, 6, 5 i2c.setup(id, sda, scl, i2c.SLOW) adslll5.setup(adslll5.ADDR_GND) adslll5.startread () 鍦ㄥ崟娆℃ā寮忎笅鍚姩ADC璇绘暟锛岃浆鎹㈠畬鎴愬悗灏嗚皟鐢ㄤ竴涓彲閫夌殑鍥炶皟鍑芥暟锛屽湪璇ュ嚱鏁颁腑鍙互鑾峰緱ADC杞?鎹㈢粨鏋溿€?鍙ユ硶 adslll5.startread([CALLBACK]) 鍙傛暟 鈥?CALLBACK鍥炶兇鍑借嚧搴滀粫MC鎶€鐜﹀厓鎴愬悗璋冪敤 銆?function(voltj volt_deCj adc) end 杩斿洖 鈥?nil 渚?local idj alert_pinj sda, scl = 0, 7, 6, 5 i2c.setup(id, sdaj scl, i2c.SLOW) adslll5.setup(adslll5.ADDR_GND) 鈥搒ingLe shot adslll5.setting(adslll5.GAIN_6_144V, adslll5.DR_128SPS, adslll5.SINGLE_03 adslll5.SING --start adc conversion and get resuLt in caLLback after conversion is ready adsill5.startread(function(volt4 volt_dec, adc) print(volt, volt_decj adc) end) 鈥揷onversion ready adslll5.setting(adslll5.GAIN_6_144V4 adslll5.DR_128SPS, adslll5.SINGLE_0J adslll5.SING local function conversion_ready(levelj when) voltj volt_deCj adc = adslll5.read() print(volt, volt_deCj adc) end gpio.mode(alert_pinj gpio.INT) gpio.trig(alert_pinj "down"j conversion_ready) 鈥搒tart conversion and get resuLt with read() after conversion ready pin asserts adslll5.startread() ADXL345妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?鏃?Jason Schmidlapp Jason Schmidlapp adxl345.c
璇ユā鍧楁彁渚涘ADXL345涓夎酱鍔犻€熷害璁$殑璁块棶銆?adxl345.read () 閲嗘牱浼犳劅鍣ㄥ苟浠庡姞閫熷害璁¤繑鍥瀀, Y鍜孼鏁版嵁銆?adxl345.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?adxl345.setup () 鍒濆鍖栨ā鍧椼€?/p>
adxl345.read () 閲嗘牱浼犳劅鍣ㄥ苟浠庡姞閫熷害璁¤繑鍥瀀, Y鍜孼鏁版嵁銆?鍙ユ硶 adxl345 銉?read() 杩斿洖 X, Y, Z鏁版嵁(鏁存暟) 渚?local sdaj scl = 1, 2 i2c.setup(0j sda, scl, i2c.SL0W) 鈥?caLL i2c.setup() onLy once adxl345.setup() local x>y,z = adxl345.read() print(string.format("X = %d, Y = %d, Z = %d鈥? x, y, z)) adxl345.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俛dxl345.setup()鏀逛负浣跨敤銆?鍙ユ硶 adxl345.inittsda. scl) 鍙傛暟 銉籹da鏁版嵁寮曡剼 鈥?scl鏃堕挓寮曡剼 杩斿洖 nil adxl345.setup () 鍒濆鍖栨ā鍧椼€?鍙ユ硶 adx!345.setup() 鍙傛暟 娌℃湁 杩斿洖 nil AM2320妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞? 鏈?14 鏃?HenkVergonet HenkVergonet am2320.c 璇ユā鍧椾娇鐢╥2c鎺ュ彛璁块棶AM2320婀垮害鍜屾俯搴︿紶鎰熷櫒銆?am2320.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?am2320.read () 瀵逛紶鎰熷櫒杩涜閲嗘牱锛屽苟杩斿洖鐩稿婀垮害锛屽崟浣嶄负锛?娓╁害鍗曚綅涓烘憚姘忓害锛屽崟浣?涓?0銆?am2320.setup () 鍒濆鍖栨ā鍧椼€?/p>
am2320.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆傝繑鍥炴ā鍨嬶紝鐗堟湰锛屽簭鍒楋紝浣嗘槸鍦ㄦ垜鐨勬ā鍨嬩腑锛岃繖浜涢兘鏄浂鎺?缂濄€?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俛m2320.setup()鏀逛负浣跨敤銆?鍙ユ硶 modelj version, serial = am2320.init(sda^ scl) 鍙傛暟 銉籹da鏁版嵁寮曡剼 鈥cl鏃堕挓寮曡剼 杩斿洖 鈥odel妯″瀷鐨?6浣嶆暟瀛?鈥ersion 8浣嶇増鏈彿 鈥erial 32浣嶅簭鍒楀彿 娉ㄦ剰锛氬浜庢墍鏈夎繖浜涳紝鎴戝彧瑙傚療鍒?鐨勫€硷紝涔熻鍏朵粬浼犳劅鍣ㄨ繑鍥炴洿鏄庢櫤鐨勮鏁般€?am2320.read () 瀵逛紶鎰熷櫒杩涜閲嗘牱锛屽苟杩斿洖鐩稿婀垮害锛屽崟浣嶄负锛?娓╁害鍗曚綅涓烘憚姘忓害锛屽崟浣嶄负10銆?鍙ユ硶 am2320.read() 杩斿洖 鈥elative humidity鐧惧垎姣斾箻浠?0 (鏁存暟) 鈥emperature 鍦ㄤ箻浠?10 (鏁存暟) 渚?sdaj scl = lj 2 i2c.setup(0, sdaj sclj i2c.SL0W) 鈥?caLL I2c.setup() onLy once am2320.setup() ph, t = am2320.read() print(string.format(MRH: %s%%\ rh / 10)) print(string.format(鈥淭emperature: %s degrees C鈥? t / 10)) am2320.setup () 鍒濆鍖栨ā鍧椼€傝繑鍥炴ā鍨嬶紝鐗堟湰锛屽簭鍒楋紝浣嗘槸鍦ㄦ垜鐨勬ā鍨嬩腑锛岃繖浜涢兘鏄浂鎺ョ紳銆?鍙ユ硶 model, version, serial = am2320.setup() 鍙傛暟 娌℃湁 杩斿洖 鈥odel妯″瀷鐨?6浣嶆暟瀛?鈥ersion 8浣嶇増鏈彿 鈥erial 32浣嶅簭鍒楀彿 娉ㄦ剰锛氬浜庢墍鏈夎繖浜涳紝鎴戝彧瑙傚療鍒?鐨勫€硷紝涔熻鍏朵粬浼犳劅鍣ㄨ繑鍥炴洿鏄庢櫤鐨勮鏁般€?APA102妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?6鏃?缃椾集鐗光€㈢鏂?缃椾集鐗光€㈢鏂?apal02.c 璇ユā鍧楁彁渚汱ua瀵笰PA102 RGB LED鐨勮闂紝鍏跺姛鑳界被浼间簬甯歌鐨刉S2812鍙鍧€LED銆?DotStarLED鏄?050灏哄鐨凩ED,鍦↙ED鍐呴儴甯︽湁宓屽叆寮忓井鎺у埗鍣ㄣ€傛偍鍙互灏嗘瘡涓狶ED鐨?棰滆壊/浜害璁剧疆涓?4浣嶉鑹?姣忎釜绾㈣壊缁胯壊鍜岃摑鑹?浣?銆傛瘡涓狶ED鐨勫姛鑳界被浼间簬绉讳綅瀵?瀛樺櫒锛岃鍙栬緭鍏ュ紩鑴氫笂鐨勮緭鍏ラ鑹叉暟鎹紝鐒跺悗灏嗕箣鍓嶇殑棰滆壊鏁版嵁绉诲嚭杈撳嚭寮曡剼銆傞€氳繃鍙?閫佷竴涓查暱闀跨殑鏁版嵁锛屾偍鍙互鎺у埗鏃犻檺鏁伴噺鐨凩ED,鍙渶绮樿创鏇村鐨凩ED鎴栧垏鏂笉闇€瑕佺殑 LED鍗冲彲銆?鏉ユ簮锛欰dafruit apal02.write () 灏?浣嶇殑ABGR鏁版嵁鍙戦€佸埌APA102閾俱€?apal02.write () 灏?浣嶇殑ABG R鏁版嵁鍙戦€佸埌APA102閾俱€?鍙ユ硶 apal02.write(data_pin, clock_pin, string) 鍙傛暟 -data_pin 浠讳綍GPIO寮曡剼0,1,2, 鈥?銉?clock_pin 浠讳綍GPIO寮曡剼0,1,2, 鈥?-String鏈夋晥杞借嵎琚彂閫佸埌涓€涓垨澶氫釜APA102LED銆傚畠搴旇鐢辨瘡涓厓绱犵殑ABGR鍥涘厓缁勭粍 鎴愩€?0 ai绗竴涓儚绱犵殑Intensity閫氶亾(0-31) 鈻?bi绗竴涓儚绱犵殑钃濊壊閫氶亾(0-255) 0 G1绗竴涓儚绱犵殑缁胯壊閫氶亾(0-255) 0 R1绗竴涓儚绱犵殑绾㈣壊閫氶亾(0-255) 鈥︿綘鍙互杩炴帴寰堝APA102鈥?銆侫2 , B2 , G2 , R2鏄笅APA102S寮哄害锛岃摑锛岀豢鍜岀孩淇¢亾鍙傛暟 杩斿洖 nil a = 31 b = 0 g = 0 r = 255 leds_abgr = string.char(a, b, g, r, a, b, g, r) apal02.write(2, 3, leds_abgr) 鈥?turn two APA102s to red, connected to data_pin . 鈥搒et the first 30 Leds to red apal02.write(2, 3, string.char(31j 255, 0> 0):rep(30)) 浣嶆ā鍧楋紖 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 https:鍊媡hub.com/LuaDist/bitlib, Zeroday Zeroday bite
浣嶆搷浣滄敮鎸侊紝鍦?2浣嶆暣鏁般€?bitarshift () 绠楁湳鍙崇Щ涓€涓浉褰撲簬c涓殑鍊?>> 绉讳綅鐨勬暟瀛?bitband () 鎸変綅涓庯紝鐩稿綋浜巚all&val2&銆?bitbit () 鐢?浣嶇敓鎴愪竴涓暟瀛楋紙鐢ㄤ簬鎺╃爜鐢熸垚锛? bitbnot () 鎸変綅鍚﹀畾锛岀浉褰撲簬C涓殑~鍊笺€?bitbor () 鎸変綅鎴栬繍绠楋紝鐩稿綋浜巚all|val2|銆?bitbxor () 鎸変綅X0R,绛夊悓^vallAval2Ao bitclear () 娓呴櫎涓€涓暟瀛椾腑鐨勪綅銆?bitisclear () 娴嬭瘯缁欏畾浣嶆槸鍚﹁娓呴櫎銆?bitisset () 娴嬭瘯缁欏畾浣嶆槸鍚﹁璁剧疆銆?bitdshift () 宸︾Щ涓€涓暟瀛楋紝鐩稿綋浜庘€滃湪C涓Щ浣嶁€?bitrshift () 閫昏緫鍙崇Щ涓€涓暟瀛楋紝鐩稿綋浜庯紙鏃犵鍙凤級鍊?>鍦紙锛氫腑绉讳綅 bitset () 鍦ㄤ竴涓暟瀛椾腑璁剧疆浣嶃€?/p>
bit.arshift () 绠楁湳鍙崇Щ涓€涓瓑浜巚alue >> shift C鐨勬暟瀛?鍙ユ硶 bit.arshift(value, shift) 鍙傛暟 鈥alue鍊肩殑杞Щ 鈥hift鑱屼綅杞Щ 杩斿洖 鏁板瓧鐭虫(绠楁湳) bit.band () 鎸変綅涓庯紝鐩稿綋浜?vail & val2 & . . . & vain C. 鍙ユ硶 bit.band(vallj val2 [,鈥︺兓 vain]) 鍙傛暟 鈥?vail鍏堝拰璁烘嵁 -val2绗簩涓狝ND鍙傛暟 銉烩€ain 鈥︾n涓鐐?杩斿洖 鎵€鏈夊弬鏁扮殑鎸変綅涓?鏁板瓧) bit.bit () 鐢?浣嶇敓鎴愪竴涓暟瀛?鐢ㄤ簬鎺╃爜鐢熸垚)銆傜浉褰撲簬1 鍙ユ硶 bit 銉?bit(position) 鍙傛暟 position浣嶇殑浣嶇疆灏嗚璁剧疆涓? 杩斿洖 涓€涓彧鏈変竴涓?浣嶇殑鏁板瓧(鍏朵綑鐨勮璁剧疆涓?) bit.bnot () 鎸変綅鍚﹀畾锛岀浉褰撲簬c涓殑~鍊笺€?鍙ユ硶 bit.bnot(value) 鍙傛暟 value瑕佸惁瀹氱殑鏁板瓧 杩斿洖 鏁板瓧鐨勬寜浣嶅彇鍙嶇殑鍊?bit.bor () 鎸変綅鎴栵紝鐩稿綋浜?vail I val2 | . . . | vain C. 鍙ユ硶 bit.bor(vallj val2 [, vain]) 鍙傛暟 銉籿ail绗竴涓狾R璁虹偣銆?鈥al2绗簩涓狾R璁虹偣銆?鈥⑩€?.vain 鈥︾n涓鐐?杩斿洖 鎵€鏈夊弬鏁扮殑鎸変綅鎴?鏁板瓧) bit.bxor () 鎸変綅XOR,绛夊悓 vail A val2 A 鈥?A vain 浜嶤. 鍙ユ硶 bit.bxor(vall, val2 vain]) 鍙傛暟 -vail绗竴涓猉OR鍙傛暟 -val2绗簩涓猉OR鍙傛暟 -鈥ain 鈥︾ n 涓猉OR 鍙傛暟 杩斿洖 鎵€鏈夊弬鏁扮殑鎸変綅XOR (鏁板瓧) bit.clear () 娓呴櫎涓€涓暟瀛椾腑鐨勪綅銆?鍙ユ硶 bit.clear(value, posl 銉?銉?posn]) 鍙傛暟 鈥alue鍩烘暟 銉籶osl绗竴浣嶇殑浣嶇疆娓呴櫎 銉烩€osn绗琻浣嶇殑浣嶇疆娓呴櫎 杩斿洖 鍦ㄧ粰瀹氫綅缃竻闆剁殑浣嶆暟(S) bit.isclear () 娴嬭瘯缁欏畾浣嶆槸鍚﹁娓呴櫎銆?鍙ユ硶 bit銉籭sclear(value, position) 鍙傛暟 鈥alue瑕佹祴璇曠殑鍊?鈥osition浣嶆祴璇?杩斿洖 濡傛灉缁欏畾浣嶇疆鐨勪綅鏄?,鍒欒繑鍥瀟rue,鍚﹀垯杩斿洖false bit.isset () 娴嬭瘯缁欏畾浣嶆槸鍚﹁璁剧疆銆?鍙ユ硶 bit.isset(value, position) 鍙傛暟 鈥alue瑕佹祴璇曠殑鍊?鈥osition浣嶆祴璇?杩斿洖 濡傛灉缁欏畾浣嶇疆鐨勪綅鏄?,鍒欒繑鍥瀟rue,鍚﹀垯杩斿洖false bit.lshift () 宸︾Щ涓€涓暟瀛楋紝鐩稿綋浜巚alue << shift C. 鍙ユ硶 bit.1shift(value, shift) 鍙傛暟 鈥alue鍊肩殑杞Щ 鈥hift鑱屼綅杞Щ 杩斿洖 鏁板瓧鍚戝乏绉诲姩 bit.rshift () 閫昏緫鐭崇Щ涓€涓暟瀛楋紝鐩稿綋鍗?unsigned )value 鍙ユ硶 bit 銉?rshift(value, shift) 鍙傛暟 鈥alue鍊肩殑杞Щ銆?鈥hift鑱屼綅杞Щ銆?杩斿洖 鏁板瓧鍙崇Щ(閫昏緫涓? bit.set () 鍦ㄤ竴涓暟瀛椾腑璁剧疆浣嶃€?鍙ユ硶 bit.set(value, posl [,銉?銉?posn ]) 鍙傛暟 鈥alue 鍩烘暟銆?鈥osl绗竴浣嶇殑浣嶇疆璁剧疆銆?鈥兓.銉籶osn绗琻浣嶇殑浣嶇疆璁剧疆銆?杩斿洖 鍦ㄧ粰瀹氫綅缃腑璁剧疆浜嗕綅鐨勬暟瀛?S) 鏂囨。銆嬭嫳璇?妯″潡禄bme280 BME280妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?21 鏃?vsky279 vsky279 bme280.c
璇ユā鍧椾负BME280/BMP280m/^姘斿帇鍔?婀垮害浼犳劅鍣?BoschSensortec)鎻愪緵浜嗕竴涓畝鍗曠殑鐣?闈€?銆傝鍛?璇锋敞鎰忥紝鎮ㄥ繀椤诲厛鎵撶數璇濓紝setup銆傜劧鍚庢墠鑳藉紑濮嬭鍙栧€硷紒鑰屼笖锛屽湪setup()璇诲彇娴嬮噺鍊间箣闂?鐨勫嚑鍗佸埌鍑犵櫨姣涔嬮棿蹇呴』鏈変竴涓彲鍙樼殑寤惰繜銆傝€屼笉鏄娇鐢ㄥ浐瀹氱殑寤惰繜锛屼綘涔熷彲浠ヨ疆璇紶鎰熷櫒锛?鐩村埌鏁版嵁浼犻€掞紝渚嬪humi()涓嶅啀杩斿洖nil o bme280.altitude () 瀵逛簬缁欏畾鐨勭┖姘斿帇鍔涘拰娴峰钩闈㈡皵鍘嬶紝浠ョ背涓哄崟浣嶇殑楂樺害杩斿洖涔樹互100鐨勬暣 鏁般€?bme280.baro () 璇诲彇浼犳劅鍣紝骞惰繑鍥炵┖姘斿帇鍔涚櫨甯曟柉鍗′綔涓烘暣鏁颁箻浠?000鎴栭浂褰撹鍑轰笉鎴?鍔熴€?bme280.dewpoint () 瀵逛簬缁欏畾鐨勬俯搴﹀拰鐩稿婀垮害锛屽皢浠ユ憚姘忓害琛ㄧず鐨勬暣鏁颁箻浠?00銆?bme280.humi () 璇诲彇浼犳劅鍣ㄥ苟浠ョ櫨鍒嗘瘮褰㈠紡杩斿洖绌烘皵鐩稿婀垮害锛岃鏁颁笉鎴愬姛鏃讹紝浠ョ櫨鍒嗘暟涔?浠?00鎴栭浂銆?bme280.init () 鍒濆鍖栨ā鍧椼€?bme280.qfe2qnh () 瀵逛簬缁欏畾鐨勯珮搴︼紝灏嗘皵鍘嬭浆鎹负娴峰钩闈㈡皵鍘嬨€?bme280.read ()
bme280.startreadout () 寮€濮嬭鍑?灏嗕紶鎰熷櫒杞崲涓哄己鍒舵ā寮?= bme280.setup () 鍒濆鍖栨ā鍧椼€?bme280.temp () 璇诲彇浼犳劅鍣紝浠ユ憚姘忓害涓哄崟浣嶈繑鍥炴俯搴?涔樹互100銆?/p>
bme280.altitude () 瀵逛簬缁欏畾鐨勭┖姘斿帇鍔涘拰娴峰钩闈紝绌烘皵鍘嬪姏杩斿洖浠ョ背涓哄崟浣嶇殑楂樺害锛屼箻浠?00,鍗抽珮搴﹁鍔熻兘銆?鍙ユ硶 bme280.altitude(P, QNH) 鍙傛暟 .P娴嬮噺鍘嬪姏 鈥?QNH褰撳墠鐨勬捣骞抽潰鍘嬪姏 杩斿洖 娴嬮噺鐐圭殑楂樺害 bme280.baro () 璇诲彇浼犳劅鍣ㄥ苟浠ョ櫨鍒嗕箣涓€涔樹互1000鎴杗il璇诲彇涓嶆垚鍔熸椂浠ョ櫨甯曚负鍗曚綅杩斿洖绌烘皵鍘嬪姏銆傞渶瑕佸綋鍓嶇殑 娓╁害鏉ヨ绠楃┖姘斿帇鍔涳紝鍥犳鍦ㄨ鍙栧帇鍔涙暟鎹箣鍓嶈繘琛屾俯搴﹁鏁般€傜浜屼釜杩斿洖鍙橀噺鏄綋鍓嶇殑绌烘皵娓?搴︺€?鍙ユ硶 bme280.baro() 鍙傛暟 娌℃湁 杩斿洖 鈥?p鐧惧笗鐨勭┖姘斿帇鍔涗箻浠?000 -T娓╁害浠ユ憚姘忓害涓哄崟浣嶄箻浠?00 bme280.dewpoint () 瀵逛簬缁欏畾鐨勬俯搴﹀拰鐩稿婀垮害锛屽皢浠ユ憚姘忓害琛ㄧず鐨勬暣鏁颁箻浠?00銆?鍙ユ硶 bme280.dewpoint(H, T) 鍙傛暟 銉籋鐩稿婀垮害鐧惧垎姣斾箻浠?000銆?銉籘娓╁甫鎽勬皬涔樹互100銆?杩斿洖 鍦╟elsisus鐨勯湶鐐?bme280.humi () 璇诲彇浼犳劅鍣ㄥ苟浠ョ櫨鍒嗘瘮褰㈠紡杩斿洖绌烘皵鐩稿婀垮害锛屽崟浣嶄负鐧惧垎姣旓紝鎴栬€卬il褰撹鏁颁笉鎴愬姛鏃躲€傞渶瑕佸綋 鍓嶆俯搴︽潵璁$畻鐩稿婀垮害锛屽洜姝ゅ湪璇诲彇鍘嬪姏鏁版嵁涔嬪墠鎵ц娓╁害璇绘暟銆傜浜屼釜杩斿洖鐨勫彉閲忔槸褰撳墠鐨勬俯 搴︺€?鍙ユ硶 bme280.humi() 鍙傛暟 娌℃湁 杩斿洖 銉籋涓婃鐩稿婀垮害璇绘暟鐨勭櫨鍒嗘瘮涔樹互1000 銉籘娓╁害浠ユ憚姘忓害涓哄崟浣嶄箻浠?00 bme280.init () 鍒濆鍖栨ā鍧椼€傝鍙栧€间箣鍓嶏紝蹇呴』杩涜鍒濆鍖栥€?鉂舵敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俠me280.setup()鏀逛负浣跨敤銆?鍙ユ硶 bme280.init(sda, sclj [temp_oss, press_ossj humi_osSj power_modej inactive_duration, IIR_fliter 鍙傛暟 鐪?setup() c bme280.qfe2qnh () 瀵逛簬缁欏畾鐨勯珮搴︼紝灏嗘皵鍘嬭浆鎹负娴峰钩闈㈡皵鍘嬨€?鍙ユ硶 bme280.qfe2qnh(Pj altitude) 鍙傛暟 銉籔娴嬮噺鍘嬪姏 銉籥ltitude娴嬮噺鐐圭殑楂樺害 杩斿洖 娴峰钩闈㈡皵鍘?bme280.read () 璇诲彇浼犳劅鍣ㄨ繑鍥炴俯搴︼紝姘斿帇锛岀┖姘旂浉瀵规箍搴﹀拰 鍙ユ硶 bme280.read([altitude]) 鍙傛暟 銉?鍙€?altitude -浠ョ背涓哄崟浣嶇殑楂樺害銆傚鏋滆繕鎻愪緵浜嗚浆鎹负娴峰钩闈㈡皵鍘嬬殑姘斿帇锛屽垯杩斿洖銆?杩斿洖 -T娓╁害浠ユ憚姘忓害涓哄崟浣嶄箻浠?00 鈥鐧惧笗鐨勭┖姘斿帇鍔涗箻浠?000 -H鐩稿婀垮害鐧惧垎姣斾箻浠?000 鈥NH鐧惧笗鐨勭┖姘斿帇鍔涗箻浠?000杞崲涓烘捣骞抽潰 杩欎簺鍙橀噺涓殑浠讳綍涓€涓兘鏄痭il濡傛灉缁欏畾搴﹂噺鐨勮鏁颁笉鎴愬姛鐨勮瘽銆?bme280.startreadout () 寮€濮嬭鍑?灏嗕紶鎰熷櫒杞崲涓哄己鍒舵ā寮?銆傝鏁颁箣鍚庯紝浼犳劅鍣ㄨ浆鍏ョ潯鐪犳ā寮忋€?鍙ユ硶 bme280.startreadout锛坉elay, callback锛?鍙傛暟 銉籨elay灏嗕紶鎰熷櫒璁剧疆涓哄己鍒舵ā寮忥紝骞禼allback鍦ㄧ粰瀹氭暟閲忕殑姣鍚庤皟鐢紙濡傛灉鎻愪緵锛夈€傚浜?0,榛樿寤惰繜璁剧疆涓?13ms 锛堣冻澶熺殑鏃堕棿鎵ц璇诲彇杩囬噯鏍疯缃?6x锛夈€傛湁鍏充笉鍚岀殑杩囬噯鏍疯缃紝 璇峰弬闃匓ME280M缁堟暟鎹〃-闄勫綍B锛氭祴閲忔椂闂村拰鐢垫祦璁$畻銆?銉籧allback濡傛灉鎻愪緵锛屽皢鍦ㄧ粰瀹氬悗璋冪敤delay銆備紶鎰熷櫒璇绘暟搴旇鍦ㄦ涔嬪墠瀹屾垚銆?杩斿洖 nil bme280.setup 锛堬級 鍒濆鍖栨ā鍧椼€傝鍙栧€间箣鍓嶏紝蹇呴』杩涜鍒濆鍖栥€?鍙ユ硶 bme280.setup锛堬蓟temp_ossj press_oss, humi_oss> powep_mode, inactive_durationj IIR_fliter锛斤級 鍙傛暟 銉伙紙鍙€夛級temp_oss -鎺у埗娓╁害鏁版嵁鐨勮繃閲囨牱銆傞粯璁ょ殑杩囬噰鏍锋槸16鍊嶃€?銉伙紙鍙€夛級press_oss -鎺у埗鍘嬪姏鏁版嵁鐨勮繃閲嗘牱銆傞粯璁ょ殑杩囬噯鏍锋槸16鍊嶃€?銉伙紙鍙€夛級humi_oss -鎺у埗婀垮害鏁版嵁鐨勮繃閲囨牱銆傞粯璁ょ殑杩囬噰鏍锋槸16鍊?銉伙紙鍙€夛級sensor_mode -鎺у埗璁惧鐨勪紶鎰熷櫒妯″紡銆傞粯璁や紶鎰熷櫒鏇村鏄甯哥殑銆?.锛堝彲閫夛級inactive_duration -鎺у埗姝e父妯″紡涓嬬殑闈炴椿鍔ㄦ寔缁椂闂淬€傞粯璁ら潪娲诲姩鎸佺画鏃堕棿鏄?20ms o 銉伙紙鍙€夛級IIR_filter -鎺у埗IIR婊ゆ尝鍣ㄧ殑鏃堕棿甯告暟銆傞粯璁ら厤鍚堢郴鏁版槸16銆?銉伙紙鍙€夛級cold_start -濡傛灉0,閭d箞BME280鑺墖涓嶄細琚垵濮嬪寲銆傚綋ESP娣卞害鐫$湢鍜屽敜閱掗渶瑕佸垵 濮嬪寲椹卞姩绋嬪簭锛堟ā鍧楋級鑰屼笉鏄姱鐗囨湰韬椂锛屽湪鐢垫睜渚涚數鐨勮缃腑鏈夌敤銆傝鑺墖淇濇寔渚涚數锛堢潯 鐪狅級锛屽苟淇濇寔鏈€鏂扮殑璇绘暟锛屽簲蹇€熸彁鍙栧彟涓€涓槄璇诲紑濮嬶紙bme280.startreadout锛堬級锛夈€傝姱鐗囬粯 璁よ鍒濆鍖栥€?temp_oss , press_oss , humi_oss 鏁版嵁瓒呴噰鏍?0 璺宠繃锛堣緭鍑鸿涓?x80000锛?1 杩囬噯鏍稾1 2 杩囬噯鏍穢2 3 杩囬噯鏍穢4 4 杩囬噯鏍风磤 浜?杩囬噯鏍穢l6
sensor_mode 浼犳劅鍣ㄦā寮?0 鐫$湢妯″紡 1鍜? 寮哄埗妯″紡 3 姝e父妯″紡
瀵瑰崄甯岃垑浣庣背绉ょ巼鎴栧熀鍗佺帇鏈烘棾鍐嬫鏃冲簲鐢紝寤鸿浣跨敤寮峰埗妫嬫銆傛灊鍒惰鑷村悗浼犳劅鍣ㄧ彮浜烘嵍鐪犳ā 寮忋€傛湁鍏虫洿澶氳缁嗕俊鎭紝璇峰弬闃匓ME280M缁堟暟鎹〃銆?inactive_duration t寰呮満锛坢s锛?0 0.5 1 62.5 2 125 3 250 4 500 浜?1000 6 10 7 20
IIR_filter 婊ゆ尝鍣ㄧ郴鏁?0 杩囨护鎺?1 2 2 4 3 8 4 16 杩斿洖
nil濡傛灉鍒濆鍖栧け璐ワ紙娌℃湁浼犳劅鍣ㄨ繛鎺ワ紵锛夛紝2濡傛灉浼犳劅鍣ㄦ槸BME280, BMP280 alt=320 鈥?aLtitude of the measurement pLace sda, scl = 3, 4 i2c.setup(0, sdaj scl, i2c.SL0W) 鈥?caLL i2c.setup() onLy once bme280.setup() P, T = bme280.baro() print(string.format(鈥淨FE=%d.%03d鈥? P/1000^ P%1000)) 鈥揷onvert measure air pressure to sea LeveL pressure QNH = bme280.qfe2qnh(PJ alt) print (string.format(,QNH=%d.%03dH, QNH/1000, QNH%1000)) Hj T = bme280.humi() local Tsgn = (T < 0 and -1 or 1); T = TsgnT print(st ring.format(鈥淭=%s%d.%02d鈥? Tsgn<0 and 鈥?鈥?or 鈥溾€? T/100, T%100)) print(string.format("humidity=%d.%03d%%"j H/1000, H%1000)) D = bme280.dewpoint(H, T) local Dsgn = (D < 0 and -1 or 1); D = DsgnD print(string.format(鈥渄ew_point=%s%d.%02d鈥? Dsgn<0 and 鈥?鈥?or 鈥溾€? D/100, D%100)) 鈥揳Ltimeter function - caLcuLate aLtitude based on current sea LeveL pressure (QNH) c P = bme280.baro() curAlt = bme280.altitude(Pj QNH) local curAltsgn = (curAlt < 0 and -1 or 1); curAlt = curAltsgncurAlt print(string.format(,altitude=%s%d.%02d,J curAltsgn<0 and or curAlt/100, curAl 鎴栬€呮洿绠€鍗曪紝鏇撮珮鏁?alt=320 鈥?aLtitude of the measurement pLace sda, scl = 3, 4 i2c.setup(0j sdaj scl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once bme280.setup() T, P, H, QNH = bme280.read(alt) local Tsgn = (T < 0 and -1 or 1); T = TsgnT print ( st ring. format (HT=%s%d. %02d H, Tsgn<0 and or T/l銆傘€傦紝T%100)) print (st ring. format("QFE=%d.%03d,J P/1000, P%1000)) print(string.format(nQNH=%d.%03d\ QNH/1000, QNH%1000)) print(string.format("humidity=%d.%03d%%"j H/1000, H%1000)) D = bme280.dewpoint(H, T) local Dsgn = (D < 0 and -1 or 1); D = DsgnD print(string.format("dew_point=%s%d.%02d"3 Dsgn<0 and "or ""3 D/100, D%100)) --aLtimeter function - caLcuLate aLtitude based on current sea Level pressure (QNH) c P = bme280.baro() curAlt = bme280.altitude(Pj QNH) local curAltsgn = (curAlt < 0 and -1 or 1); curAlt = curAltsgncurAlt print(string.format("altitude=%s%d.%02d"j cunAltsgn<0 and "or 鈥溾€? curAlt/100, curAl 浣跨敤bme280.setup(lj 3, 0, 3, 0, 4)涓衡€滄父鎴忔ā寮忊€?鈻犺繃閲嗘牱鐨勮缃帇鍔泋4,娓╁害xl,婀垮害x銆? 浼犳劅鍣ㄦā寮忥細姝e父妯″紡锛岄潪娲诲姩鏈熼棿=0.5ms鐨勶紝IIR婊ゆ尝鍣ㄨ瀹氱殑婊ゆ尝鍣ㄧ郴鏁?6銆?寮哄埗妯″紡涓嬭鍑虹ず渚?寮傛) sda, scl = 3, 4 i2c.setup(0, sdaj scl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once bme280.setup(nilj nil, nil, 0) 鈥?initiaLize to sLeep mode bme280.startreadout(0, function () T, P = bme280.read() local Tsgn = (T < 0 and -1 or 1); T = Tsgn*T print(string.format("T=%s%d.%02d"Tsgn<0 and "or T/100J T%100)) end) bme280.temp () 璇诲彇浼犳劅鍣紝浠ユ憚姘忓害涓哄崟浣嶈繑鍥炴俯搴︼紝涔樹互100銆?鍙ユ硶 bme280.temp() 鍙傛暟 娌℃湁 杩斿洖 -T娓╁害浠ユ憚姘忓害涓哄崟浣嶄箻浠?00鎴杗il璇诲彇涓嶆垚鍔?銉籺 fine娓╁害娴嬮噺涓娇鐢ㄧ殑鍘嬪姏鍜屾箍搴﹁ˉ鍋垮叕寮?涓€鑸笉闇€瑕佷娇鐢ㄨ繖涓€? BMP085妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?搴锋媺寰疯礉鍏嬫浖 搴锋媺寰疯礉鍏嬫浖 bmp085.c
璇ユā鍧楁彁渚涘BMP085娓╁害鍜屽帇鍔涗紶鎰熷櫒鐨勮闂€傝妯″潡涔熼€傜敤浜嶣MP180銆?bmp085.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?bmp085.setup () 鍒濆鍖栨ā鍧椼€?bmp085.temperature () 瀵逛紶鎰熷櫒杩涜閲囨牱锛屽苟浠ヤ竴涓暣鏁颁箻浠?0鏉ヨ繑鍥炴憚姘忔俯搴︺€?bmp085.pressure () 閲嗘牱浼犳劅鍣ㄥ苟浠ュ笗鏂崱褰㈠紡杩斿洖鍘嬪姏浣滀负鏁存暟銆?bmp085.pressure_raw () 閲嗘牱浼犳劅鍣ㄥ苟浠ュ唴閮ㄥ崟浣嶈繑鍥炲師濮嬪帇鍔涖€?/p>
bmp085.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俠mP085.setup()鏀逛负浣跨敤銆?鍙ユ硶 bmp085.init(sda, scl) 鍙傛暟 -sda鏁版嵁寮曡剼 鈥?SC1鏃堕挓寮曡剼 杩斿洖 nil bmp085.setup () 鍒濆鍖栨ā鍧椼€?鍙ユ硶 bmp085.set鍙╋紙锛?鍙傛暟 娌℃湁 杩斿洖 nil bmp085.temperature () 瀵逛紶鎰熷櫒杩涜閲囨牱锛屽苟浠ヤ竴涓暣鏁颁箻浠o鏉ヨ繑鍥炴憚姘忔俯搴︺€?鍙ユ硶 bmp085.temperature() 杩斿洖 娓╁害涔樹互10 (鏁存暟) 渚?local sdaj scl = 1, 2 i2c.setup(0, sda, scl, i2c.SL0W) bmp085.setup() local t = bmp085.temperature() print(string.format("Temperature: %s.锛卻 degrees C"3 t / 10, t % 10)) bmp085.pressure () 閲嗘牱浼犳劅鍣ㄥ苟浠ュ笗鏂崱褰㈠紡杩斿洖鍘嬪姏浣滀负鏁存暟銆?鍙€塷versampling_setting鍙傛暟鍐冲畾浼犳劅鍣ㄩ噰鏍锋暟鎹殑鏃堕棿銆傞粯璁ゅ€兼槸3鏈€闀块噰鏍疯缃€?鍙兘鐨勫€兼槸0,1,2,3銆傛湁鍏虫洿澶氫俊鎭紝璇峰弬闃呮暟鎹〃銆?鍙ユ硶 bmp085 . pressure(oversampling_setting) 鍙傛暟 oversampling_setting 鏁存暟鍙互鏄?,1,2鎴? 杩斿洖 鍘嬪姏(甯曟柉鍗?(鏁存暟) 渚?local sda, scl = 1^ 2 i2c.setup(0, sdaj scl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once bmp085.setup() local p = bmp085.pressure() print(string.format(鈥淧ressure: %s.锛卻 mbar鈥? p / 10銆傦紝 p % 100)) bmp085.pressure_raw () 閲嗘牱浼犳劅鍣ㄥ苟浠ュ唴閮ㄥ崟浣嶈繑鍥炲師濮嬪帇鍔涖€傚鏋滀綘闇€瑕佹洿楂樼殑绮惧害锛屽彲鑳戒細鏈夌敤銆?鍙ユ硶 bmp085.pressure_raw(oversampling_setting) 鍙傛暟 oversampling_setting 鏁存暟鍙互鏄?,1,2鎴? 杩斿洖 鍘熷鍘嬪姏閲嗘牱鍊?鏁存暟) 鏂囨。銆嬭嫳璇€濇ā鍧椔籆OAP CoAP妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?Toby Jaffey toby@1248.io} Zeroday Zeroday coap.c
CoAP妯″潡鏍规嵁CoAP鍗忚鎻愪緵浜嗕竴涓畝鍗曠殑瀹炵幇銆傚熀鏈殑绔偣鏈嶅姟鍣ㄩ儴鍒嗗熀浜巑icrocoap,浠ュ強璁?澶氬叾浠栦唬鐮佸弬鑰僱ibcoap., 杩欎釜妯″潡瀹炵幇浜嗗鎴风鍜屾湇鍔″櫒绔€傚鎴风閮ㄥ垎鏀寔GET/PUT/POST/DELETEo鏈嶅姟鍣ㄥ彲浠ユ敞鍐?Lua鍑芥暟鍜屽彉閲忋€傛病鏈夎瀵熸垨鍙戠幇鏀寔銆?鉂惰鍛?杩欎釜妯″潡鍙槸鍦ㄥ緢鏃╃殑闃舵锛岃繕娌℃湁瀹屾垚銆?甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?coap.Client () 鍒涘缓涓€涓狢oAP瀹㈡埛绔€?coap.Server () 鍒涘缓涓€涓狢oAP鏈嶅姟鍣ㄣ€?coap.Client锛氬緱鍒帮紙锛?鍚戞湇鍔″櫒鍙戝嚭GET璇锋眰銆?coap.Client锛氭妸() 鍙戝嚭PUT璇锋眰鍒版湇鍔″櫒銆?coap.Client锛氬悗() 鍚戞湇鍔″櫒鍙戝嚭POST璇锋眰銆?coap.Client锛氬垹闄わ紙锛?鍙戝嚭DELETE璇锋眰鍒版湇鍔″櫒銆?coap.server锛氬惉() 鍚姩缁欏畾绔彛涓婄殑CoAP鏈嶅姟鍣ㄣ€?coap.server锛?鍏抽棴锛堬級 鍏抽棴CoAP鏈嶅姟鍣ㄣ€?coap.server锛?VAR () 鍦ㄦ湇鍔″櫒涓敞鍐屼竴涓狶ua鍙橀噺浣滀负绔偣銆?coap.server锛氬嚱鏁?) 灏哃ua鍑芥暟娉ㄥ唽涓烘湇鍔″櫒绔偣銆?/p>
甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?coap.CON , coap.NON 琛ㄧず璇锋眰绫诲瀷銆?coap.TEXT_PLAIN , coap.LINKFORMAT , coap.XML , coap.OCTET_STREAM 锛?coap.EXI , coap.JSON 琛ㄧず鐨勫唴瀹硅殼鍨嬨€?coap.Client () 鍒涘缓涓€涓狢OAP鍚勫案鐟炪€?鍙ユ硶 coap.Client() 鍙傛暟 娌℃湁 杩斿洖 CoAP瀹㈡埛绔?渚?cc = coap.Client() 鈥揳ssume there is a coap server at ip 192.168.100 cc:get(coap.CONj 鈥渃oap://192.168.18.100:5683/.well-known/core鈥? 鈥揋ET is not compLetej the resuLt/payLoad onLy print out in consoLe. cc:post(coap.NON, 鈥渃oap://192.168.18.100:5683/鈥? 鈥淗ello鈥? coap.Server () 鍒涘缓涓€涓狢oAP鏈嶅姟鍣ㄣ€?鍙ユ硶 coap.Server() 鍙傛暟 娌℃湁 杩斿洖 CoAP鏈嶅姟鍣?渚?鈥搖se copper addon for fire fox cs=coap.Server() cs:listen(5683) myvar=l cs:var(鈥渕yvar鈥? 鈥?get coap://192.168.18.103:5683/vl/v/myvar wiLL return the vaLue of cs:varCall鈥? coap.JSON) 鈥?sets content type to json 鈥揻unction shouLd tack one string^ return one string. function myfun(payload) print(鈥渕yfun called鈥? respond = 鈥渉ello鈥?return respond end cszfuncCmyfun鈥? 鈥?post coap://192.168.18.103:5683/vl/f/myfun wiLL caLL myfun CoAP瀹㈡埛绔?coap.client锛氬緱鑷砋 () 鍚戞湇鍔″櫒鍙戝嚭GET璇锋眰銆?鍙ユ硶 coap.client:get(typej uri[j payload]) 鍙傛暟 鈥ype coap.CON , coap.NON ,榛樿涓篊ON=濡傛灉绫诲瀷涓篊ON涓旇姹傚け璐ワ紝鍒欏湪鏀惧純涔嬪墠锛?璇ュ簱鍐嶉噸璇曞洓娆°€?鈥ri URI濡傗€渃oap锛?^192.168.18.103锛?5683/vl/v/myvar鈥?鍙敮鎸両P鍦板潃锛屽嵆涓嶆敮鎸佷富鏈哄悕 瑙f瀽銆?鈥ayload鍙€夌殑锛屾湁鏁堣浇鑽峰皢琚斁鍏ヨ姹傜殑鏈夋晥杞借嵎閮ㄥ垎銆?杩斿洖 nil coap.client锛氭妸() 鍙戝嚭PUT璇锋眰鍒版湇鍔″櫒銆?鍙ユ硶 coap.client:put(type, uri[payload]) 鍙傛暟 鈥?type coap.CON , coap.NON ,榛樿涓篊ON=濡傛灉绫诲瀷涓篊ON涓旇姹傚け璐ワ紝鍒欏湪鏀惧純涔嬪墠锛?璇ュ簱鍐嶉噸璇曞洓娆°€?-uri URI濡傗€渃oap锛?銆?92.168.18.103锛?5683/vl/v/myvar鈥濓紝鍙敮鎸両P鍦板潃锛屽嵆涓嶆敮鎸佷富鏈哄悕 瑙f瀽銆?-payload鍙€夌殑锛屾湁鏁堣浇鑽峰皢琚斁鍏ヨ姹傜殑鏈夋晥杞借嵎閮ㄥ垎銆?杩斿洖 nil coap.client锛氬悗() 鍚戞湇鍔″櫒鍙戝嚭POST璇锋眰銆?鍙ユ硶 coap.client:post(type, uri[, payload]) 鍙傛暟 -type co.CON, coap.NON,榛樿涓篊ON銆傚綋绫诲瀷鏄疌ON,骞朵笖璇锋眰澶辫触鏃讹紝璇锋眰浼氬湪鏀惧純涔?鍓嶉噸璇曞彟澶?娆°€?銉?uri uri濡俢cae //192.168.18.103锛?5683/v1 /v/mwar.鍙彜鎸両P銆?-payload鍙湴鏃筹紝鏈夊弻鍩疯嵎灏嗚浠ヤ汉璇蜂笉鏃虫湁鍙岃浇鑽烽儴鍒嗐€?杩斿洖 nil coap.client锛氬垹闄わ紙锛?鍙戝嚭DELETE璇锋眰鍒版湇鍔″櫒銆?鍙ユ硶 coap.client:delete锛坱ype, uri[, payload]锛?鍙傛暟 鈥ype coap.CON , coap.NON ,榛樿涓篊ON銆傚鏋滅被鍨嬩负CON涓旇姹傚け璐ワ紝鍒欏湪鏀惧純涔嬪墠锛?璇ュ簱鍐嶉噸璇曞洓娆°€?鈥ri URI濡?coap锛?>7192.168.18.103锛?5683/vl/v/myvar",鍙敮鎸両P鍦板潃锛屽嵆涓嶆敮鎸佷富鏈哄悕 瑙f瀽銆?銉籶ayload鍙€夌殑锛屾湁鏁堣浇鑽峰皢琚斁鍏ヨ姹傜殑鏈夋晥杞借嵎閮ㄥ垎銆?杩斿洖 nil CoAP鏈嶅姟鍣?coap.server锛氬惉锛堬級 鍚姩缁欏畾绔彛涓婄殑CoAP鏈嶅姟鍣ㄣ€?鍙ユ硶 coap.server:listen(port[ip]) 鍙傛暟 -port鏈嶅姟鍣ㄧ鍙o紙鍙风爜锛?銉籭p鍙€夌殑IP鍦板潃 杩斿洖 nil coap.server锛氬叧闂紙锛?鍏抽棴CoAP鏈嶅姟鍣ㄣ€?鍙ユ硶 coap.server:close() 鍙傛暟 娌℃湁 杩斿洖 nil coap.server锛?VAR () 鍦ㄦ湇鍔″櫒涓敞鍐屼竴涓狶ua鍙橀噺浣滀负绔偣銆傞偅涔堝彉閲忓€煎彲浠ラ€氳繃GET鏂规硶鐢卞鎴风妫€绱紝琛ㄧず涓哄鎴?绔殑URI銆傚彉閲忕殑绔偣璺緞鏄?vl/v/鈥榦 鍙ユ硶 coap.server:van(namecontent_type]) 鍙傛暟 銉籲ame Lua鍙橀噺鐨勫悕瀛?鈥?content_type鍙€夛紝榛樿涓篶oap.TEXT_PLAIN ,璇峰弬闃呭唴瀹瑰崗鍟?杩斿洖 nil 渚?鈥?use copper addon for fire fox cs=coap.Server() cs:listen(5683) myvar=l cs:varCrnyvar鈥?) 鈥?get coap://192.168.18.103:5683/vl/v/myvar wiLL return the vaLue of --cs:var(myvar)j WRONG, this api accept the name string of the variaLbe. but not the 311=*[1,2,3]鈥?cs:var(鈥渁ll鈥? coap.JSON) 鈥?sets content type to json coap.server锛氬嚱鏁?) 灏哃ua鍑芥暟娉ㄥ唽涓烘湇鍔″櫒绔偣銆傝繖涓嚱鏁板彲浠ヨ瀹㈡埛绔€氳繃POST鏂规硶璋冪敤銆傝〃绀轰负瀹㈡埛绔殑URI銆?鍑芥暟鐨勭鐐硅矾寰勬槸7vl/f/'o 褰撳鎴风鍚戣繖涓猆RI鍙戝嚭POST璇锋眰鏃讹紝鏈夋晥杞借嵎灏嗕綔涓哄弬鏁颁紶閫掔粰鍑芥暟銆傝鍑芥暟鐨勮繑鍥炲€煎皢鎴愪负瀹?鎴风娑堟伅涓殑璐熻浇銆?娉ㄥ唽鐨勫嚱鏁板簲璇ュ彧鎺ュ彈涓€涓瓧绗︿覆绫诲瀷鍙傛暟锛屽苟杩斿洖涓€涓瓧绗︿覆鍊兼垨涓嶈繑鍥炰换浣曞唴瀹广€?鍙ユ硶 coap.server:func(name[, content_type]) 鍙傛暟 鈥ame Lua鍑芥暟鐨勫悕瀛?鈥ontent_type鍙€夛紝榛樿涓篶oap.TEXT_PLAIN ,璇峰弬闃呭唴瀹瑰崗鍟?杩斿洖 nil 渚?鈥搖se copper addon for fire fox cs=coap.Server() cs:listen(5683) 鈥揻unction shouLd take onLy one string, return one string. function myfun(payload) print(鈥渕yfun called鈥? respond = 鈥渉ello鈥?return respond end cs:func(鈥渕yfun鈥? 鈥?post coup://192.168.18.103:5683/vl/f/myfun wiLL caLL myfun --cs:func(myfun)j WRONG, this apt accept the name string of the function, but not th( 鏂囨。銆嬭嫳璇€濇ācron鐨?Cron妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016 骞?12 鏈?18 H 鍑ゅ嚢 鍑ゅ嚢 cron.c 绫讳技Cron鐨勮皟搴︾▼搴忔ā鍧椼€?/p>
銆傞噸瑕?璇ユā鍧楅渶瑕丷TC鏃堕棿鎵嶈兘姝e父宸ヤ綔銆備笉瑕佸繕璁板寘鍚玶tctime妯″潡銆?cron.schedule () 鍒涘缓涓€涓柊鐨勬棩绋嬪畨鎺掓潯鐩€?cron.reset () 鍒犻櫎鎵€鏈夐瀹氱殑鏉$洰銆?cron.entry锛氬鐞嗗櫒() 璁剧疆涓€涓柊鐨勮緭鍏ュ鐞嗙▼搴忋€?cron.entry锛氭椂闂磋〃() 璁剧疆涓€涓柊鐨勬椂闂磋〃鎺╃爜銆?cron.entry锛氬彇娑堣皟搴?) 绂佺敤璁″垝銆?/p>
cron.schedule () 鍒涘缓涓€涓柊鐨勬棩绋嬪畨鎺掓潯鐩€?鍙ユ硶 cron,schedule(mask, callback) 鍙傛暟 銉籱ask -鐢ㄤ簬璁″垝鐨刢rontab绫诲瓧绗︿覆鎺╃爜 鈥?callback - function(entry)鍦ㄩ瀹氭椂闂存墽琛岀殑鍥炶皟 杩斿洖 cron.entry 瀛愭ā鍧?cron.schedule("*/5 * * * function(e) print(鈥淓very 5 minutes鈥? end) cron.schedule(鈥? /2 * * function(e) print(鈥淓very 2 hours鈥? end) cron.reset () 鍒犻櫎鎵€鏈夐瀹氱殑鏉$洰銆?鍙ユ硶 cron.reset() 鍙傛暟 娌℃湁 杩斿洖 闆?cron.entry 妯″潡 cron.entry锛氬鐞嗗櫒() 璁剧疆涓€涓柊鐨勮緭鍏ュ鐞嗙▼搴忋€?鍙ユ硶 handler(callback) 鍙傛暟 鈥?callback - function(entry)鍦ㄩ瀹氭椂闂存墽琛岀殑鍥炶皟 杩斿洖 闆?ent = cron.schedule(" * * * 鈥? function(e) print(鈥淓very minute鈥? end) ent:handler(function(e) print(鈥淣ew handler: Every minute鈥? end) cron.entry锛?鏃堕棿琛?() 璁剧疆涓€涓柊鐨勬椂闂磋〃鎺╃爜銆?鍙ユ硶 schedule(mask) 鍙傛暟 銉籱ask -鐢ㄤ簬璁″垝鐨刢rontab绫诲瓧绗︿覆鎺╃爜 杩斿洖 娌℃湁 渚?ent = cron.schedule(鈥?* * * , function(e) printCTick") end) 鈥揈very 5 minutes is reaLLy better! ent:schedule("/5 * * * ") cron.entry锛氬彇娑堣皟搴?) 绂佺敤璁″垝銆?绂佺敤鐨勬椂闂磋〃鍙兘浼氶€氳繃璋冪敤鍐嶆鍚敤锛歴chedule (mask)銆?鍙ユ硶 unschedule() 鍙傛暟 娌℃湁 杩斿洖 闆?ent = cron.schedule銆傗€?* * * *鈥? function(e) print(鈥漈ick鈥? end) 鈥揥e don鈥檛 need this anymore ent:unschedule() 鏂囨。銆嬭嫳璇?妯″潡銆嬪姞瀵?鍔犲瘑妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?DiUS, Johny Mattsson Johny Mattsson crypto.c 鍔犲瘑妯″潡鎻愪緵鐢ㄤ簬浣跨敤鍔犲瘑绠楁硶鐨勫悇绉嶅姛鑳姐€?/p>
鏀寔浠ヤ笅鍔犲瘑/瑙e瘑绠楁硶/妯″紡锛?"AES-ECB"瀵逛簬ECB妯″紡涓嬬殑128浣岮ES 锛堜笉鎺ㄨ崘锛? 鈻犫枲aes-cbc11瀵逛簬CBC妯″紡涓嬬殑128浣岮ES 鏀寔浠ヤ笅鏁e垪绠楁硶锛?MD2锛堥粯璁ゆ儏鍐典笅涓嶅彲鐢紝蹇呴』鏄惧紡鍚?鐢?app/include/user_config.h 锛?- MD5 - SHA1 - SHA256, SHA384, SHA512 锛堥櫎闈炵 鐢?app/include/user_config.h 锛?crypto.encrypt () 鍔犲瘑Lua瀛楃涓层€?crypto.decrypt () 瑙e瘑浠ュ墠鍔犲瘑鐨勬暟鎹€?crypto.fhash () 璁$畻涓€涓枃浠剁殑鍔犲瘑鏁e垪銆?crypto.hash () 璁$畻涓€涓狶ua瀛楃涓茬殑鍔犲瘑鏁e垪0 crypto.new_hash () 鍒涘缓涓€涓彲浠ユ坊鍔犱换鎰忔暟閲忓瓧绗︿覆鐨勬憳瑕?鏁e垪瀵硅薄銆?crypto.hmac () 璁$畻涓€涓狶ua瀛楃涓茬殑HMAC 锛堟暎鍒楁秷鎭璇佺爜锛夌鍚嶃€?crypto.new_hmac () 鍒涘缓涓€涓彲浠ユ坊鍔犱换鎰忔暟閲忓瓧绗︿覆鐨刪mac瀵硅薄銆?crypto.mask () 灏嗕竴涓猉OR鎺╃爜搴旂敤浜嶭ua瀛楃涓层€?crypto.toBase64 () 鎻愪緵锛堜簩杩涘埗锛塋ua瀛楃涓茬殑Base64琛ㄧず褰㈠紡銆?crypto.toHex () 鎻愪緵锛堜簩杩涘埗锛塋ua瀛楃涓茬殑ASCII鍗佸叚杩涘埗琛ㄧず褰㈠紡銆?/p>
crypto.encrypt () 鍔犲瘑Lua瀛楃涓层€?鍙ユ硶 crypto.encrypt(algo, key, plain iv]) 鍙傛暟 algo鏀寔鐨勫姞瀵嗙畻娉曠殑鍚嶇О -key鍔犲瘑瀵嗛挜浣滀负涓€涓瓧绗︾敳锛涘澹獳ES鍔犲瘑锛岃繖涓暱搴﹀繀椤绘槸16涓瓧鑺?-plain瑕佸姞瀵嗙殑瀛楃涓?濡傛湁蹇呰锛屽畠灏嗚鑷姩濉浂鍒?6瀛楄妭鐨勮竟鐣?銉籭v濡傛灉浣跨敤AES-CBC,鍚姩杞戒綋;濡傛灉娌℃湁缁欏嚭锛屽垯榛樿涓哄叏闆?杩斿洖 鍔犲瘑鏁版嵁涓轰簩杩涘埗瀛楃涓层€傚浜嶢ES,杩欐€绘槸16涓瓧鑺傜殑鍊嶆暟銆?渚?print(crypto.toHex(crypto.encrypt(鈥淎ES-ECB鈥? 鈥?234567890abcdef鈥? "Hi, I鈥檓 secret 涔熷彲浠ョ湅鐪?鈥rypto.decrypt() crypto.decrypt () 瑙e瘑浠ュ墠鍔犲瘑鐨勬暟鎹€?鍙ユ硶 crypto.decrypt(algokey, cipher [, iv]) 鍙傛暟 -algo鏀寔鐨勫姞瀵嗙畻娉曠殑鍚嶇О -key鍔犲瘑瀵嗛挜浣滀负涓€涓瓧绗︿覆;瀵逛簬AES鍔犲瘑锛岃繖涓暱搴﹀繀椤绘槸16涓瓧鑺?銉籧ipher瑕佽В瀵嗙殑瀵嗘枃(浠庝腑鑾峰緱crypto.encrypt()) 銉籭v濡傛灉浣跨敤AES-CBC,鍚姩杞戒綋;濡傛灉娌℃湁缁欏嚭锛屽垯榛樿涓哄叏闆?杩斿洖 瑙e瘑鐨勫瓧绗︿覆銆?璇锋敞鎰忥紝瑙e瘑鍚庣殑瀛楃涓叉渶鍚庡彲鑳戒細鍖呭惈棰濆鐨勯浂濉厖瀛楄妭銆傚墺绂昏繖绉嶅~鍏呯殑涓€绉嶆柟娉?鏄細match(鈥?.-)%z*$鈥?鍦ㄨВ瀵嗙殑瀛楃涓蹭笂浣跨敤銆傚鏋滀娇鐢ㄤ簩杩涘埗鏁版嵁锛岄渶瑕侀澶栨敞鎰忥紝鍦?杩欑鎯呭喌涓嬶紝瀹為檯闀垮害鍙兘闇€瑕佺敤鏁版嵁杩涜缂栫爜锛屽苟涓旓細sub(l, n)鍙互浣跨敤璇ラ暱搴﹀幓闄ゅ~ 鍏呫€?渚?key = 鈥?234567890abcdef鈥?cipher = crypto.encrypt(鈥淎ES-ECB鈥? key, 鈥淗i, I鈥檓 secret!鈥? print(crypto, toHex(cipher)) print(crypto.decrypt(鈥淎ES-ECB鈥? key, cipher)) 涔熷彲浠ョ湅鐪?鈥rypto.encrypt() crypto.fhash () 璁$畻涓€涓枃浠剁殑鍔犲瘑鏁e垪銆?鍙ユ硶 hash = crypto.fhash(algofilename) 鍙傛暟 -algo浣跨敤鏁e垪绠楁硶锛屼笉鍖哄垎澶у皬鍐欑殑瀛楃涓?鈥?filename鏂囦欢鐨勬暎鍒楄矾寰?杩斿洖 鍖呭惈娑堟伅鎽樿鐨勪簩杩涘埗瀛楃涓层€傝鑾峰彇鏂囨湰鐗堟湰(ASCII鍗佸叚杩涘埗瀛楃)锛岃浣?鐢?crypto.toHex()銆?渚?print(crypto.toHex(crypto.fhash(鈥渟hal鈥?鈥渕yfile.lua鈥?)) crypto.hash () 璁$畻涓€涓狶ua瀛楃涓茬殑鍔犲瘑鏁e垪銆?鍙ユ硶 hash = crypto.hash(algOj str) 鍙傛暟 algo浣跨敤鏁e垪绠楁硶锛屼笉鍖哄垎澶у皬鍐欑殑str瀛楃涓叉潵鏁e垪鍐呭 杩斿洖 鍖呭惈娑堟伅鎽樿鐨勪簩杩涘埗瀛楃涓层€傝鑾峰彇鏂囨湰鐗堟湰(ASCII鍗佸叚杩涘埗瀛楃)锛岃浣?鐢?crypto.toHex()銆?渚?print(crypto.toHex(crypto.hash(鈥渟hal鈥?鈥渁bc鈥?)) crypto.new_hash () 鍒涘缓涓€涓彲浠ユ坊鍔犱换鎰忔暟閲忕殑瀛楃涓茬殑鎽樿/鏁e垪瀵硅薄銆傚璞℃湁update鍜宖inalize鍔熻兘銆?鍙ユ硶 hashobj = crypto.new_hash(aIgo) algo渚跨敤鏁e绠楁硶锛屽皬鍖哄垎澶у皬涓庢棾瀛戠鐢?杩斿洖 鐢ㄦ埛鏁版嵁瀵硅薄update鍜宖inalize鍙敤鐨勫姛鑳姐€?渚?hashobj = crypto.new_hash(鈥淪HAl鈥? hashobj:update(鈥淔irstString鈥?) hashobj:update(鈥淪econdString鈥?) digest = hashobj:finalize() print(crypto.toHex(digest)) crypto.hmac () 璁$畻涓€涓狶ua瀛楃涓茬殑HMAC (鏁e垪娑堟伅璁よ瘉鐮?绛惧悕銆?鍙ユ硶 signature = crypto.hmac(algostrkey) 鍙傛暟 -algo鏁e垪绠楁硶浣跨敤锛屼笉鍖哄垎澶у皬鍐欑殑瀛楃涓?銉籹tr鏁版嵁鏉ヨ绠楀搱甯屽€?-key鐢ㄤ簬绛惧悕鐨勫瘑閽ュ彲鑳芥槸涓€涓簩杩涘埗瀛楃涓?杩斿洖 鍖呭惈HMAC绛惧悕鐨勪簩杩涘埗瀛楃涓层€備娇鐢╟rypto.toHex()鑾峰緱鐨勬枃鏈増鏈€?渚?print(crypto.toHex(crypto.hmacC鈥檚hal1鈥? 鈥渁bc鈥? 鈥渕ysecret鈥?)) crypto.new_hmac () 鍒涘缓涓€涓彲浠ユ坊鍔犱换鎰忔暟閲忓瓧绗︿覆鐨刪mac瀵硅薄銆傚璞℃湁update鍜宖inalize鍔熻兘銆?鍙ユ硶 hmacobj = crypto.new_hmac(algoj key) 鍙傛暟 -algo浣跨敤鏁e垪绠楁硶锛屼笉鍖哄垎澶у皬鍐欑殑瀛楃涓?-key浣跨敤鐨勫叧閿?鍙兘鏄竴涓簩杩涘埗瀛楃涓? 杩斿洖 鐢ㄦ埛鏁版嵁瀵硅薄update鍜宖inalize鍙敤鐨勫姛鑳姐€?渚?hmacobj = crypto.new_hmac(鈥淪HA1鈥? 鈥渟3kr3t鈥? hmacobj:update(鈥淔irstString鈥?) hmacobj:update(鈥淪econdString鈥?) digest = hmacobj:finalize() print(crypto.toHex(digest)) crypto.mask () 灏嗕竴涓猉OR鎺╃爜搴旂敤浜嶭ua瀛楃涓层€傝娉ㄦ剰锛岃繖涓嶆槸涓€涓悎閫傜殑鍔犲瘑鏈哄埗锛屼絾鏄湁浜涘崗璁彲鑳?浼氫娇鐢ㄥ畠銆?鍙ユ硶 crypto.mask(message, mask) 鍙傛暟 鈥?message娑堟伅鎺╃洊 -mask瑕佸簲鐢ㄧ殑闈㈠叿锛屽鏋滅煭浜庢秷鎭垯閲嶅 杩斿洖 琚睆钄界殑娑堟伅锛屼綔涓轰簩杩涘埗瀛楃涓层€傜敤crypto.toHex()寰楀埌瀹冪殑鏂囧瓧琛ㄨ堪銆?渚?print(crypto.toHex(crypto.mask(鈥渟ome message to obscure鈥?鈥淴0Y7鈥?)) crypto.toBase64 () 鎻愪緵(浜岃繘鍒?Lua瀛楃涓茬殑Base64琛ㄧず褰㈠紡銆?鍙ユ硶 b64 = crypto.toBase64(binary) 鍙傛暟 binary杈撳叆瀛楃涓插埌Base64缂栫爜 杩斿洖 涓€涓狟ase64缂栫爜鐨勫瓧绗︿覆銆?渚?print(crypto.toBase64(crypto.hash(鈥渟hal鈥?鈥渁bc鈥?)) crypto.toHex () 鎻愪緵(浜岃繘鍒?Lua瀛楃鍗樻棾ASCII鍗佸叚杩涘埗琛ㄤ笉褰㈠紡銆傝緭浜哄瓧绗︾敵涓棾姣嶄釜瀛楄妭鍦ㄨ緭鍑轰腑琛?绀轰负涓や釜鍗佸叚杩涘埗瀛楃銆?鍙ユ硶 hexstr = crypto.toHex(binary) 鍙傛暟 binary杈撳叆瀛楃涓叉潵鑾峰彇鍗佸叚杩涘埗琛ㄧず 杩斿洖 ASCII鍗佸叚杩涘埗瀛楃涓层€?渚?print(crypto.toHex(crypto.hash(鈥渟hal鈥?鈥渁bc鈥?)) 鏂囨。銆嬭嫳璇€濇ā鍧椼€婦HT DHT妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015-06-17 RobTillaart Vowstar dhtlib
甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?dhtread () 璇诲彇鍚勭DHT浼犳劅鍣紝鍖呮嫭DHT11,21,22,33,44庐搴︽俯搴︾粍鍚堜紶鎰熷櫒銆?dhtreadll () 闃呰DHT11婀垮害娓╁害缁勫悎浼犳劅鍣ㄣ€?dhtreadxx () 闃呰闄HT11浠ュ鐨勫悇绉岲HT浼犳劅鍣ㄣ€?/p>
甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?dht.OK , dht.ERROR_CHECKSUM , dht. ERROR_TIMEOUT 浠h〃浜?DHT 鐨勫彲鑳藉€艰鍙栫姸鎬?dht.read 锛堬級 璇诲彇鍚勭DHT浼犳劅鍣紝鍖呮嫭DHT11,21,22,33,44婀垮害娓╁害缁勫悎浼犳劅鍣ㄣ€?鍙ユ硶 dht 銉?read锛坧in锛?鍙傛暟 pin DHT浼犳劅鍣ㄧ殑寮曡剼鍙凤紙涓嶈兘鏄?锛?绫诲瀷鏄暟瀛?杩斿洖 鈥tatus濡傚父閲忎腑鎵€瀹氫箟 -temp娓╁害锛堣涓嬮潰鐨勬敞閲婏級 鈥umi婀垮害锛堣涓嬮潰鐨勬敞閲婏級 銉籺emp_dec娓╁害鍗佽繘鍒?鈥umi_dec婀垮害灏忔暟 鉂舵敞鎰?濡傛灉浣跨敤娴姩鍥轰欢鐒跺悗temp鍜宧umi鏄诞鐐规暟銆傚湪鏁存暟鍥轰欢涓婏紝鏈€鍚庣殑鍊煎繀椤讳粠temp 鍜寍 temp_dec |鍜岃繛鎺ヨ捣鏉 hum_dec |銆?渚?pin = 5 status, temp, humi, temp_deCj humi_dec = dht.read(pin) if status == dht.OK then 鈥揑nteger firmware using this exampLe print(string.format(鈥淒HT Temperature:%d.%03d;Humidity:%d.%03d\r\n"4 math,floor(temp), temp_deCj math.floor(humi), humi_dec )) 鈥揊Loat firmware using this exampLe print(鈥淒HT Temperature:鈥濃€emp鈥︹€?"鈥︹€淗umidity:鈥濃€umi) elseif status == dht.ERROR_CHECKSUM then print( 鈥淒HT Checksum error.鈥? elseif status == dht.ERROR_TIMEOUT then print( 鈥淒HT timed out.鈥? end dht.readll () 闃呰DHTll婀垮害娓╁害缁勫悎浼犳劅鍣ㄣ€?鍙ユ硶 dht.readll(pin) 鍙傛暟 pin DHTll浼犳劅鍣ㄧ殑寮曡剼鍙?涓嶈兘鏄?),绫诲瀷鏄暟瀛?杩斿洖 鈥tatus濡傚父閲忎腑鎵€瀹氫箟 鈥emp娓╁害(瑙佷笅闈㈢殑娉ㄩ噴) 鈥umi婀垮害(瑙佷笅闈㈢殑娉ㄩ噴) 鈥emp_dec娓╁害鍗佽繘鍒?鈥umi_dec婀垮害灏忔暟 銆傛敞鎰?濡傛灉浣跨敤娴姩鍥轰欢鐒跺悗temp鍜宧umi鏄诞鐐规暟銆傚湪鏁存暟鍥轰欢涓婏紝鏈€鍚庣殑鍊煎繀椤讳粠temp 鍜寍 temp_dec |/|Tumi |鍜岃繛鎺ヨ捣鏉~hum_dec |銆?涔熷彲浠ョ湅鐪?dhtread () dht.readxx () 闃呰闄HTll浠ュ鐨勫悇绉岲HT浼犳劅鍣ㄣ€?鍙ユ硶 dht 銉?readxx(pin) 鍙傛暟 pin DHT浼犳劅鍣ㄧ殑寮曡剼鍙凤紙涓嶈兘鏄?锛?绫诲瀷鏄暟瀛?杩斿洖 鈥tatus濡傚父閲忎腑鎵€瀹氫箟 -temp娓╁害锛堣涓嬮潰鐨勬敞閲婏級 銉籬umi婀垮害锛堣涓嬮潰鐨勬敞閲婏級 鈥emp_dec娓╁害鍗佽繘鍒?鈥umi_dec婀垮害灏忔暟 銆傛敞鎰?濡傛灉浣跨敤娴姩鍥轰欢鐒跺悗temp鍜宧umi鏄诞鐐规暟銆傚湪鏁存暟鍥轰欢涓婏紝鏈€鍚庣殑鍊煎繀椤讳粠temp 鍜寍 temp_dec |/|~humi |鍜岃繛鎺ヨ捣鏉 hum_dec |銆?涔熷彲浠ョ湅鐪?dhtread 锛堬級 DS18B20 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?1鏃?fetchbot fetchbot dsl8b20.c
璇ユā鍧楁彁渚涘DS18B201-Wire鏁板瓧娓╁害璁$殑璁块棶銆傝娉ㄦ剰锛孨odeMCU涓烘浼犳劅鍣ㄦ彁渚涗簡涓€涓狢妯?鍧?杩欎竴涓?鍜屼竴涓狶ua妯″潡銆傝鍙傞槄#2003, 浜嗚В浠栦滑鍚勮嚜鐨勪紭鐐广€?dsl8b20.read () 鍦ㄥ崟绾挎€荤嚎涓婂彂鍑烘墍鏈夎繛鎺ョ殑浼犳劅鍣ㄧ殑娓╁害杞崲锛屽苟鍦ㄥ洖璋冨嚱鏁颁腑鐨勮浆鎹㈠欢杩熶箣 鍚庤繑鍥炴祴閲忕粨鏋溿€?ds!8b20.setting () 閰嶇疆娓╁害鍒嗚鲸鐜囪缃€?ds!8b20.setup () 鍒濆鍖栨墍閫夊紩鑴氫笂鐨勫崟绾挎€荤嚎銆?/p>
dsl8b20.read () 鍦ㄥ崟绾挎€荤嚎涓婂彂鍑烘墍鏈夎繛鎺ョ殑浼犳劅鍣ㄧ殑娓╁害杞崲锛屽苟鍦ㄥ洖璋冨嚱鏁颁腑鐨勮浆鎹㈠欢杩熶箣鍚庤繑鍥炴祴閲忕粨鏋溿€?杩斿洖鐨勬祴閲忕粨鏋滃彲浠ラ€氳繃浠ヨ〃鏍兼垨瀹跺涵绫诲瀷浼犻€掔殑ROM鍦板潃杩涜杩囨护銆備负姣忎釜鎸囧畾鐨勪紶鎰熷櫒璋冪敤鍥?璋冨嚱鏁般€?鍙ユ硶 dsl8b20.read(CALLBACK, ROM], FAMILY_ADDRESS]) 鍙傛暟 銉籆ALLBACK涓烘瘡涓紶鎰熷櫒鎵ц鍥炶皟鍑芥暟 銆備緥濡?functionClNDEX^ ROM, RES, TEMP, TEMP_DEC, PAR) print(INDEX, ROM, RES, TEMP, TEMP_DEC, PAR) 鈥OM鍖呭惈鎸囧畾浼犳劅鍣ㄥ湴鍧€鐨勮〃鏍硷紝鎴栬€呯暀绌鸿鎵ц鎵€鏈変紶鎰熷櫒鐨勫崟绾挎€荤嚎鎼滅储 銆備緥濡倇鈥?8锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F鈥?鈥?8锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F鈥潁 , {} 鈥AMILY_ADDRESS鍙€夛紝灏嗚澶囨悳绱㈤檺鍒朵负鐗瑰畾鐨勫搴被鍨?銆備緥濡?x28 杩斿洖 nil 鍥炶皟鍑芥暟鍙傛暟 銉籌NDEX鎬荤嚎涓婁紶鎰熷櫒鐨勭储寮?鈥OM浼犳劅鍣?4浣嶆縺鍏変唬鐮?o 28锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F LSB, 8浣嶅鏃忎唬鐮侊紝48浣嶅簭鍒楀彿锛孧SB8{icrc -RES娓╁害鍒嗚鲸鐜?鈥EMP娓╁害 銉籘EMP_DEC娓╁害灏忔暟鏁存暟鍥轰欢 鈥AR浼犳劅鍣ㄥ瘎鐢熸棗 銆傛敞鎰?濡傛灉浣跨敤鍋滅偣鍥炰欢锛屽垯temp鏄牱鐐规暒銆備换鏁存晭鍥炰欢涓婏紝鏈€鍚庢棾鍊煎繀椤讳粠temp鍜屽鎶€璧?鏉?temp_dec 銆?渚?local ow_pin = 3 dsl8b20.setup(ow_pin) 鈥搑ead aLL sensors and print aLL measurement resuLts dsl8b20.read( function(ind,rom? res,temp,tdec^ par) print(ind,string.format(鈥?02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,Jstring.match end,{}); 鈥搑ead onty sensors with famity type 0x28 and print aLL measurement resuLts dsl8b20.read( function(ind,rom,res,temp,tdec4 par) print (ind, st ring 銉籪opmat(鈥濓紖02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X鈥漘,stping銉籱at:cl鈥?end,{},0x28); 鈥搒ave device roms in a variabLe local addr = (} dsl8b20.read( function(ind,rom,res,tempjtdec^ par) addr[ind] = {string.format(鈥?02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,Jstring.me end,{}); 鈥搑ead onLy sensors Listed in the variabLe addr dsl8b20.read( function(ind,rom,res,temp,tdec^ par) print(ind,string.format(鈥?02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X"4string.match end,addr); 鈥損rint onLy parasitic sensors dsl8b20.read( function(indJ rom,restemp,tdec^ par) if (par == 1) then print(ind, string.format(,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string.rr end end,{}); 鈥損rint if temperature is greater or Less than a defined vaLue dsl8b20.read( function(ind,rom,res^tempjtdec,par) if (t > 25) then print(ind, string.format (,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string.rr end if (t < 20) then print (ind, st ring. format(,%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X,J string, rr end end,{}); dsl8b20.setting () 閰嶇疆娓╁害鍒嗚鲸鐜囪缃€?鍙ユ硶 dsl8b20.setting(ROM, RES) 鍙傛暟 銉籖OM鍖呭惈鎸囧畾浼犳劅鍣ㄥ湴鍧€鐨勮〃鏍硷紝鎴栬€呮墍鏈変紶鎰熷櫒閮戒负绌虹殑琛ㄦ牸 銆備緥濡倇鈥?8锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F鈥?鈥?8锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F"} , {} -RES娓╁害浣嶅垎杈ㄧ巼 杩斿洖 nil local ow_pin = 3 dsl8b20.setup(ow_pin) dsl8b20.setting((,28锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F,/,28锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F锛欶F"}J 9) dsl8b20.setup () 鍒濆鍖栨墍閫夊紩鑴氫笂鐨勫崟绾挎€荤嚎銆?鍙ユ硶 dsl8b20.setup(OW_BUS_PIN) 鍙傛暟 鈥?OW_BUS_PIN 0 1 - 12 杩斿洖 nil local ow_pin = 3 dsl8b20.setup(ow_pin) 鏂囨。銆嬭嫳璇€濇ā鍧椼€嬬紪鐮佸櫒 缂栫爜鍣ㄦā鍧?浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?6鏃?鐗归噷鍩冮噷妫?鐗归噷鍩冮噷妫?encoder.c
缂栫爜鍣ㄦā鍧楁彁渚涚敤浜庣紪鐮佸拰瑙g爜瀛楄妭鏁版嵁鐨勫悇绉嶅姛鑳絆 encoder.toBase64 () 鎻愪緵(浜岃繘鍒?Lua瀛楃涓茬殑Base64琛ㄧず褰㈠紡銆?encoder.fromBase64 () 灏?浜岃繘鍒?Lua瀛楃涓茬殑Base64琛ㄧず瑙g爜鍥炲師濮嬪瓧绗︿覆銆?encoder.toHex () 鎻愪緵(浜岃繘鍒?Lua瀛楃涓茬殑ASCII鍗佸叚杩涘埗琛ㄧず褰㈠紡銆?encoder.fromHex () 杩斿洖ASCII鍗佸叚杩涘埗瀛楃涓茬殑Lua浜岃繘鍒跺瓧绗︿覆瑙g爜銆?/p>
encoder.toBase64 () 鎻愪緵(浜岃繘鍒?Lua瀛楃涓茬殑Base64琛ㄧず褰㈠紡銆?鍙ユ硶 b64 = encoder.toBase64(binary) 鍙傛暟 binary杈撳叆瀛楃涓插埌Base64缂栫爜 杩斿洖 涓€涓狟ase64缂栫爜鐨勫瓧绗︿覆銆?渚?print(encoder.toBase64(crypto.hash(鈥渟hal鈥?鈥渁bc鈥?)) encoder.fromBase64 () 灏?浜岃繘鍒?Lua瀛楃涓茬殑Base64琛ㄧず瑙g爜鍥炲師濮嬪瓧绗︿覆銆傚鏋滃瓧绗︿覆涓嶆槸鏈夋晥鐨刡ase64缂?鐮侊紝鍒欎細寮曞彂閿欒銆?鍙ユ硶 binary_string = encoder.toBase64(b64) 鍙傛暟 b64 Base64缂栫爜鐨勮緭鍏ュ瓧绗︿覆 杩斿洖 瑙g爜鐨凩ua (浜岃繘鍒?瀛楃涓层€?print(encoder.fromBase64(encoder.toBase64(鈥渉ello world鈥?)) encoder.toHex () 鎻愪緵(浜岃繘鍒?Lua瀛楃涓茬殑ASCII鍗佸叚杩涘埗琛ㄧず褰㈠紡銆傝緭鍏ュ瓧绗︿覆涓殑姣忎釜瀛楄妭鍦ㄨ緭鍑轰腑琛?绀轰负涓や釜鍗佸叚杩涘埗瀛楃銆?鍙ユ硶 hexstr = encoder.toHex(binary) 鍙傛暟 binary杈撳叆瀛楃涓叉潵鑾峰彇鍗佸叚杩涘埗琛ㄧず 杩斿洖 ASCII+鍏繘鍒跺瓧绗︿覆銆?渚?print(encoder.toHex(crypto.hash(鈥渟hal鈥?鈥渁bc鈥?)) encoder.fromHex () % 杩斿洖ASCII鍗佸叚杩涘埗瀛楃涓茬殑Lua浜岃繘鍒跺瓧绗︿覆瑙g爜銆傝緭鍑哄瓧绗︿覆涓殑姣忎釜瀛楄妭鍦ㄨ緭鍏ヤ腑琛ㄧず 涓轰袱涓崄鍏繘鍒跺瓧绗︺€傚鏋滃瓧绗︿覆涓嶆槸鏈夋晥鐨刡ase64缂栫爜锛屽垯浼氬紩鍙戦敊璇€?鍙ユ硶 binary = encoder.fromHex(hexstr) 鍙傛暟 hexstr ASCII鍗佸叚杩涘埗瀛楃涓层€?杩斿洖 鍗佸叚杩涘埗琛ㄧず鐨勮В鐮佸瓧绗︿覆銆?渚?print(encoder.fromHexC鈥檈aSaea"))) 鏈€缁堢敤鎴疯缃ā鍧?浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?缃椾集鐗光€㈢鏂?缃椾集鐗光€㈢鏂?enduser_setup.c 璇ユā鍧楁彁渚涗簡涓€绉嶇畝鍗曠殑閰嶇疆ESP8266鑺墖鐨勬柟娉曪紝鏃犻渶浣跨敤涓茶鎺ュ彛鎴栭鍏堢紪绋媁iFi鍑瘉鍒拌姱鐗?涓娿€?/p>
杩愯鍚?enduser_setup.start锛堬級,鍚嶄负鈥淪etupGadget_XXXXXX"鐨勬棤绾跨綉缁滃皢鍚姩锛堝彲 浠ser_config.h閫氳繃瀹氫箟瑕嗙洊姝ゅ墠缂€ENDUSER_SETUP_AP_SSID 锛夈€傝繛鎺ュ埌璇SID,鐒跺悗瀵艰埅鍒?浠讳綍缃戠珯鐨勬牴锛堜緥濡傦紝http://example. com/灏嗗伐浣滐紝浣嗕笉浣跨敤.local鍩燂紝鍥犱负瀹冨皢鍦╥OS涓婂け 璐ワ級銆傜被浼间簬涓婇潰鐨勫浘鐗囩殑缃戦〉灏嗚鍔犺浇锛屽厑璁告渶缁堢敤鎴锋彁渚涗粬浠殑Wi-Fi淇℃伅銆?鎴愬姛鑾峰彇IP鍦板潃鍚庯紝璇ユā鍧楀皢浼氬儚enduser_setup.stop锛堬級璋冪敤涓€鏍峰仠姝€傚湪鎷嗗嵏涔嬪墠鏈?0绉掔殑寤?杩燂紝浠ュ厑璁歌繛鎺ョ殑瀹㈡埛绔湪SoftAP浠嶅浜庣箛鐘舵€佹椂鑾峰緱鏈€鍚庣殑鐘舵€佹秷鎭€?鏇夸唬HTML鍙互閫氳繃鍦ㄦ枃浠秂nduser_setup.html绯荤粺涓婅皟鐢ㄤ竴涓枃浠舵潵鎻愪緵鏈嶅姟銆傜綉椤垫墍闇€鐨勪竴 鍒囬兘蹇呴』鍖呭惈鍦ㄨ繖涓枃浠朵腑銆傝繖涓枃浠跺皢琚繚瀛樺湪RAM涓紝鎵€浠ヤ繚鎸佸敖鍙兘灏忋€傝鏂囦欢鍙互鎻愬墠 gzip鈥檇鏉ュ噺灏忓ぇ灏忥紙鍗充娇鐢╣zip -n鎴杬opfli 锛?骞跺湪鏈嶅姟鏃讹紝鏈€缁堢敤鎴疯缃ā鍧楀皢娣诲姞閫傚綋 鐨凜ontent-Encoding鏍囬鐨勫搷搴斻€?娉ㄦ剰锛氬鏋滆鍘嬬缉锛屾枃浠朵篃鍙互琚懡鍚峞nduser_setup.htmL.gz涓鸿涔夌洰鐨勩€侴zip缂栫爜鐢辨枃浠剁殑鍐?瀹瑰喅瀹氾紝鑰屼笉鏄枃浠跺悕銆?浠ヤ笅HTTP绔偣瀛樺湪锛?绔偣 鎻忚堪 / 杩斿洖缃戦〉鐨凥TMLo灏嗚繑鍥瀍nduser_setup.html鏂囦欢绯荤粺涓婂瓨鍦ㄧ殑鍐呭锛屽惁鍒欒繑鍥炲祵鍏ュ埌鍥轰欢鏄犲儚涓殑浜?鈥?寮哄埗ESP8266瀵规墍鏈夋笭閬撹繘琛岀幇鍦鸿皟鏌伙紝鎶ュ憡鍙互鎵惧埌鐨勬帴鍏ョ偣銆傝繑鍥炴湁鏁堣礋杞芥槸涓€涓狫SON鏁?/apllst 缁勶細[{鈥渟sid鈥? 鈥渇oobar鈥? 鈥渞ssi鈥? -36, 鈥渃han鈥?:3}] 7 ccx 杩斿洖HTTP 204鐘舵€侊紙鍦╓i-Fi杩炴帴妫€鏌绘湡闂存煇浜汚ndroid瀹㈡埛绔鏈燂級 generate_204 /鐘舵€?杩斿洖鐢辩綉椤典娇鐢ㄧ殑绾枃鏈姸鎬佹弿杩?绔偣 鎻忚堪 杩斿洖鍖呭惈鍗佸叚杩涘埗鏍煎紡鐨凟SP8266鐨勮姱鐗嘔D鍜岀姸鎬佺爜鐨勬湁鏁堣浇鑽稪SON锛?0=绌洪棽锛?=杩炴帴锛?=瀵嗙爜閿欒锛? = 鏈夋壘鍒帮紝4=澶辫触锛?=鎴愬姛 绔偣鏃ㄥ湪鐢ㄤ簬璁剧疆鏃犵嚎缃戠粶鍑瘉鐨勬湇鍔°€備笌/update except#鍚岃繑鍥炵浉鍚岀殑鏈夋晥杞借嵎锛?status.]son鑰?鍚戝埌/銆?琛ㄥ崟鎻愪氦鐩爣銆備緥 濡傦細 http://example.com/update?wifi_ssid=foobar&wifi_password=CorrectHorseBatterySta|锛?椤绘槸GET璇锋眰銆傚皢閲嶅畾鍚戝埌/瀹屾垚鏃躲€?enduser_setup.manual () 鎺у埗鏄惁浣跨敤鎵嬪姩AP閰嶇疆銆?enduser_setup.start () 鍚姩寮哄埗闂ㄦ埛銆?enduser.setup.stop () 鍋滄寮哄埗闂ㄦ埛銆?/p>
enduser_setup.manual () 鎺у埗鏄惁浣跨敤鎵嬪姩AP閰嶇疆銆?榛樿鎯呭喌涓嬶紝enduser_setup妯″潡浼氬湪鍚姩鏃惰嚜鍔ㄩ厤缃紑鏀炬帴鍏ョ偣锛屽苟鍦ㄨ澶囨垚鍔熷姞AWiFi缃戠粶鍚?鍋滄銆傚鏋滃惎鐢ㄤ簡鎵嬪姩纰哄紡锛屽垯涓嶄細杩欐牱鍋氥€倃ifi.SOFTAP鍦ㄥ懠鍙箣鍓嶏紝璁惧蹇呴』鎵嬪姩閰嶇疆涓烘ā 寮廵nduser_setup.start()銆傛澶曞崪锛岃澶囨垚鍔熷姞鍏iFi缃戠粶鍚庯紝闂ㄦ埛涓嶄細鍋滄銆?鍙ユ硶 enduser_setup.manual([on_off]) 鍙傛暟 銉籵n_off鎸囩ず鏄惁浣跨敤鎵嬪姩妯″紡鐨勫竷灏斿€?濡傛灉娌℃湁缁欏嚭锛岃鍔熻兘鍙繑鍥炲綋鍓嶈缃€?杩斿洖 褰撳墠璁剧疆锛屽鏋滃惎鐢ㄦ墜鍔ㄦā寮忓垯涓簍rue,鍚﹀垯涓篺alse銆?渚?wifi.setmode(wifi.STATIONAP) wifi.ap.config({ssid="MyPersona1SSID"j auth=wifi.OPEN}) enduser_setup.manual(true) enduser_setup.start( function() print(鈥淐onnected to wifi as:鈥濄兓鈥?wifi.sta.getip()) end, function(err4 str) print(鈥渆nduser_setup: Err #鈥?.銉?err 鈥?": " 鈥?str) end )锛?enduser_setup.start () 鍚姩寮哄埗闂ㄦ埛銆?娉ㄦ剰锛氬綋EUS宸茬粡杩愯鏃惰皟鐢╯tart ()鏄竴涓敊璇紝骞朵笖浼氬鑷磗top ()琚皟鐢ㄦ潵鍏抽棴EUS銆?鍙ユ硶 enduser_setup. start([onConnected() ], [onError(err_nurrij string) ], [onDebug(string)]) 鍙傛暟 鈥?onConnected()褰撹幏寰桰P鍦板潃鏃讹紝鍦╡nduser_setup妯″潡灏嗚嚜琛岀粓姝箣鍓嶏紝灏嗕細瑙﹀彂鍥炶皟 鈥nError()濡傛灉閬囧埌閿€璇欙紝鍥炶皟灏嗗郊鏈熷弸銆俥rr_num鏄弿杩伴攢璇欐棾鍙屽瓙锛屽紑string鐨勬渻閿€淇?鐨勬弿杩般€?鈥nDebugO 鍥炶皟鍦ㄩ粯璁ゆ儏鍐典笅琚鐢?鐢?#define ENDUSER_SETUP_DEBUG_ENABLE in 鎺?鍒秂nduser_setup.c ) o瀹冩棬鍦ㄧ敤浜庢熁鎵炬ā鍧椾腑鐨勫唴閮ㄩ棶棰樸€俿tring鍖呭惈姝e湪杩涜鐨勬弿杩般€?杩斿洖 nil 渚?enduser_setup.start( function() print(鈥淐onnected to wifi as:鈥?銉?wifi.sta.getip()) end, function(errj str) print(鈥渆nduser_setup: Err #鈥?銉?err 鈥?": " 鈥?str) end, print 鈥?Lua print function can serve as the debug calLback ); enduser_setup.stop () 鍋滄寮哄埗闂ㄦ埛銆?鍙ユ硶 enduser_setup.stop() 鍙傛暟 娌℃湁 杩斿洖锛?nil 鏂囦欢妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday file.c
鏂囦欢妯″潡鎻愪緵瀵规枃浠剁郴缁熷強鍏跺崟涓枃浠剁殑璁块棶銆?鏂囦欢绯荤粺鏄竴涓钩闈㈡枃浠剁郴缁燂紝娌℃湁瀛愮洰褰?鏂囦欢澶圭殑姒傚康銆?闄や簡鍐呴儴闂瓨涓婄殑SPIFFS鏂囦欢绯荤粺澶栵紝濡傛灉鍚敤浜咶atFS,璇ユā鍧楄繕鍙互璁块棶澶栭儴SD鍗′笂鐨?FAT鍒嗗尯銆?鈥搊pen fiLe in flash: if file.open(鈥渋nit.lua鈥? then print(file.read()) file.close() end 鈥搊r with fuLL pathspec file.open(鈥?FLASH/init.lua鈥? 鈥搊pen fiLe on SD card if file.open(鈥?SD0/somefile.txt鈥? then print(file.read()) file.close() end file.chdir () 鏇存敼褰撳墠鐩綍锛堝拰椹卞姩鍣級銆?鏂囦欢宸插瓨鍦紙锛?纭畾鎸囧畾鐨勬枃浠舵槸鍚﹀瓨鍦ㄣ€?鏂囦欢鏍煎紡锛堬級 鏍煎紡鍖栨枃浠剁郴缁熴€?file.fscfg () 浠ュ瓧鑺備负鍗曚綅杩斿洖鏂囦欢绯荤粺鍖哄煙鐨勯棯瀛樺湴鍧€鍜岀墿鐞嗗ぇ灏忋€?file.fsinfo () 杩斿洖鏂囦欢绯荤粺鐨勫ぇ灏忎俊鎭€?鐨?File. Li st () 鍒楀嚭鏂囦欢绯荤粺涓殑鎵€鏈夋枃浠躲€?file.mount () 鍦⊿D鍗′笂瀹夎FatFs鍗枫€?file.on () 娉ㄥ唽鍥炶皟鍑芥暟銆?file.open () 鎵撳紑涓€涓枃浠惰繘琛岃闂紝鍙兘鍒涘缓瀹冿紙瀵逛簬鍐欏叆妯″紡锛塐 file.remove () 浠庢枃浠剁郴缁熶腑鍒犻櫎鏂囦欢銆?file.rename () 閲嶅懡鍚嶄竴涓枃浠躲€?/p>
file.stat () 鑾峰彇琛ㄤ腑鏂囦欢鎴栫洰褰曠殑灞炴€с€?鍩烘湰妯″瀷 鍦ㄥ熀鏈ā鍨嬩腑锛屼竴娆℃渶澶氭墦寮€涓€涓枃浠躲€?瀵硅薄妯″瀷 鏂囦欢鐢辨枃浠跺垱寤虹殑鏂囦欢瀵硅薄琛ㄧず銆?filexlose () , file.obj锛?close () 鍏抽棴鎵撳紑鐨勬枃浠讹紝濡傛灉鏈夌殑璇濄€?file.flush () , fileobj锛?flush () 鍒锋柊鏂囦欢绯荤粺鐨勬寕璧峰啓鍏ワ紝纭繚閲嶆柊鍚姩鏃朵笉浼氫涪澶辨暟鎹€?file.read () , fileobj锛?read () 浠庢墦寮€鐨勬枃浠朵腑璇诲彇鍐呭銆?file.readline (), fileobj锛?read line () 浠庢墦寮€鐨勬枃浠朵腑璇诲彇涓嬩竴琛屻€?file.seek () , file.obj锛?seek () 璁剧疆骞惰幏鍙栨枃浠剁殑浣嶇疆锛屼粠鏂囦欢鐨勫紑澶寸畻璧凤紝鍒扮敱銆俧fset鎸囧畾鐨勪綅缃?鍔犱笂鐢眞hence瀛楃涓叉寚瀹氱殑鍩烘暟銆?file.write () , fileobj锛?write () 鍐欎竴涓瓧绗︿覆鍒版墦寮€鐨勬枃浠躲€?file.writeline (), file.obj锛?writeline () 鍐欎竴涓瓧绗︿覆鍒版墦寮€鐨勬枃浠跺苟鍦ㄦ湯灏鹃檮鍔犫€橽
file.chdir () 鏇存敼褰撳墠鐩綍(鍜岄┍鍔ㄥ櫒)銆?褰撴病鏈夐┍鍔ㄥ櫒/鐩綍浣滀负鏂囦欢鍚嶆椂锛屽皢浣跨敤杩欎釜鍛戒护銆?/FLASH绯荤粺鍚姩鍚庯紝褰撳墠鐩綍榛樿涓哄唴閮⊿PIFFS ()鐨勬牴鐩綍銆?/p>
鉂舵敞鎰?鍔熻兘鍙湁鍦‵atFS鏀寔琚紪璇戝埌鍥轰欢涓椂鎵嶅彲鐢ㄣ€?鍙ユ硶 file.chdir(dir) 鍙傛暟 dir 鐩綍鍚?FLASH , /SD0 , /SD1 绛夈€?杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 鏂囦欢宸插瓨鍦?) 纭畾鎸囧畾鐨勬枃浠舵槸鍚﹀瓨鍦ㄣ€?鍙ユ硶 file.exists(filename) 鍙傛暟 銉籪ilename鏂囦欢鏉ユ鏌?杩斿洖 鏂囦欢鐨勭湡瀹炲瓨鍦?鍗充娇澶у皬涓?瀛楄妭)锛屽鏋滀笉瀛樺湪锛屽垯涓篺alse files = file.list() if files[鈥渄evice.config鈥漖 then print(鈥淐onfig file exists鈥? end if file.exists(鈥渄evice.config鈥? then print(鈥淐onfig file exists鈥? end 涔熷彲浠ョ湅鐪?file.list() 鏂囦欢鏍煎紡() 鏍煎紡鍖栨枃浠剁郴缁熴€傚畬鍏ㄦ摝闄や换浣曠幇鏈夌殑鏂囦欢绯荤粺骞跺啓鍏ヤ竴涓柊鐨勬枃浠剁郴缁熴€傛牴鎹瓻SP涓棯瀛樿姱 鐗囩殑澶у皬锛岃繖鍙兘闇€瑕佸嚑绉掗挓鐨勬椂闂淬€?鉂舵敞鎰?鍔熻兘涓嶆敮鎸丼D鍗°€?鍙ユ硶 file.format() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?file.remove() file.fscfg () 浠ュ瓧鑺備负鍗曚綅杩斿洖鏂囦欢绯荤粺鍖哄煙鐨勯棯瀛樺湴鍧€鍜岀墿鐞嗗ぇ灏忋€?鉂舵敞鎰?鍔熻兘涓嶆敮鎸丼D鍗°€?鍙ユ硶 file.fscfg() 鍙傛暟 娌℃湁 杩斿洖 鈥lash address (鏁? 鈥ize (鏁? 渚?print (st ring, format (鈥?x%x,J file.fscfg())) file.fsinfo () 杩斿洖鏂囦欢绯荤粺鐨勫ぇ灏忎俊鎭€傚崟浣嶆槸瀛楄妭涓篠PIFFS鍜宬Byte涓篎atFS銆?鍙ユ硶 file.fsinfo() 鍙傛暟 娌℃湁 杩斿洖 鈥emaining (鏁? 鈥sed (鏁? 鈥otal (鏁? 渚?鈥揼et file system info remaining, used, total=file>fsinfo() print(鈥漒nFile system info:\nTotal : 鈥溾€otal鈥︹€?(k)Bytes\nUsed : 鈥溾€sed鈥︹€?(k)B锛?鐨凢ile.List () 鍒楀嚭鏂囦欢绯荤粺涓殑鎵€鏈夋枃浠躲€?鍙ユ硶 file.list() 鍙傛暟 娌℃湁 杩斿洖 涓€涓寘鍚經鏂囦欢鍚嶏細鏂囦欢澶у皬锝濆鐨刲ua琛?1 = file, list銆傦紱 for k,v in pairs(l) do print(鈥渘ame:鈥濃€鈥︹€渏 size:鈥濃€) end file.mount () 鍦⊿D鍗′笂瀹夎FatFs鍗枫€?銆傛敞鎰?鍔熻兘浠呭湪FatFS鏀寔琚紪璇戝埌鍥轰欢涓椂鎵嶅彲鐢紝骞朵笖鍐呴儴闂瓨涓嶆敮鎸併€?鍙ユ硶 file.mount(ldrv[, pin]) 鍙傛暟 鈥?Idrv閫昏緫椹卞姩鍣ㄧ殑鍚嶇О锛?SD0 , /SD1绛夈€?-pin 1銆?2, SS/CS鐨?0绱㈠紦I,鐪佺暐鏃堕粯璁や负8銆?杩斿洖 鍗峰璞?渚?vol = file.mount(鈥?SOQ鈥? vol:umount() file.on () 娉ㄥ唽鍥炶皟鍑芥暟銆?瑙﹀彂浜嬩欢鏄? -rtc灏嗗綋鍓嶆棩鏈熷拰鏃堕棿浼犻€佸埌鏂囦欢绯荤粺銆傚姛鑳介璁″皢杩斿洖涓€涓寘鍚瓧娈电殑 琛▂ear , mon , day , hour , min , sec褰撳墠鐨勬棩鏈熷拰鏃堕棿銆備笉鏀寔鍐呴儴闂瓨銆?鍙ユ硶 file.on(event[j function()]) 鍙傛暟 鈥vent 涓?鈥unction()鍥炶皟鍑芥暟銆傚鏋渇unction()鐪佺暐锛屽垯鍙栨秷娉ㄥ唽鍥炶皟銆?杩斿洖 nil 渚?sntp.sync(server_ipj function() print(鈥渟ntp time sync ok鈥? file.onCrtc", function() return rtctime.epoch2cal(rtctime鈥et()) end) end) 涔熷彲浠ョ湅鐪?rtctime.epoch2cal() file.open () 鎵撳紑涓€涓枃浠惰繘琛岃闂紝鍙兘鍒涘缓瀹?瀵逛簬鍐欏叆妯″紡)銆?褰撳畬鎴愭枃浠讹紝瀹冨繀椤诲叧闂娇鐢╢ile.close()銆?鍙ユ硶 file.open(filename, mode) 鍙傛暟 鈥ilename鏂囦欢琚墦寮€ 鈥ode : 銆傗€渞"锛氳鍙栨ā寮?榛樿) 銆傗€渨鈥濓細鍐欏叆妯″紡 銆傗€渁鈥濓細杩藉姞妯″紡 銆傗€渞+鈥濓細鏇存柊妯″紡锛屾墍鏈変互鍓嶇殑鏁版嵁琚繚瀛?銆傗€渨+鈥滐細鏇存柊妯″紡锛屾墍鏈変互鍓嶇殑鏁版嵁琚摝闄?銆傗€渁+鈥濓細杩藉姞鏇存柊妯″紡锛屼繚鐣欎互鍓嶇殑鏁版嵁锛屽彧鍏佽鍦ㄦ枃浠舵湯灏惧啓鍏?杩斿洖 鏂囦欢瀵硅薄锛屽鏋滄枃浠舵墦寮€纭畾銆俷il濡傛灉鏂囦欢娌℃湁鎵撳紑锛屾垨鑰呬笉瀛樺湪(璇诲彇妯″紡)銆?绀轰緥(鍩烘湰妯″瀷) 鈥?open ^nit.Lua \ print the first Line. if file.open(,init.lua,J nrn) then print(file.readline()) file.close() end 绀轰緥(瀵硅薄妯″瀷) 鈥搊pen 'init.Lua \ print the first Line. fd = file.openC鈥檌nit.lua鈥? 鈥渞鈥? if fd then print(fd:readline()) fd:close(); fd = nil end 涔熷彲浠ョ湅鐪?鈥ile.close() 鈥ile.readline() file.remove () 浠庢枃浠剁郴缁熶腑鍒犻櫎鏂囦欢銆傝鏂囦欢涓€瀹氫笉鑳芥墦寮€銆?鍙ユ硶 file.remove(filename) 鍙傛暟 filename鏂囦欢鍒犻櫎 杩斿洖 nil 鈥搑emove 鈥渇oo. Lua鈥?from fiLe system. file.remove(鈥渇oo.lua鈥? 涔熷彲浠ョ湅鐪?file.open() file.rename () 閲嶅懡鍚嶄竴涓枃浠躲€傚鏋滀竴涓枃浠跺綋鍓嶆墦寮€锛屽畠灏嗚棣栧厛鍏抽棴銆?鍙ユ硶 file.rename(oldname, newname) 鍙傛暟 鈥ldname鏃ф枃浠跺悕绉?鈥ewname鏂扮殑鏂囦欢鍚嶇О 杩斿洖 true鎴愬姛锛宖alse閿欒銆?渚?鈥搑ename fiLe 鈥榯emp. Lua 鈥?to 鈥榠nit. Lua鈥? file.rename(鈥渢emp.lua"j"init.lua鈥? file.stat () 鑾峰彇琛ㄤ腑鏂囦欢鎴栫洰褰曠殑灞炴€с€傝〃鐨勫厓绱犳槸锛?鈥ize鏂囦欢澶у皬浠ュ瓧鑺備负鍗曚綅 鈥ame鏂囦欢鍚?鈥ime琛ㄤ笌鏃堕棿鎴充俊鎭€傚鏋滄椂闂存埑涓嶅彈鏀寔(鍦⊿P鍦S涓?,鍒欓粯璁や负1970-01-01 00:00:00o O year 掳 mon o day o hour o min 銆俿ec 鈥s_dir true濡傛灉item鏄竴涓洰褰曪紝鍒欐爣蹇楋紝鍚﹀垯false 鈥s_rdonly true濡傛灉椤圭洰鏄彧璇绘爣蹇楋紝鍚﹀垯鏍囧織false 鈥s_hidden true濡傛灉椤圭洰琚殣钘忥紝鍒欐爣蹇楋紝鍚﹀垯false 鈥s_sys true濡傛灉椤圭洰鏄郴缁熷垯鏍囧織锛屽惁鍒檉alse 鈥s_arch true濡傛灉椤圭洰褰掓。鍒欐爣蹇楋紝鍚﹀垯false 鍙ユ硶 file.stat(filename) 鍙傛暟 filename鏂囦欢鍚?杩斿洖 鍖呭惈鏂囦欢灞炴€х殑琛?渚?s = file.stat(鈥?SDO/myfile鈥? print(鈥渘ame: " 鈥⑩€?s.name) printf鈥檚ize:鈥濃€?s.size) t = s.time print(string.format(鈥?02d:%02d:%02d鈥? t.hour, t銉籱in, t.sec)) print(string.format(鈥?04d-%02d-%02d鈥? t.year, t.mon, t.day)) if s.is_dir then print(鈥渋s directory鈥? else print(鈥渋s file鈥? end if s.is_rdonly then print(鈥渋s read-only鈥? else print(鈥渋s writable鈥? end if s.is_hidden then print(鈥渋s hidden鈥? else print(鈥渋s not hidden鈥? end if s.is_sys then print(鈥渋s system鈥? else print(鈥渋s not system鈥? end if s.is_arch then print(鈥渋s archive鈥? else print(鈥渋s not archive鈥? end s = nil t = nil 鏂囦欢璁块棶鍔熻兘 璇ile妯″潡鎻愪緵浜嗗嚑涓姛鑳芥潵璁块棶鎵撳紑鏂囦欢鍚庣殑鍐呭file.oPen()銆傚畠浠彲浠ョ敤浣滃熀鏈ā 鍨嬫垨瀵硅薄妯″瀷鐨勪竴閮ㄥ垎锛?鍩烘湰妯″瀷 鍦ㄥ熀鏈ā鍨嬩腑锛屼竴娆℃渶澶氭墦寮€涓€涓枃浠躲€傛枃浠惰闂姛鑳介粯璁ゅ姝ゆ枃浠惰繘琛屾搷浣溿€傚鏋滄墦寮€鍙?涓€涓枃浠讹紝鍒欓渶瑕佷簨鍏堝叧闂厛鍓嶇殑榛樿鏂囦欢銆?鈥搊pen rinit.Lua \ print the first Line. if file.open(,init.lua,J 鈥渞鈥? then print(file.readline()) file.close() end 瀵硅薄妯″瀷 鏂囦欢鐢卞垱寤虹殑鏂囦欢瀵硅薄琛ㄧずfile.open()銆傛枃浠惰闂姛鑳藉彲鐢ㄤ綔姝ゅ璞$殑鏂规硶锛屽涓枃浠跺 璞″彲浠ュ叡瀛樸€?src = file.openC鈥檌nit.lua", 鈥渞鈥? if src then dest = file.openC鈥檆opy.lua", 鈥渨鈥? if dest then local line repeat line = src:read() if line then dest:write(line) end until line == nil dest:close(); dest = nil end src:close(); dest = nil end 娉ㄩ煶 寤鸿鍦ㄥ簲鐢ㄧ▼搴忎腑鍙娇鐢ㄤ竴涓ā鍨嬨€傚悓鏃朵娇鐢ㄨ繖涓や釜妯″瀷鍙兘浼氫骇鐢熶笉鍙鐭ョ殑琛屼负锛氫粠 鍩烘湰妯″瀷鍏抽棴榛樿鏂囦欢涔熷皢鍏抽棴鐩稿簲鐨勬枃浠跺璞°€傚鏋滄枃浠舵槸鐩稿悓鐨勬枃浠讹紝浠庡璞℃ā鍨嬪叧 闂枃浠朵篃灏嗗叧闂粯璁ゆ枃浠躲€?鉂舵敞鎰?SPIFFS涓婃墦寮€鏂囦欢鐨勬渶澶ф暟閲忔槸鍦ㄧ紪璇戞椂閫氳繃SPIFFS_MAX_OPEN_FILES in纭畾 鐨?user_config.h銆?file.close () , file.obj锛?close () 鍏抽棴鎵撳紑鐨勬枃浠讹紝濡傛灉鏈夌殑璇濄€?鍙ユ硶 file.close() fd:close() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?file.open() file.flush () , file.obj锛?flush () 鍒锋柊鍒版枃浠剁郴缁熺殑浠讳綍鎸傝捣鍐欏叆锛岀‘淇濆湪閲嶆柊鍚姩鏃朵笉浼氫涪澶辨暟鎹€備娇 鐢╢ile.close() / fd:close()鍏抽棴鎵撳紑鐨勬枃浠朵篃浼氭墽琛屼竴涓殣寮忓埛鏂般€?鍙ユ硶 file.flush() fd:flush() 鍙傛暟 娌℃湁 杩斿洖 nil 绀轰緥(鍩烘湰妯″瀷) 鈥?open Lua 1 in 1a+ 1 mode if file.open(鈥渋nit.lua鈥? na+") then 鈥?write rfoo bar鈥?to the end of the fiLe file.write(鈥榝oo bar鈥? file.flush() 鈥?write 鈥榖az鈥?too file.write(鈥榖az鈥? file.close() end 涔熷彲浠ョ湅鐪?file.close() / file.obj:close() file.read 锛堬級 , file.obj锛?read 锛堬級 浠庢墦寮€鐨勬枃浠朵腑璇诲彇鍐呭銆?銆傛敞鎰?璇ュ嚱鏁版殏鏃跺湪鍫嗕笂鍒嗛厤2* 锛堣姹傜殑瀛楄妭鏁帮級鏉ョ紦鍐插拰澶勭悊璇诲彇鐨勬暟鎹€傞粯璁ゅ潡澶у皬 锛團ILE_READ_CHUNK 锛夋槸1024瀛楄妭锛岃璁や负鏄畨鍏ㄧ殑銆傛帹鍔ㄨ繖涓?鍊嶆垨鏇村鍙兘浼氬鑷村爢 婧㈠嚭鍙栨埧浜庡簲瑙掔▼搴忋€備负鍙傛暟閫夋嫨涓€涓€兼椂鑰冭檻杩欎竴鐐筺_or_char銆?鍙ユ硶 file.read([n_or_char]) fd:read([n_or_char]) 鍙傛暟 鈥?n_or_char : 銆傚鏋滄病鏈変紶鍏ワ紝鍒欒鍙朏ILE_READ_CHUNK瀛楄妭鎴栨暣涓枃浠讹紙浠ヨ緝灏忚€呬负鍑嗭級銆?鈻″鏋滀紶閫掍竴涓暟瀛梟 ,鐒跺悗璇诲彇n瀛楄妭鎴栨暣涓枃浠讹紙浠ヨ緝灏忚€呬负鍑嗭級銆?鈻″鏋滀紶閫掍竴涓寘鍚崟涓瓧绗︾殑瀛楃涓瞔har ,鍒欒鍙栫洿鍒癱har鍑虹幇鍦ㄦ枃浠剁殑涓嬩竴 涓狥ILE_READ_CHUNK瀛楄妭宸茬粡琚鍙栵紝鎴栬€呭埌杈綞OF銆?杩斿洖 鏂囦欢鍐呭浣滀负瀛楃涓诧紝鎴朎IL鏃朵负闆?绀轰緥(鍩烘湰妯″瀷) 鈥損rint the first Line of rinit. Lua if file.open(鈥渋nit.lua鈥? 鈥渞鈥? then print(file.read(鈥榎n鈥?) file.close() end 绀轰緥锛堝璞℃ā鍨嬶級 鈥損rint the first 5 bytes of 鈥榠nit. Lua1 fd = file.openC鈥檌nit.lua", nrn) if fd then print(fd:read(5)) fd:close(); fd = nil end 涔熷彲浠ョ湅鐪?鈥ile.open() 鈥ile.readline() / file.obj:readline() file.readline () , file.obj锛?readline () 浠庢墦寮€鐨勬枃浠朵腑璇诲彇涓嬩竴琛屻€傝瀹氫箟涓洪浂涓垨澶氫釜浠OL C\n鈥?瀛楄妭缁撳熬鐨勫瓧鑺傘€傚鏋滀笅涓€ 琛屾瘮1024闀匡紝杩欎釜鍑芥暟鍙繑鍥炲墠1024涓瓧鑺傘€?鍙ユ硶 file.readline() fd:readline() 鍙傛暟 娌℃湁 杩斿洖 鎸夊瓧绗︿覆閫愪釜鏂囦欢鍐呭锛屽寘鎷珽OL C\n鈥? 0 nil EOF鏃惰繑鍥炪€?绀轰緥(鍩烘湰妯″瀷) 鈥損rint the first Line of rinit. Lua鈥?if file.open(鈥渋nit.lua,\ 鈥渞鈥? then print(file.readline()) file.close() end 涔熷彲浠ョ湅鐪?鈥ile.open() 鈥ile.close() / file.obj:close() 鈥ile.read() / file.obj:read() file.seek () , file.obj锛?seek () 璁剧疆骞惰幏鍙栨枃浠剁殑浣嶇疆锛屼粠鏂囦欢鐨勫紑澶寸畻璧凤紝鍒扮敱銆俧fset鎸囧畾鐨勪綅缃姞涓婄敱whence瀛楃涓叉寚瀹?鐨勫熀鏁般€?鍙ユ硶 file.seek([whence [, offset]]) fd:seek([whence [, offset]]) 鍙傛暟 鈥hence 銆傗€渟et鈥濓細 base鏄綅缃? (鏂囦欢鐨勫紑澶? 銆傗€渃ur鈥濓細 base鏄綋鍓嶄綅缃?榛樿鍊? 銆傗€滅粨鏉熲€濓細鍩哄湴鏄枃浠剁殑缁撳熬 鈥ffset榛樿涓? 濡傛灉娌℃湁缁欏嚭鍙傛暟锛屽嚱鏁板彧鏄繑鍥炲綋鍓嶇殑鏂囦欢鍋忕Щ閲忋€?杩斿洖 缁撴灉鏂囦欢鐨勪綅缃紝鎴杗il閿欒 绀轰緥(鍩烘湰妯″瀷) if file.open(鈥渋nit.lua鈥? 鈥渞鈥? then --skip the first 5 bytes of the fiLe fileeSeekC鈥檚et鈥? 5) print(file.readline()) file.close() end 涔熷彲浠ョ湅鐪?file.open() file.wnte () , file.obj锛?write () 鍐欎竴涓瓧绗︿覆鍒版墦寮€鐨勬枃浠躲€?鍙ユ硶 file.write(string) fd:write(string) 鍙傛暟 string瑕佸啓鍏ユ枃浠剁殑鍐呭 杩斿洖 true濡傛灉鍐欏叆娌℃湁闂锛岄偅灏眓il閿欒浜?绀轰緥(鍩烘湰妯″瀷) 鈥?open ^nit.Lua 1 in 1a+ 1 mode if file.open(鈥渋nit.lua鈥? na+") then 鈥?write rfoo bar鈥?to the end of the fiLe file.write(鈥榝oo bar鈥? file, close銆?end 绀轰緥(瀵硅薄妯″瀷) 鈥搊pen linit.Lua 1 in 'a+ 1 mode fd = file.open("init.lua\ 鈥渁+鈥? if fd then 鈥?write 鈥榝oo bar1 to the end of the fiLe fd:write(鈥榝oo bar鈥? fd:close() end 涔熷彲浠ョ湅鐪?鈥ile.open() 鈥ile.writeline() / file.obj:writeline() file.wnteline () , file.obj锛?writeline () 鍐欎竴涓瓧绗︿覆鍒版墦寮€鐨勬枃浠跺苟鍦ㄦ湯灏鹃檮鍔犫€橽n鈥檕 鍙ユ硶 file.writeline(string) fd:writeline(string) 鍙傛暟 string瑕佸啓鍏ユ枃浠剁殑鍐呭 杩斿洖 true濡傛灉鍐欏緱濂斤紝nil閿欒 绀轰緥(鍩烘湰妯″瀷) 鈥搊pen rinit.Lua1 in 鈥榓+鈥?mode if file.open(,init.lua,J na+n) then 鈥?write 'foo bar1 to the end of the fiLe file.writeline(鈥榝oo bar鈥? file.close() end 涔熷彲浠ョ湅鐪?鈥ile.open() 鈥ile.readline() / file.obj:readline() 鏂囨。銆嬭嫳璇€濇ā鍧椔籫dbstub gdbstub 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?9鏈?18 H 鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?gdbstub.c
褰撲笌涓?x106鏋勫缓鐨刧db鐗堟湰涓€璧蜂娇鐢ㄦ椂锛岃妯″潡鎻愪緵鍥轰欢鐨勫熀鏈簮浠g爜璋冭瘯銆傚鏋滀綘鍚敤杩?涓ā鍧楋紝閭d箞鑷村懡鐨勯敊璇?濡傛棤鏁堢殑鍐呭瓨璇诲彇)灏嗛櫡Agdbstubo杩欎娇鐢║ART0涓嶨DB杩涜閫?淇°€傚鏋滃湪UART0杩炴帴鍒扮粓绔?鎴栬€呭儚esplorer杩欐牱鐨処DE)鏃跺彂鐢熻繖绉嶆儏鍐碉紝閭d箞浣犱細鐪嬪埌 涓€涓瓧绗︿覆寮€濮嬶紝鐒跺悗鍐嶇湅$t鍑犱釜瀛楃銆傝繖鏄櫡闃卞彂鐢熺殑淇″彿锛屾帶鍒舵潈搴旇浼犻€掔粰gdb銆?gdb鐒跺悗鍙互寮€濮嬭繛鎺ュ埌NodeMCU骞冲彴銆傚鏋滆繖鏄€氳繃涓插彛杩炴帴鍒颁富鏈虹郴缁燂紝閭d箞浠ヤ笅 (鎴栧叧闂殑鍙樹綋)搴旇宸ヤ綔锛?gdb bin/firmwarefile.bin target remote /dev/ttyUSB0 鍦ㄨ繖涓€鐐逛笂锛屼綘鍙互寰樺緤锛岀湅鐪嬪彂鐢熶簡浠€涔堬紝浣嗕綘涓嶈兘缁х画鎵ц銆?涓轰簡杩涜浜や簰寮忚皟璇曪紝璇穏dbstub.brk()鍦ㄦ偍鐨凩ua浠g爜涓坊鍔犱竴涓皟鐢ㄣ€傝繖灏嗚Е鍙戜竴涓?break鎸囦护锛屽苟灏嗛櫡鍏db濡備笂銆備絾鏄紝鏂偣鎸囦护鏀寔continuation,鍥犳鎮ㄥ彲浠ュ崟姝ヨ缃柇鐐?绛夈€傝娉ㄦ剰锛岀敱EspressifME缃殑1x106澶勭悊鍣ㄥ彧鏀寔涓€涓‖浠舵柇鐐广€傝繖鎰忓懗鐫€鎮ㄥ彧鑳藉湪Flash浠?鐮佷腑鏀剧疆涓€涓柇鐐广€備綘鍙互灏藉彲鑳藉湴鍗曟鎵ц銆?gdbstub.brk () 閫氳繃鎵цbreak 0,0鎸囦护鏉ヨ繘鍏db銆?gdbstub.gdboutput () 鎺у埗绯荤粺杈撳嚭鏄惁灏佽鍦╣db杩滅▼璋冭瘯鍗忚涓€?/p>
gdbstub.brk () 閫氳繃鎵ц涓€鏉reak 0,0鎸囦护杩涘叆gdb銆?鍙ユ硶 gdbstub.brk() gdbstub.gdboutput () 鎺у埗绯荤粺杈撳嚭鏄惁灏佽鍦╣db杩滅▼璋冭瘯鍗忚涓€備簨瀹炶瘉鏄庯紝杩欏苟涓嶅儚浣犲笇鏈涚殑閭f牱鏈夌敤-涓昏 鏄洜涓轰綘鏃犳硶灏嗚緭鍏ュ彂閫佸埌NodeMCU鏉裤€傚彟澶栵紝鍥犱负鍦ㄨ繍琛実db骞惰繛鎺ュ埌NodeMCU涔嬪悗锛?鎮ㄧ‘瀹炲簲璇ヨ皟鐢ㄦ璋冪敤銆備笅闈㈢殑渚嬪瓙棣栧厛杩涜涓柇锛岀劧鍚庡垏鎹㈠埌閲嶅畾鍚戣緭鍑恒€傝繖宸ヤ綔(浣嗕綘 鏃犳硶鍙戦€佹洿澶氱殑鎺у埗鍙拌緭鍏?銆?gdbstub.gdboutput(enable) 鍙傛暟 enable濡傛灉涓簍rue,鍒欒緭鍑哄皢琚皝瑁呭湪gdb杩滅▼璋冭瘯鍗忚涓€傚鏋滀负false,鍒欑洿鎺ュ彂閫佸埌 UARTo function entergdb() gdbstub.brk() gdbstub.gdboutput(1) print(鈥淎ctive鈥? end entergdb() 绗旇 涓€鏃﹀皢gdb杩炴帴鍒癗odeMCU,鍒橬odeMCU鐨勪换浣曞叾浠栬緭鍑哄皢琚涪寮冿紙鍥犱负瀹冧笉绗﹀悎gdb杩滅▼ 璋冭瘯鍗忚锛夈€傝繖鍙兘锛堟垨鍙兘涓嶏級鏄竴涓棶棰樸€傚鏋滀綘鎯冲湪gdb涓嬭繍琛屽苟涓旂湅鍒癗odeMCU鐨?杈撳嚭锛岄偅涔堣皟鐢╣dbstub.gdboutput锛坙锛夌劧鍚庤緭鍑哄皢琚寘瑁呭湪gdb鍗忚涓苟鏄剧ず鍦╣db鎺у埗鍙?涓娿€備綘涓嶆兂杩欐牱鍋氾紝鐩村埌gdb杩炴帴锛屽洜涓烘瘡涓暟鎹寘闇€瑕佷竴涓槑纭殑纭鎵嶈兘缁х画銆?GPIO妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday gpio.c 璇ユā鍧楁彁渚涘GPIO 锛堥€氱敤杈撳叆/杈撳嚭锛夊瓙绯荤粺鐨勮闂€?/p>
鎵€鏈夎闂潎鍩轰簬NodeMCU寮€鍙戝伐鍏峰寘涓婄殑I/O绱㈠紩缂栧彿锛岃€屼笉鏄唴閮℅PIO寮曡剼銆備緥濡傦紝寮€ 鍙戝浠朵笂鐨凞O寮曡剼琚槧灏勫埌鍐呴儴GPI銆傚紩鑴?6銆?濡傛灉涓嶄娇鐢∟odeMCU寮€鍙戝伐鍏峰寘锛岃鍙傝€冧笅闈㈢殑GPIO寮曡剼鍥炬潵鑾峰彇indexgpio鏄犲皠銆?IO绱㈠紩 ESP8266寮曡剼 1銆傜储寮?ESP8266寮曡剼 0[*] GPIO16 7 GPIO13 1 GPIO5 8 GPIO15 2 GPIO4 9 GPIO3 3 GPIOO 10 GPIO1 4 GPIO2 11 GPIO9 浜?GPIO14 12 GPIO10 6 GPIO12
DO (GPIO16)鍙兘鐢ㄤ綔gpio璇?鍐欍€備笉鏀寔0pen-drain/interrupt/pwm/i2c/ow0 gpio.mode () 灏嗗紩鑴氬垵濮嬪寲涓篏PIO妯″紡锛岃缃紩鑴氱殑杈撳叆鐎氬嚭鏂瑰悜浠ュ強鍙€夌殑鍐呴儴寮变笂鎷夈€?gpio.read () 璇诲彇鏁板瓧GPIO寮曡剼鍊笺€?gpio.serout () 鍩轰簬涓€绯诲垪寤惰繜鏃堕棿锛堜互|JS涓哄崟浣嶏級搴忓垪鍖栬緭鍑恒€?gpio.trig () 寤虹珛鎴栨竻闄や竴涓洖璋冨嚱鏁板湪涓€涓紩鑴氱殑涓柇涓婅繍琛屻€?gpio.write () 璁剧疆鏁板瓧GPI銆傚紩鑴氬€笺€?/p>
gpio.mode 锛堬級 灏嗗紩鑴氬垵濮嬪寲涓篏PIO妯″紡锛岃缃紩鑴氱殑杈撳叆/杈撳嚭鏂瑰悜浠ュ強鍙€夌殑鍐呴儴寮变笂鎷夈€?gpio.modeCpin, mode [, pullup]) 鍙傛暟 -pin寮曡剼鏉ラ厤缃甀O绱㈠紩 -mode gpio.OUTPUT, gpio.OPENDRAIN, gpio.INPUT鎴杇pio.INT (涓柇妯″紡) , pullup gpio.PULLUP浣胯兘寮变笂鎷夌數闃?榛樿鏄痝pio.FLOAT 杩斿洖 nil 渚?gpio.mode(0, gpio.OUTPUT) 涔熷彲浠ョ湅鐪?鈥pio.read() 鈥pio.write() gpio.read () 璇诲彇鏁板瓧GPIO寮曡剼鍊笺€?鍙ユ硶 gpio.read(pin) 鍙傛暟 pin寮曡剼璇诲彇锛孖銆傜储寮?杩斿洖 涓€涓暟瀛楋紝0=浣庯紝1=楂?渚?鈥搑ead vaLue of gpio 0. gpio.read(0) 涔熷彲浠ョ湅鐪?gpio.mode() gpio.serout () 鍩轰簬涓€绯诲垪寤惰繜鏃堕棿(浠JS涓哄崟浣?搴忓垪鍖栬緭鍑恒€傚湪姣忔寤惰繜涔嬪悗锛屽紩鑴氳鍒囨崲銆傚湪鏈€鍚庝竴 涓懆鏈熷拰鏈€鍚庝竴涓欢杩熶箣鍚庯紝寮曡剼涓嶄細琚垏鎹€?璇ュ姛鑳芥湁鐗╃宸ヤ綔妯″紡锛氬唻姝?瀵瑰崄灏忓崄50寰潽鏃冲垎杈ㄧ巼锛岄檺鍒朵负鏈€澶с€傛€讳綋鎸佺画鏃堕棿锛屽紓 姝?鍚屾鎿嶄綔锛岀矑搴﹁緝灏忎絾鎸佺画鏃堕棿鍑犱箮涓嶅彈闄愬埗銆?鏄惁閫夋嫨寮傛妯″紡鐢眂allback鍙傛暟鐨勫瓨鍦ㄦ潵瀹氫箟銆傚鏋滃瓨鍦ㄥ苟涓旀槸鍑芥暟绫诲瀷鐨勶紝鍒欒鍑芥暟 鍙樹负寮傛锛屽苟涓斿湪搴忓垪缁撴潫鏃惰皟鐢ㄥ洖璋冨嚱鏁般€傚鏋滃弬鏁版槸鏁板瓧锛屽垯璇ュ嚱鏁颁粛鐒舵槸寮傛鐨勶紝浣?鏄畬鎴愬悗涓嶄細璋冪敤鍥炶皟銆?瀵逛簬寮傛鐗堟湰锛屾渶灏忓欢杩熸椂闂翠笉搴斿皬浜?0|JS,鏈€澶у欢杩熸椂闂村簲涓篛x7fffff|js 锛堛€?.3绉掞級鈻″湪杩?绉嶆ā寮忎笅锛屽嚱鏁颁笉浼氶樆濉炲爢鏍堬紝骞跺湪杈撳嚭搴忓垪瀹屾垚涔嬪墠绔嬪嵆杩斿洖銆傜‖浠跺畾鏃跺櫒FRC1_SOURCE 妯″紡鐢ㄤ簬鏀瑰彉鐘舵€併€傜敱浜庡彧鏈変竴涓‖浠跺畾鏃跺櫒锛屾墍浠ュ彲浠ュ悓鏃朵娇鐢ㄥ摢浜涙ā鍧椼€傚鏋滃鏃跺櫒宸?缁忓湪浣跨敤涓紝灏嗕細寮曞彂閿欒銆?璇锋敞鎰忥紝鍚屾鍙橀噺锛坣o鎴杗il callback鍙傛暟锛夊嚱鏁颁細闃诲鍫嗘爤锛屽洜姝ゅ畠鐨勪换浣曚娇鐢ㄩ兘蹇呴』閬?瀹圫DK鍑嗗垯锛堣繖閲屼篃瑙i噴锛夈€備笉杩欐牱鍋氬彲鑳戒細瀵艰嚧WiFi闂鎴栧交搴曞穿婧?閲嶆柊鍚姩銆傜畝鑰岃█ 涔嬶紝杩欐剰鍛崇潃鎵€鏈夊欢杩熸椂闂寸殑鎬诲拰涔樹互鍛ㄦ湡鏁颁笉搴旇秴杩?5姣銆?鍙ユ硶 gpio.serout锛坧in., start_level, delay_times [, cycle_num[, callback]]锛?鍙傛暟 -pin寮曡剼浣跨敤锛孖O绱㈠紩 鈥tart_level 绾у埆寮€濮嬶紝鏃犺鏄?gpio.HIGH 鎴?gpio. LOW 鈥elay_times gpio寮曡剼鐨勬瘡涓紑鍏充箣闂寸殑寤惰繜鏃堕棿锛堜互鍗㏒涓哄崟浣嶏級掳 鈥ycle.num鍦ㄥ簭鍒椾腑杩愯鐨勫彲閫夋鏁般€傦紙榛樿鏄?锛?鈥allback 涓€涓彲閫夌殑鍥炶皟鍑芥暟鎴栨暟瀛楋紝濡傛灉瀛樺湪鐨勮瘽锛屽嚱鏁扮珛鍗宠繑鍥炲苟寮傛銆?杩斿洖 nil gpio.mode(1,gpio.OUTPUT,gpio.PULLUP) gpio.serout(1jgpio.HIGH,{30,30,60,60,30,30}) 鈥?seriaL one byte, bl0110010 gpio.serout(1,gpio.HIGH,(30,70),8) 鈥?seriaL 30% pwm 10kj Lasts 8 eye Les gpio.serout(lj gpio.HIGH,(3,7}^ 8) 鈥?seriaL 30% pwm 100kj Lasts 8 eye Les gpio.sepout(l,gpio.HIGH,{0,0},8) 鈥?seriaL 50% pwm as fast as possibLej Lasts 8 gpio. serout(1 jgpio. LOW^ (20,10,10,20,10,10,10,100)) 鈥?siin uart one byte 0x5A at i gpio.serout(lj gpio.HIGH,(8?18},8) 鈥?seriaL 30% pwm 38k, Lasts 8 eye Les gpio.serout(1,gpio.HIGH,{5000,995000),100, function() print(鈥漝one鈥? end) 鈥?asyn^ gpio.serout(1jgpio.HIGH,{5000,995000),100, 1) 鈥?asynchronous 100 fLoshes 5 ms Li gpio.trig 锛堬級 寤虹珛鎴栨竻闄や竴涓洖璋冨嚱鏁板湪涓€涓紩鑴氱殑涓柇涓婅繍琛屻€?濡傛灉GPIO_lNTERRUPT_ENABLE鍦ㄧ紪璇戞椂鏈畾涔夛紝鍒欐鍑芥暟涓嶅彲鐢ㄣ€?gpio.trig(pin, [type [, callbackfunction]]) 鈥in 1-12,寮曡剼瑙﹀彂锛孖O绱㈠紩銆傝娉ㄦ剰锛屽紩鑴?涓嶆敮鎸佷腑鏂€?鈥ype 鈥渦p鈥? 鈥渄own鈥濓紝鈥渂oth鈥? Tow鈥濓紝鈥渉igh鈥?鍒嗗埆琛ㄧず涓婂崌娌匡紝涓嬮檷娌匡紝鍙岃竟娌匡紝浣庣數 骞冲拰楂樼數骞宠Е鍙戞ā寮忋€傚鏋滅被鍨嬩负鈥渘one鈥濇垨鐪佺暐锛屽垯鍥炶皟鍑芥暟琚Щ闄わ紝涓柇琚鐢ㄣ€?鈥al lback_f unction (levels when)瑙﹀彂鍙戠敓鏃剁殑鍥炶皟鍑芥暟銆備腑鏂鐨勬寚瀹氬紩鑴氱殑鐢靛钩浣?涓虹涓€涓弬鏁颁紶閫掔粰鍥炶皟鍑芥暟銆備簨浠剁殑鏃堕棿鎴充綔涓虹浜屼釜鍙傛暟浼犻€掋€傝繖鏄互寰涓哄崟浣嶏紝 涓庡熀鏁扮浉鍚宼mr.nowO銆傝繖涓椂闂存埑鍦ㄤ腑鏂骇鎶撳彇锛屾瘮鍦ㄥ洖璋冨嚱鏁颁腑鑾峰緱鏃堕棿鏇村姞涓€ 鑷淬€傚鏋滆鍑芥暟琚渷鐣ワ紝鍒欏墠闈㈢殑鍥炶皟鍑芥暟灏嗚浣跨敤銆?杩斿洖 nil 渚?do 鈥搖se pin 1 as the input puLse width counter local pin, pulselj du, now, trig = 1, 0, 0, tmr.now3 gpio.trig gpio.mode(pinjgpio.INT) local function pinlcb(level, pulse2) print( level, pulse2 - pulsel ) pulsel = pulse2 trigCpin, level == gpio.HIGH and 鈥渄own鈥?or 鈥渦p鈥? end trig(pin, "down"pinlcb) end 涔熷彲浠ョ湅鐪?gpio.mode() gpio.write () 璁剧疆鏁板瓧GPIO寮曡剼鍊笺€?鍙ユ硶 gpio.write(pin, level) 鍙傛暟 -pin寮曡剼鍐欏叆锛孖銆傜储寮?鈥evel gpio.HIGH 瑕佷箞 gpio. LOW 杩斿洖 nil 鈥搒et pin index 1 to GPIO mode, and set the pin to high. pin = l gpio.mode(pin, gpio.OUTPUT) gpio.write(pin4 gpio.HIGH) 涔熷彲浠ョ湅鐪?銉籫pio.mode() 鈥pio.read() HDC1080妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?鏃?Metin KOC Metin KOC hdc!080.c
璇ユā鍧楀彲浠ヨ闂甫鏈夋俯搴︿紶鎰熷櫒鐨凥DC1080浣庡姛鑰楋紝楂樼簿搴︽暟瀛楁箍搴︿紶鎰熷櫒銆?hdcl080.read () 瀵逛紶鎰熷櫒杩涜閲嗘牱锛岀劧鍚庤繑鍥炴俯搴﹀拰婀垮害鍊笺€?hdcl080.setup () 鍒濆鍖栨ā鍧椼€?hdcl080.init (SDA, SCL) 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?/p>
hdcl080.read () 瀵逛紶鎰熷櫒杩涜閲囨牱锛岀劧鍚庤繑鍥炴俯搴﹀拰婀垮害鍊笺€?鍙ユ硶 hdcl080.read() 杩斿洖 娓╁害鏁版嵁(鎽勬皬搴?鍜屾箍搴︽暟鎹?鐧惧垎姣?(0-100)(鏁存暟/娴偣鏁? 渚?local sdaj scl = 1, 2 i2c.setup(0j sda, scl, i2c.SL0W) 鈥?caLL i2c.setup() onLy once hdcl080.setup() local temperature^humidity = hdcl080.read() print(temperature) print(humidity) hdcl080.setup () 鍒濆鍖栨ā鍧椼€?鍙ユ硶 hdcl080.setup() 鍙傛暟 -娌℃湁 杩斿洖 nil hdcl080.init (SDA, SCL) 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俬dcl080.setup()鏀逛负浣跨敤銆?鍙ユ硶 hdcl080.init(sda, scl) 鍙傛暟 銉籹da鏁版嵁寮曡剼 鈥?scl鏃堕挓寮曡剼 杩斿洖 nil HMC5883L 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016 骞?鏈?9 鏃?Jason Schmidlapp Jason Schmidl 鍙?p hmc5883l.c 璇ユā鍧楁彁渚涘HMC5883L涓夎酱鏁板瓧缃楃洏鐨勮闂€?hmc5883Lread () 閲嗘牱浼犳劅鍣ㄥ苟杩斿洖X, Y鍜孼鏁版嵁銆?hmc5883l.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?hmc5883l.setup () 鍒濆鍖栨ā鍧椼€?/p>
hmc58831.read () 閲嗘牱浼犳劅鍣ㄥ苟杩斿洖X, Y鍜孼鏁版嵁銆?鍙ユ硶 hmc58831.read() 杩斿洖 x, y, z娴嬮噺(鏁存暟)娓╁害涔樹互10 (鏁存暟) 渚?local sdaj scl = 1, 2 i2c.setup(0j sda, scl, i2c.SL0W) 鈥?caLL i2c.setup() onLy once hmc58831.setup() local x>y,z = hmc58831.read() print(string.format("x = %d, y = %d, z = %d鈥? x, y, z)) hmc58831.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€俬mc58831.setup()鏀逛负浣跨敤銆?hmc58831.initfsda銉?scl) 銉籹da鏁版嵁寮曡剼 鈥?scl鏃堕挓寮曡剼 杩斿洖 nil hmc58831.setup () 鍒濆鍖栨ā鍧椼€?鍙ユ硶 hmc58831. set upQ 鍙傛暟 娌℃湁 杩斿洖 nil HTTP妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?1 鏈?15 H esphttpclient /Vowstar Vowstar http.c
鍩烘湰鐨凥TTP瀹㈡埛绔ā鍧楋紝瀹冩彁渚涗簡涓€涓€氳繃HTTP (S)杩涜GET/POST/PUT/DELETE鐨勬帴 鍙o紝浠ュ強鑷畾涔夌殑璇锋眰銆傜敱浜嶦SP8266鐨勫唴瀛橀檺鍒讹紝鏀寔鐨勯〉闈?涓讳綋澶у皬鍙楀彲鐢ㄥ唴瀛樼殑闄?鍒躲€傝瘯鍥炬帴鏀舵瘮杩欐洿澶х殑椤甸潰灏嗗け璐ャ€傚鏋滈渶瑕佹洿澶х殑椤甸潰/涓讳綋澶у皬锛岃鑰?铏憂et. createConnection()鍦ㄦ暟鎹腑浣跨敤鍜屼紶杈撱€?鉂舵敞鎰?瀹冩槸涓嶆槸鑳藉鎵ц浣跨敤姝ゆā鍧楀苟鍙戠殑HTTP璇锋眰銆?姣忎釜璇锋眰鏂规硶閮芥湁涓€涓洖璋冿紝褰撲粠鏈嶅姟鍣ㄦ帴鏀跺埌鍝嶅簲鏃惰皟鐢ㄨ鍥炶皟銆傜涓€涓弬鏁版槸鐘舵€佺爜锛?鍙互鏄父瑙勭殑HTTP鐘舵€佺爜锛屼篃鍙互鏄?1琛ㄧずDNS,杩炴帴鎴栧唴瀛樹笉瓒虫晠闅滐紝鎴栬秴鏃?鐩墠涓?0 绉?銆?瀵逛簬姣忎釜鎿嶄綔锛岄兘鍙互鎻愪緵鑷畾涔塇TTP澶存垨瑕嗙洊鏍囧噯澶淬€傞粯璁ゆ儏鍐典笅锛孒ost鏍囬浠嶶RL鎺?瀵糢ser-Agent鏄疎SP8266銆備絾鏄紝璇锋敞鎰忥紝Connection鏍囬涓嶈兘琚鐩栵紒瀹冩€绘槸璁剧疆 涓?close o HTTP閲嶅畾鍚?HTTP鐘舵€?00-308)鑷姩璺熼殢鍒?0鐨勯檺鍒讹紝浠ラ伩鍏嶅彲鎬曠殑閲嶅畾鍚戝惊鐜€?褰撹皟鐢ㄥ洖璋冩椂锛屼細浼犻€扝TTP鐘舵€佺爜锛屾敹鍒扮殑姝f枃鍜屽搷搴斿ご鐨勮〃鏍笺€傛墍鏈夌殑鏍囬鍚嶇О宸茬粡琚檷 浣庡埌瀹规槗璁块棶銆傚鏋滄湁澶氫釜鐩稿悓鍚嶇О鐨勬爣棰橈紝鍒欏彧杩斿洖鏈€鍚庝竴涓爣棰樸€?SSL/TLS 鏀寔 娉ㄦ剰缃戠粶妯″潡涓褰曠殑绾︽潫鏉′欢銆?http.delete () 鎵цHTTP DELETE璇锋眰銆?http.get () 鎵цHTTP GET璇锋眰銆?http.post () 鎵цHTTP POST璇锋眰銆?http.put () 鎵цHTTP PUT璇锋眰銆?http.request () 涓轰换浣旽TTP鏂规硶鎵ц鑷畾涔塇TTP璇锋眰銆?/p>
http.delete () 鎵цHTTP DELETE!#姹傘€傝娉ㄦ剰锛屽苟鍙戣姹備笉鍙楁敮鎸併€?鍙ユ硶 http.delete(urlj headers^ body, callback) 鍙傛暟 -url璇RL鎶撳彇锛屽寘鎷琱ttp://鎴杊ttps://鍓嶇紑 鈥eaders鍙€夌殑闄勫姞澶存枃浠讹紝鍖呮嫭\r\n锛涗篃璁竛il -body韬悗寮犺创;蹇呴』宸茬粡浠ラ€傚綋鐨勬牸寮忕紪鐮侊紝浣嗗彲鑳芥槸绌虹殑 -callback褰撴敹鍒板搷搴旀垨鍙戠敓閿欒鏃惰璋冪敤鐨勫洖璋冨嚱鏁?瀹冭璋冪敤鐨勫弬 鏁?status_code , body 鍜?headers銆傚鏋滃彂鐢熼敊璇紝status_code 鍒欒缃负-1銆?杩斿洖 nil 渚?http.delete(鈥榟ttp://httpbin.org/delete鈥? 鈻營 it 3 鈻?I it 鈻燜unction(code, data) if (code < 0) then print(鈥淗TTP request failed鈥? else print(codej data) end end) http.get () 鎵цHTTPGETiW姹傘€傝娉ㄦ剰锛屽苟鍙戣姹備笉鍙楁敮鎸併€?鍙ユ硶 http.get(urlj headers, callback) 鍙傛暟 -url璇RL鎶撳彇锛屽寘鎷琱ttp://鎴杊ttps://鍓嶇紑 鈥eaders鍙€夌殑闄勫姞澶存枃浠讹紝鍖呮嫭\r\n;涔熻nil 銉籧allback褰撴敹鍒板搷搴旀垨鍙戠敓閿欒鏃惰璋冪敤鐨勫洖璋冨嚱鏁?瀹冭璋冪敤鐨勫弬 鏁?status_code , body 鍜?headers 銆傚鏋滃彂鐢熼敊璇紝status_code 鍒欒缃负-1銆?杩斿洖 nil http.get(鈥渉ttp://httpbin.org/ip"j nil, function(codej data) if (code < 0) then print ('鈥淗TTP request failed鈥? else print(codej data) end end) http.post () 鎵цHTTP POST璇锋眰銆傝娉ㄦ剰锛屽苟鍙戣姹備笉鍙楁敮鎸併€?鍙ユ硶 http.post(urlj headers, body, callback) 鍙傛暟 銉籾rl璇RL鎶撳彇锛屽寘鎷琱ttp://鎴杊ttps://鍓嶇紑 鈥?headers鍙€夌殑闄勫姞澶存枃浠讹紝鍖呮嫭\r\n锛涗篃璁竛il -body韬悗寮犺创;蹇呴』宸茬粡浠ラ€傚綋鐨勬牸寮忕紪鐮侊紝浣嗗彲鑳芥槸绌虹殑 -callback褰撴敹鍒板搷搴旀垨鍙戠敓閿欒鏃惰璋冪敤鐨勫洖璋冨嚱鏁?瀹冭璋冪敤鐨勫弬 鏁?status_code , body 鍜?headers 銆傚鏋滃彂鐢熼敊璇紝status_code 鍒欒缃负-1銆?杩斿洖 nil http.post(鈥榟ttp://httpbin.org/post鈥? 鈥楥ontent-Type: application/json\r\n鈥? 锛寋鈥漢mo鈥濓細nwop Id}, function(code, data) if (code < 0) then print(鈥淗TTP request failed鈥? else print(codej data) end end) http.put () 鎵цHTTP PUT璇锋眰銆傝娉ㄦ剰锛屽苟鍙戣姹備笉鍙楁敮鎸併€?鍙ユ硶 http.put(urlj headers, body, callback) 鍙傛暟 -url璇RL鎶撳彇锛屽寘鎷琱ttp://鎴杊ttps://鍓嶇紑 鈥?headers鍙€夌殑闄勫姞澶存枃浠讹紝鍖呮嫭\r\n;涔熻nil 銉籦odv韬悗寮犺创:蹇呴』宸辩粠浠ヨ瘽褰撶殑鏍煎紡缂栫爜锛屼集鍙兘鏄┖鐨?鈥allback褰撴敹鍒板搷搴旀垨鍙戠敓閿欒鏃惰璋冪敤鏃冲洖璋冨菇鏁?瀹冭璋冪敤鏃冲弬 鏁?status_code , body 鍜?headers銆傚鏋滃彂鐢熼敊璇紝status_code 鍒欒缃负-1銆?杩斿洖 nil 渚?http.put(鈥榟ttp://httpbin.org/put鈥? 鈥楥ontent-Type: text/plain\r\n鈥? 鈥楬ello!\nStay a while, and listen \n鈥? 鈻燜unction(code, data) if (code < 0) then print(鈥淗TTP request failed鈥? else ppint(code> data) end end) http.request () 涓轰换浣旽TTP鏂规硶鎵ц鑷畾涔塇TTP璇锋眰銆傝娉ㄦ剰锛屽苟鍙戣姹備笉鍙楁敮鎸併€?鍙ユ硶 http.request(url, methodheaders^ body, callback) 鍙傛暟 -url璇RL鎶撳彇锛屽寘鎷琱ttp://鎴杊ttps://鍓嶇紑 鈥ethod 瑕佷娇鐢ㄧ殑HTTP鏂规硶锛屼緥濡傗€淕ET鈥? 鈥淗EAD", 鈥淥PTIONS鈥濈瓑 鈥eaders鍙€夌殑闄勫姞澶存枃浠讹紝鍖呮嫭\r\n锛涗篃璁竛il -body韬悗寮犺创;蹇呴』宸茬粡浠ラ€傚綋鐨勬牸寮忕紪鐮侊紝浣嗗彲鑳芥槸绌虹殑 銉籧allback褰撴敹鍒板搷搴旀垨鍙戠敓閿欒鏃惰璋冪敤鐨勫洖璋冨嚱鏁?瀹冭璋冪敤鐨勫弬 鏁?status_code , body 鍜?headers銆傚鏋滃彂鐢熼敊璇紝status_code 鍒欒缃负-1銆?杩斿洖 nil 渚?http.request(鈥渉ttp://httpbin.org鈥? 鈥淗EAD鈥?鈥溾€?鈥溾€? function(code, data) if (code < 0) then print(nHTTP request failed") else print(codej data) end end) HX7U妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?10鏈?9 鏃?Chris Takahashi Chris Takahashi hx711.c 璇ユā鍧楁彁渚涘HX711绉伴噸浼犳劅鍣ㄦ斁澶у櫒/ADC鐨勮闂€侶X711鏄竴娆句究瀹滅殑24浣岮DC,鍏锋湁 鍙紪绋嬬殑128x, 64x鍜?2x澧炵泭銆傜洰鍓嶅彧鏀寔128鍊嶅鐩婄殑閫氶亾A. 娉ㄦ剰锛氳淇濆瓨ROM鏄犲儚绌洪棿锛岄粯璁ゆ儏鍐典笅锛岃妯″潡涓嶄細缂栬瘧鍒板浐浠朵腑銆?hx711.init () 鍒濆鍖杊x711鏃堕挓鍜屾暟鎹殑io寮曡剼銆?hx711.read () 璇诲彇鏁板瓧浼犳劅鍣ˋDC鍊笺€?hx711.init () 鍒濆鍖杊x711鏃堕挓鍜屾暟鎹殑i銆傚紩鑴氥€?鍙ユ硶 hx711,init(clk, data) 鍙傛暟 -elk寮曡剼杩炴帴鍒癶x711鏃堕挓淇″彿 -data寮曡剼杩炴帴鍒癶x711鏁版嵁淇″彿 杩斿洖 nil 渚?鈥揑nitiaLize the hx711 with elk on pin 5 and data on pin 6 hx711.init(5銆?) hx711.read () 璇诲彇鏁板瓧浼犳劅鍣ˋDC鍊笺€?鍙ユ硶 hx711.read(mode) mode ADC妯″紡銆傛鍙傛暟鐩墠琚拷鐣ワ紝骞朵繚鐣欙紝浠ョ‘淇濆悜鍚庡吋瀹癸紝濡傛灉鏀寔棰濆鐨勬ā寮忚娣?鍔犮€傜洰鍓嶅彧鏀寔A @128澧炵泭銆?妯″紡 娓犻亾 鑾峰緱 0 涓€涓?128 杩斿洖 涓€涓暟瀛楋紙24浣嶆湁绗﹀彿鐨凙DC鍊兼墿灞曞埌鏈哄櫒鐨刬nt澶у皬锛?渚?鈥揜ead ch A with 128 gain. raw_data = hx711.read(0) PC妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday i2c.c
i2c.address () 涓轰笅涓€娆′紶杈撹缃瓼C鍦板潃鍜岃/鍐欐ā寮忋€?i2c.read () 璇诲彇鍙彉鏁伴噺瀛楄妭鐨勬暟鎹€?i2c.setup () 鍒濆鍖朏C妯″潡銆?i2c.start () 鍙戦€丗C鍚姩鏉′欢銆?i2c.stop () 鍙戦€丳C鍋滄鏉′欢銆?i2c.write () 灏嗘暟鎹啓鍏C鎬荤嚎銆?/p>
i2c.address () 涓轰笅涓€娆′紶杈撹缃€巆鍦板潃鍜岃/鍐欐ā寮忋€?璇硶 i2c銉籥ddress(id, device_add銆乨irection) 鍙傛暟 銉籭d鎬绘槸0 鈥evice_addr 7浣嶅櫒浠跺湴鍧€锛岃璁颁綇,l2C device_addr浠h〃楂?浣嶏紝鍚庨潰璺焏irection 涓€浣?鈥irection i2c.TRANSMITTER 鐢ㄤ簬涔﹀啓妯″紡锛宨2c. RECEIVER 鐢ㄤ簬闃呰妯″紡 杩斿洖 true濡傛灉鏀跺埌锛宖alse濡傛灉娌℃湁鏀跺埌銆?涔熷彲浠ョ湅鐪?i2c.read () i2c.read () 璇诲彇鍙彉鏁伴噺瀛楄妭鐨勬暟鎹€?i2c.read(idj len) 鍙傛暟 鈥?id鎬绘槸0 -len鏁版嵁瀛楄妭鏁?杩斿洖 string鏀跺埌鐨勬暟鎹?渚?id = 0 sda = 1 scl = 2 鈥搃nitialize i2Cj set pinl as sdOj set pin2 as scL i2c.setup(id, sda銆?scl, i2c.SL0W) 鈥搖ser defined function: read from reg_addr content of function read_reg(dev_addr, reg_addr) i2c 銉?start(id) 12c.address(idj dev_addr> i2c.TRANSMITTER) i2c.write(idj reg_addr) i2c 銉?stop(id) i2c 銉?start(id) i2c.address(id, dev_addr, i2c.RECEIVER) c = i2c.read(idj 1) i2c 銉?stop(id) return c end 鈥揼et content of register 0xAA of device 0x77 reg = read_reg(0x77j 0xAA) print(string.byte(reg)) 涔熷彲浠ョ湅鐪?i2c.write () i2c.setup () 鍒濆鍖朏C妯″潡銆?鍙ユ硶 i2c.setup(idj pinSDA, pinSCL, speed) 鍙傛暟 銉籭d鎬绘槸0 鈥inSDA 1 銆?2, I銆傛寚鏁?鈥inSCL 1 銆?2, IO鎸囨暟 鈥?speed K i2c .SLOW 鍙叉寔 杩斿洖 speed閫夊畾鐨勯€熷害 涔熷彲浠ョ湅鐪?i2c.read () i2c.start () 鍙戦€丗C鍚姩鏉′欢銆?鍙ユ硶 i2c.start(id) 鍙傛暟 id鎬绘槸銆?杩斿洖 nil 涔熷彲浠ョ湅鐪?i2c.read () i2c.stop () 鍙戦€丗C鍋滄鏉′欢銆?鍙ユ硶 i2c.stop(id) 鍙傛暟 id鎬绘槸銆?杩斿洖 nil 涔熷彲浠ョ湅鐪?i2c.read () i2c.write () 灏嗘暟鎹啓鍏?骞绘€荤嚎銆傛暟鎹」鍙互鏄涓暟瀛楋紝瀛楃涓叉垨lua琛ㄣ€?鍙ユ硶 i2c.write(idj datal[, data2[, .銉汇兓> datan]]) 鍙傛暟 鈥?id鎬绘槸0 銉籨ata鏁版嵁鍙互鏄暟瀛楋紝瀛楃涓叉垨lua琛ㄣ€?杩斿洖 number鍐欏叆鐨勫瓧鑺傛暟 渚?i2c.write(0, 鈥渉ello鈥? 鈥渨orld鈥? 涔熷彲浠ョ湅鐪?i2c.read () L3G4200D 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015-04-09 Jason Schmidlapp Jason Schmidlapp !3g4200d.c
璇ユā鍧楁彁渚涘L3G4200D涓夎酱鏁板瓧闄€铻轰华鐨勮闂€?l3g4200d.read () 閲嗘牱浼犳劅鍣ㄥ苟杩斿洖闄€铻轰华杈撳嚭0 l3g4200d.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?!3g4200d.setup () 鍒濆鍖栨ā鍧椼€?/p>
13g4200d.read () 閲嗘牱浼犳劅鍣ㄥ苟杩斿洖闄€铻轰华杈撳嚭銆?鍙ユ硶 13g4200d . read() 杩斿洖 X, Y, Z闄€铻鸿緭鍑?渚?local sdaj scl = 1, 2 i2c.setup(0j sda, scl, i2c.SL0W) 鈥?caLL i2c.setup() onLy once 13g4200d.setup() local x>y,z = 13g4200d.read() print(string.format("X = %d, Y = %d, Z = %d鈥濓紝 x, y, z) 13g4200d.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?銆傛敞鎰?姝ゅ姛鑳藉凡寮冪敤锛屽皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓垹闄ゃ€?3g4200d.setup()鏀逛负浣跨敤銆?鍙ユ硶 13e4200d.initfsda. scl) 銉籹da鏁版嵁寮曡剼 鈥?scl鏃堕挓寮曡剼 杩斿洖 nil 13g4200d.setup () 鍒濆鍖栨ā鍧椼€?鍙ユ硶 13g4200d .setup銆?鍙傛暟 娌℃湁 杩斿洖 nil MCP4725妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017 骞? 鏈?10 鏃?dnc40085 dnc40085 mcp4725.c 璇ユā鍧楁彁渚涘MCP4725 12浣嶆暟妯¤浆鎹㈠櫒鐨勮闂€?!!!閲嶈锛歏DD鏄櫒浠剁殑鐢垫簮寮曡剼銆俈DD寮曡剼鐨勭數鍘嬬敤浣滅數婧愯緭鍏ヤ互鍙奃AC鍙傝€冭緭鍏ャ€備负浜嗚幏 寰楄壇濂界殑DAC鎬ц兘锛孷DD寮曡剼鐨勭數婧愬簲璇ュ敖鍙兘鐨勫共鍑€銆?!!!娉細MCP4725鍣ㄤ欢鍦板潃鍖呭惈鍥涗釜鍥哄畾浣嶏紙1100=鍣ㄤ欢浠g爜锛夊拰涓変釜鍦板潃浣嶏紙A2, A1, AO锛?o A2鍜孉1浣嶅湪鍒堕€犳椂鏄‖杩炵嚎鐨勶紝A0浣嶇敱A0寮曡剼鐨勯€昏緫鐘舵€佸喅瀹氥€侫0寮曡剼鍙互杩炴帴鍒?VDD鎴朧SS,鎴栫敱鏁板瓧閫昏緫鐢靛钩涓诲姩椹卞姩銆傚湴鍧€寮曡剼锛圓0锛夊彲鐢盙PIO涓诲姩椹卞姩锛屼綔涓鸿姱鐗囬€?鎷╋紝鍏佽鍦ㄥ悓涓€鎬荤嚎涓婁娇鐢?涓互涓婄殑鍣ㄤ欢銆?mcp4725.read 锛堬級 鑾峰彇dac瀵勫瓨鍣ㄥ拰EEPROM鐨勫唴瀹广€?mcp4725.write 锛堬級 灏嗛厤缃啓鍏ac瀵勫瓨鍣ㄦ垨dac瀵勫瓨鍣ㄥ拰eeprom銆?mcp4725.read 锛堬級 鑾峰彇dac瀵勫瓨鍣ㄥ拰EEPROM鐨勫唴瀹广€?鍙ユ硶 mcp4725.read({[a0], [al][a2])) 鍙傛暟
杩斿洖 鈥ur_pwrdn褰撳墠鎺夌數閰嶇疆鍊笺€?銉籧ur_val褰撳墠鍊煎瓨鍌ㄥ湪dac瀵勫瓨鍣ㄤ腑銆?鈥eprom_pwrdn鍏抽棴瀛樺偍鍦‥EPROM涓殑閰嶇疆銆?-eeprom_val DAC鍊煎瓨鍌ㄥ湪EEPROM涓€?鈥eprom_state EEPROM鍐欏叆鐘舵€?0 0 EEPROM鍐欏叆涓嶅畬鏁淬€?鈻?1 EEPROM鍐欏叆宸插畬鎴?鈥?por_state涓婄數澶嶄綅鐘舵€侊紱 o 0 MCP4725姝e湪鎵ц澶嶄綅锛屽皻鏈噯澶囧氨缁€?O 1 MCP4725宸叉垚鍔熸墽琛屽浣嶃€?渚?鈥揋et current configuration using default i2c address 0x60(A0=0, Al=0j A2=0). do local ID = 0 local SDA = 6 local SCL = 5 i2c.setup(IDJ SDA, SCL, i2c.SLOW) local cur_pwrdn, cur_val, eeprom_pwrdn, eeprom_val, eeprom_state, por_state = mc| print(鈥淺n Current configuration:\n\tpower down value: 鈥溾€ur_pwrdn鈥︹€漒n\tdac vali print(鈥?Configuration stored in EEPROM:\n\tpower down value: " 鈥eprom_pwrdn鈥?l1\ print(" EEPROM write state: 鈥溾€?eeprom_statel and 鈥淐ompleted鈥?or 鈥渋ncomplete鈥? print(" Power-On-Reset state: "鈥?por_statel and 鈥淐ompleted鈥?or 鈥渋ncomplete鈥?) end 鈥揋et current configuration using defauLt i2c address 0x60(A0=0, Al=0j A2=0). 鈥揟he MCP4725fs address pin(A0) is being driven with gpio 4(pin 2). do local ID = 0 local SDA = 6 local SCL = 5 local mcp4725_chip_sel = 2 i2c.setup(IDJ SDA, SCL, i2c.SLOW) gpio.mode(mcp4725_chip_selj gpio銉籓UTPUT, gpio.PULLUP) gpio.write(mep4725_chip_sel, 1) local cur_pwrdn, cur_val, eeprom_pwrdn, eeprom_val, eeprom_stateJ por_state = mc| gpio.write(mep4725_chip_sel, 0) print(鈥漒n Current configuration:\n\tpower down value: 鈥溾€ur_pwrdn鈥︹€漒n\tdac vali print(" Configuration stored in EEPROM:\n\tpower down value: 鈥溾€eprom_pwrdn鈥︹€漒i print(" EE PROM write state: "鈥?(eeprom_statel and 鈥淐ompleted鈥?or 鈥渋ncomplete鈥?) print(鈥?Power-On-Reset state: "鈥?por_statel and 鈥淐ompleted鈥?or 鈥渋ncomplete鈥?) end 涔熷彲浠ョ湅鐪?銉?i2c.setup() mcp4725.write () 灏嗛厤缃啓鍏ac瀵勫瓨鍣ㄦ垨dac瀵勫瓨鍣ㄥ拰eeprom銆?鍙ユ硶 mcp4725.write(([a0][al][a2], value, [pwrdn], [save]}) -A0鍦板潃浣?.璇ヤ綅鍙敱鐢ㄥ案閫氳繃MCP4725寮曡剼6 锛圓O锛夎繘浠冮厤缃€?锛堥粯璁ゅ€硷細0锛?-A1鍦板潃浣?.璇ヤ綅鍦ㄥ埗閫犺繃绋嬩腑鏄‖杩炵嚎鐨勩€傦紙鏈夋晥鐘舵€侊細銆傛垨1锛?娉ㄦ剰锛氫粠Adafruit璐拱鐨勬ā鍧楀皢姝や綅锛圓1锛夎缃负楂橈紙1锛夈€?A2鍦板潃浣?.璇ヤ綅鍦ㄥ埗閫犺繃绋嬩腑鏄‖杩炵嚎鐨勩€傦紙鏈夋晥鐘舵€侊細銆傛垨1锛?value鐢ㄤ簬閰嶇疆DAC 锛堝拰EEPROM锛夌殑鍊笺€傦紙鑼冨洿锛?-4095锛?鈥?pwrdn璁剧疆鍏虫満浣嶃€?mcp4725.PWRDN_N0NE 鍚敤MCP4725杈撳嚭銆?mcp4725.PWRDN_lK MCP4725杈撳嚭琚姝? mcp4725.PWRDN_100K 绂佺敤 MCP4725杈撳嚭, mcp4725.PWRDN_500K 绂佹 MCP4725杈撳嚭, 灏唒wrdn鍜宒ac鍊间繚瀛樺埌EEPROM銆傦紙鏁板€煎湪鍔犵數鎴栧浣嶆湡闂村姞杞姐€傦級 true淇濆瓨閰嶇疆鍒癊EPROMo false涓嶈灏嗛厤缃繚瀛樺埌EEPROMo 锛堥粯璁わ級 杩斿洖 闆?渚?鈥揝et current configuration using default i2c address 0x60(A0=0j Al=0j A2=0). do local ID = 0 local SDA = 6 local SCL = 5 i2c.setup(ID, SDA, SCL, i2c.SL0W) mcp4725.write({value=2048}) end 鈥揝et current configuration and save to EEPROM using defouLt i2c address 0x60(Ai do local ID = 0 local SDA = 6 local SCL = 5 i2c.setup(ID, SDA, SCL, i2c.SL0W) mcp4725.write({value=2048, save=true)) end 鈥揝et current configuration using defauLt i2c address 0x6Q(A0=0, Al=0j A2=0). 鈥揟he MCP4725rs address pin(A0) is being driven with gpio 4(pin 2). do local ID = 0 local SDA = 6 local SCL = 5 local mcp4725_chip_sel = 2 i2c.setup(IDJ SDA, SCL, i2c.SL0W) gpio.mode(mep4725_chip_selJ gpio.OUTPUT, gpio.PULLUP) gpio.write(mep4725_chip_selJ 1) mcp4725.read({A0=lj value}) gpio.write(mcp4725_chip_sel, 0) end ()dn^9s-Dzi 銉?鏂囨。銆嬭嫳璇€濇ā鍧椔籑DNS mDNS妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?4鏃?鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?mdns.c 澶氭挱DNS鐢ㄤ綔Bonjour/Zeroconf鐨勪竴閮ㄥ垎銆傝繖鍏佽绯荤粺璇嗗埆浠栦滑鑷繁浠ュ強浠栦滑鍦ㄥ眬鍩熺綉涓婃彁 渚涚殑鏈嶅姟銆傜劧鍚庡鎴峰氨鍙互鍙戠幇杩欎簺绯荤粺骞惰繛鎺ュ埌瀹冧滑銆?mdns.register () 娉ㄥ唽涓绘満鍚嶅苟鍚姩mDNS鏈嶅姟銆?mdnsxlose () 鍏抽棴mDNS鏈嶅姟銆?mdns.register () 娉ㄥ唽涓绘満鍚嶅苟鍚姩mDNS鏈嶅姟銆傚鏋滄湇鍔″凡缁忓湪杩愯锛岄偅涔堝皢浼氱敤鏂扮殑鍙傛暟閲嶅惎銆?鍙ユ硶 mdns.register(hostname attributes]) 鍙傛暟 銉籬ostname姝よ澶囩殑涓绘満鍚嶃€傚瓧姣嶆暟瀛楀瓧绗︽槸鏈€濂界殑銆?鈥ttributes 涓€涓彲閫夌殑閫夐」琛ㄣ€傞挜鍖欏繀椤诲叏閮ㄦ槸瀛楃涓层€?璇ttributes鍖呭惈涓ょ被灞炴€?閭d簺鏈夌壒瀹氱殑鍚嶇О锛屼互鍙婇偅浜涚壒瀹氱殑鏈嶅姟銆俁FC 6763瀹氫箟浜嗗 浣曞皢棰濆鐨勶紝鐗瑰畾浜庢湇鍔$殑灞炴€х紪鐮佸埌DNS涓€備竴涓緥瀛愭槸锛屽鏋滆澶囨敮鎸佹墦鍗帮紝鍒欏彲浠ュ皢 闃熷垪鍚嶇О鎸囧畾涓洪檮鍔犲睘鎬с€傝妯″潡鏈€澶氭敮鎸?0涓繖鏍风殑灞炴€с€?鍏蜂綋鍚嶇О鏄細 銉籶ort鏈嶅姟鐨勭鍙e彿銆傞粯璁ゅ€兼槸80銆?鈥ervice鏈嶅姟鐨勫悕绉般€傞粯璁ゅ€兼槸鈥檋ttp鈥欍€?-description鎻忚堪鏈嶅姟鐨勭畝鐭煭璇?涓嶈秴杩?3涓瓧绗?銆傞粯璁ゆ槸涓绘満鍚嶃€?杩斿洖 nil 閿欒 鍙傛暟楠岃瘉鏈熼棿鍙兘浼氫骇鐢熷悇绉嶉敊璇€傚湪璋冪敤鐨勬椂鍊欙紝NodeMCU蹇呴』鏈変竴涓狪P鍦板潃锛屽惁鍒欎細寮?鍙戦敊璇€?mdns.register(鈥渇ishtank鈥? {hardware=鈥楴odeMCU鈥檥) dns-sd鍦∣SX涓婁娇鐢紝浣犲彲浠ョ湅鍒癴ishtank.local鎻愪緵_http._tcp鏈嶅姟銆傛偍涔熷彲浠ョ洿 鎺ユ祻瑙堝埌fishtank.local銆傚湪Safari涓紝鎮ㄥ彲浠ュ皢鎵€鏈塵DNS缃戦〉浣滀负涔︾鑿滃崟鐨勪竴閮ㄥ垎掳 mdns.register(鈥渇ishtank鈥? { description = "Top Fishtank鈥濓紝service=,http"j port=80j mdns.close () 鍏抽棴mDNS鏈嶅姟銆傝繖閫氬父涓嶆槸蹇呴渶鐨勩€?鍙ユ硶 mdns.close() 鍙傛暟 娌℃湁 杩斿洖 nil 鏂囨。銆嬭嫳璇€濇ā鍧椔籑QTT MQTT妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?3鏃?Tuan PM, Stephen Robinson Vowstar mqtt.c
瀹㈡埛绔伒瀹圡QTT鍗忚鐨?.1.1鐗堟湰銆傜‘淇濇偍鐨勪唬鐞嗘敮鎸?.1.1鐗堬紝骞朵笖宸叉纭厤缃€傚鎴风涓庤繍琛?MQTT3.1鐨勪唬鐞嗕笉鍏煎銆?mqtt.Client () 鍒涘缓涓€涓狹QTT瀹㈡埛绔€?mqtt.client锛氬叧闂?) 鍏抽棴涓庣粡绾汉鐨勮繛鎺ャ€?mqttclient锛?connect ()鐨?杩炴帴鍒扮敱缁欏畾涓绘満锛岀鍙e拰瀹夊叏閫夐」鎸囧畾鐨勪唬鐞嗐€?mqtt.client锛?LWT () 璁剧疆鏈€鍚庣殑閬楀槺鍜岄仐鍢憋紙鍙€夛級o mqtt.client锛氫笂() 娉ㄥ唽浜嬩欢鐨勫洖璋冨嚱鏁般€?mqttxlient锛氬彂甯?) 鍙戝竷娑堟伅銆?mqtt.client锛氳闃咃紙锛?璁㈤槄涓€涓垨鍑犱釜涓婚銆?mqtt.client锛氶€€璁?) 鍙栨秷璁㈤槄涓€涓垨澶氫釜涓婚銆?/p>
mqtt.Client 锛堬級 鍒涘缓涓€涓狹QTT瀹㈡埛绔€?鍙ユ硶 mqtt.Client(clientidj keepalive], username, password, cleansession]) 鍙傛暟 . clientid 瀹㈡埛绔疘D keepalive 淇濇寔绉?. username 鐢ㄦ埛鍚?password 鐢ㄦ埛瀵嗙爜 . cleansession 0/1 涓?false / true銆傞粯璁ゅ€兼槸 1 ( true )銆?/p>
杩斿洖 MQTT瀹㈡埛绔?渚?/p>
鈥?init mqtt cLient without Logins鈥?keepaLive timer 120s m = mqtt.Client(鈥渃lientid"4 120) 鈥搃nit mqtt cLient with Logins^ m = mqtt.Client(鈥渃lientid"12銆傦紝 鈥搒etup Last h/iLL and Testament 鈥揃roker wiLL pubLish a message 鈥搕o topic 鈥?Lwt鈥?if cLient don鈥檛 send keepaLive packet m:lwt(,/lwt,J 鈥渙ffline鈥? 0, 0) m:on(鈥渃onnect"s function(client) print (鈥渃onnected鈥? end) m:on(鈥渙ffline"s function(client) print (鈥渙ffline鈥? end) 鈥?on pubLish message receive event m:on(鈥渕essage"s function(client^ topic, data) print(topic 鈥︹€?鈥? if data ~= nil then print(data) end end) 鈥揻or TLS: m:connect(鈥?92.168.11.118鈥橿 secure-portj 1) m:connect(鈥?92.168.11.118鈥? 1883, 0, function(client) print(鈥渃onnected鈥? 鈥揅aLLing subscribe/pubLish onLy makes sense once the connection 鈥搘as successfuLLy estabLished. You can do that either here in the 鈥? connect * caLLback or you need to otherwise make sure the 鈥揷onnection was estabLished (e.g. tracking connection status or in --m^nC鈥檆onnecf鈥檍 function)). 鈥搒ubscribe topic with qos = 0 client:subscribe(鈥?topic鈥? 0, function(client) print(鈥渟ubscribe success鈥? end) --pubLish a message with data = heLLOj QoS = 0, retain = 0 client:publish(鈥?topic鈥? "hello"0, 0, function(client) print(鈥渟ent鈥? end) end, function(clientj reason) print(鈥渇ailed reason:鈥濄兓銉?reason) end) m:close(); 鈥搚ou can caLL m:connect again MQTT瀹㈡埛绔?mqtt.client锛氬叧闂紙锛?鍏抽棴涓庣粡绾汉鐨勮繛鎺ャ€?鍙ユ硶 mqtt:close() 鍙傛暟 娌℃湁 杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 mqtt.client锛?connect ()鐨?杩炴帴鍒扮敱缁欏畾涓绘満锛岀鍙e拰瀹夊叏閫夐」鎸囧畾鐨勪唬鐞嗐€?鍙ユ硶 mqtt:connect(host[j port[secure], autoreconnect]]][, function(client)[function(client, reasor 鍙傛暟 -host涓绘満锛屽煙鎴朓P (瀛楃涓? -port缁忕邯浜虹鍙?鍙风爜)锛岄粯璁?883 鈥ecure 0/1 for false / true ,榛樿涓?.娉ㄦ剰net妯″潡涓褰曠殑绾︽潫鏉′欢銆?鈥utoreconnect 0/1 涓?false / true ,榛樿涓?.姝ら€夐」宸插純鐢ㄣ€?鈥unction(client)褰撹繛鎺ュ缓绔嬫椂鐨勫洖璋冨嚱鏁?鈥unctiontclient, reason)褰撴棤娉曞缓绔嬭繛鎺ユ椂鍥炶皟鍑芥暟銆備笉搴旇璋冪敤杩涗竴姝ョ殑鍥炶皟銆?杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 绗旇 涓嶈浣跨敤autoreconnect銆傝鎴戦噸澶嶄竴閬嶏紝涓嶈浣跨敤autoreconnect銆傛偍搴旇鏄庣‘鍦颁负鎮ㄧ殑搴旂敤 绋嬪簭澶勭悊閿欒銆傜壒鍒槸锛宑leansession涓婇潰鐨勯粯璁ゅ€兼槸true ,鎵€浠ュ綋杩炴帴鍥犱换浣曞師鍥犱涪澶辨椂锛?鎵€鏈夌殑璁㈤槄閮借閿€姣併€?涓轰簡鑾峰緱涓€鑷寸殑杩炴帴锛屽鐞嗛敊璇洖璋冧腑鐨勯敊璇€備緥濡傦細 function handle_mqtt_error(clientreason) tmr.create():alarm(10 * 1000j tmr.ALARM_SINGLE> do_mqtt_connect) end function do_mqtt_connect() mqtt:connect(鈥渟erver鈥? function(client) print(鈥渃onnected鈥? end, handle_mqtt_error) end 鍦ㄧ幇瀹炰腑锛岃繛鎺ョ殑鍔熻兘搴旇鍋氫竴浜涙湁鐢ㄧ殑浜嬫儏锛?杩欐槸autoreconnect鍔熻兘濡備綍(鎴栦笉鍙互)宸ヤ綔鐨勬弿杩般€?浠€涔堟椂鍊檃utoreconnect璁剧疆锛屽綋杩炴帴鏂紑鏃讹紝杩炴帴灏嗚閲嶆柊寤虹珛銆傚皢涓嶄細缁欏嚭閿欒鎸囩ず (浣嗗鏋渃leansession灞炲疄锛屾墍鏈夎闃呭彲鑳戒細涓㈠け)銆備絾鏄紝濡傛灉绗竴涓繛鎺ュけ璐ワ紝鍒欎笉浼?杩涜閲嶆柊杩炴帴灏濊瘯锛屽苟閫氳繃鍥炶皟(濡傛灉鏈?鍙戦€侀敊璇俊鍙枫€傚鏋滃鎴风杩炴帴鍒版湇鍔″櫒锛屽苟涓斿搷 搴斿叾MQTT杩炴帴璇锋眰锛岃繑鍥炰竴涓緢濂界殑鍝嶅簲鏁版嵁鍖咃紝鍒欒涓虹涓€涓繛鎺ユ垚鍔熴€傝繖鎰忓懗鐫€(渚?濡?鐢ㄦ埛鍚嶅拰瀵嗙爜鏄纭殑銆?杩炴帴澶辫触鍥炶皟鍘熷洜浠g爜锛?涓嶅彉 鍊?鎻忚堪 mqtt.CONN_FAIL_SERVER_NOT_FOUND 宸?娌℃湁浠g悊渚﹀惉鎸囧畾鐨処P鍦板潃鍜岀鍙?mqtt.CONN_FAIL_NOT_A_CONNACK_MSG -4 缁忕邯浜虹殑鍥炲簲涓嶆槸鍗忚瑕佹眰鐨凜ON NACK mqtt.CONN_FAIL_DNS -3 DNS鏌绘壘澶辫触 mqtt.CONN_FAIL_TIMEOUT_RECEIVING -2 瓒呮椂绛夊緟缁忕邯浜虹殑CONNACK mqtt鈥ONN_FAIL_TIMEOUT_SENDING -1 瓒呮椂灏濊瘯鍙戦€佽繛鎺ユ秷鎭?mqtt.CONNACK_ACCEPTED 0 娌℃湁閿欒銆傛敞鎰忥細杩欎笉浼氳Е鍙戝け璐ュ洖璋冦€?mqtt, CONNACK_REFUSED_PROTOCOL_VER 1 缁忕邯浜轰笉鏄?.1.1 MQTT缁忕邯浜恒€?mqtt.CONNACK_REFUSED_ID_REJECTED 2 鎸囧畾鐨凜lientID琚唬鐞嗘嫆缁濄€?(瑙?mqtt.Client())
涓嶅彉 鍊?鎻忚堪 mqtt.CONNACK_REFUSED_SERVER_UNAVAILABLE 鏈嶅姟鍣ㄤ笉鍙敤銆?mqtt.CONNACK_REFUSED_BAD_USER_OR_PASS 缁忕邯浜烘嫆缁濇寚瀹氱殑鐢ㄦ埛鍚嶆垨瀵嗙爜銆?mqtt.CONNACK_REFUSED_NOT_AUTHORIZED 鐢ㄦ埛鍚嶆湭琚巿鏉冦€?mqtt.client锛?LWT 锛堬級 璁剧疆鏈€鍚庣殑閬楀槺鍜岄仐鍢憋紙鍙€夛級銆傚鏋滃鎴风涓嶅彂閫乲eepalive鏁版嵁鍖咃紝浠g悊灏嗗彂甯僸os = 0, retain = 0, data銆?offline"娑堟伅鍒颁富棰? Iwt"銆?鍙ユ硶 mqtt:lwt锛坱opic, message], qos[, retain]]锛?鍙傛暟 銉籺opic灏嗚鍙戝竷鐨勪富棰橈紙瀛楃涓诧級 銉籱essage瑕佸彂甯冪殑娑堟伅锛堢紦鍐插尯鎴栧瓧绗︿覆锛?銉籷os QoS绾у埆锛岄粯璁や负0 鈥?retain淇濈暀鏍囧織锛岄粯璁や负0 杩斿洖 nil mqtt.client锛氫笂锛堬級 娉ㄥ唽浜嬩欢鐨勫洖璋冨嚱鏁般€?鍙ユ硶 mqtt:on锛坋ventj function锛坈lient[j topic], message]]锛夛級 鍙傛暟 銉籩vent鍙互鏄?杩炴帴鈥濓紝鈥滅暀瑷€鈥濇垨鈥滅绾? 鈥?function锛坈lient[, topicf, message]]锛夊洖璋冨嚱鏁般€傜涓€涓弬鏁版槸瀹㈡埛绔€傚鏋滀簨浠舵槸鈥滄秷 鎭€濓紝鍒欑浜屽拰绗笁鍙傛暟琚帴鏀惰瘽棰樺拰娑堟伅锛堝瓧绗︿覆锛夈€?杩斿洖 nil mqtt.client锛氬彂甯冿紙锛?鍙戝竷娑堟伅銆?鍙ユ硶 mqtt:publish(topicj payload, qos, retain], function(client)]) 鍙傛暟 -topic瑕佸彂甯冪殑涓婚锛堜富棰樺瓧绗︿覆锛?銉籱essage瑕佸彂甯冪殑娑堟伅锛堢紦鍐插尯鎴栧瓧绗︿覆锛?銉籷os QoS绛夌骇 鈥?retain淇濈暀鍥芥棗
鈥unction(client)鍙庡埌PUBACK鍙Е鍙嬪彛銆嶈繎鏃冲洖璋冦€傛豹鎬狅細褰撳娆¤皟鐢╬ublish O W锛屽畾涔?鐨勬渶鍚庝竴涓洖璋冨嚱鏁板皢琚皟鐢ㄧ敤浜嶢LL鍙戝竷鍛戒护銆?杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 mqtt.client锛氳闃?) 璁㈤槄涓€涓垨鍑犱釜涓婚銆?鍙ユ硶 mqtt:subscribe(topic, qos[function(client)]) mqtt:subscribe(table[, function(client)]) 鍙傛暟 鈥opic 鈥斾釜涓婚瀛楃涓?鈥os QoS璁㈤槄绾у埆锛岄粯璁や负0 鈥able qos锛屽鐨勬暟缁勬潵璁㈤槄 鈥unction(client)璁㈤槄鎴愬姛鏃惰Е鍙戝彲閫夌殑鍥炶皟銆傛敞鎰忥細褰撳娆¤皟鐢╯ubscribe ()鏃讹紝灏嗕负鎵€ 鏈夎闃呭懡浠よ皟鐢ㄥ畾涔夌殑鏈€鍚庝竴涓洖璋冨嚱鏁般€?杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 渚?鈥搒ubscribe topic with qos = 0 m:subscribe(鈥?topic鈥?0, function(conn) print(鈥渟ubscribe success鈥? end) 鈥搊r subscribe muLtipLe topic (topic/銆? qos = 0; topic/1, qos = 1; topic2 涓?qos = 2) m:subscribe({[鈥渢opic/0鈥漖=0,[鈥渢opic/1鈥漖=1^topic2=2)function(conn) print(鈥渟ubscribe si 鉂惰鍛?subscribe濡傛灉鎮ㄦ兂鍚屾椂璁㈤槄澶氫釜涓婚锛屽垯涓嶈澶氭璋冪敤锛岃€屽簲浣跨敤涓婁緥涓樉绀虹殑澶氫釜涓婚璇?娉曘€?mqtt.client锛氶€€璁?) 鍙栨秷璁㈤槄涓€涓垨澶氫釜涓婚銆?鍙ユ硶 mqtt:unsubscribe(topic[, function(client)]) mqtt:unsubscribe(table[, function(client)]) 鍙傛暟 , topic 涓€涓富棰樺瓧绗︿覆 銉籺able 鈥滀富棰橈紝浠讳綍瀵光€濈殑鏁扮粍鎴愬鏉ュ彇娑堣闃?銉籪unction(ciient)鍙栨秷璁㈤槄鎴愬姛鏃惰Е鍙戝彲閫夌殑鍥炶皟銆傛敞鎰?褰撳娆¤皟鐢╱nsubscribe ()鏃讹紝 灏嗕細涓烘墍鏈夊彇娑堣闃呭懡浠よ皟鐢ㄥ畾涔夌殑鏈€鍚庝竴涓洖璋冨嚱鏁般€?杩斿洖 true false鍚﹀垯灏辨垚鍔熶簡 渚?鈥搖nsubscribe topic m:unsubscribe(鈥?topic鈥? function(conn) print(鈥渦nsubscribe success鈥? end) 鈥搊r unsubscribe muLtipLe topic (topic/0; topic/1; topic2) m;unsubscribe(([鈥渢opic/0鈥漖=0J[鈥渢opic/1鈥漖=0,topic2=鈥渁nything鈥潁j function(conn) print("u 鍑€妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday 鍑ゅ嚢 net.c TLS鎿嶄綔宸茬Щ鑷砊LS妯″潡 甯搁噺 鍦ㄥ叾浠栧嚱鏁颁腑浣跨敤鐨勫父閲忥細net銆?netcreateConnection () 鍒涘缓涓€涓鎴风銆?netcreateServer () 鍒涘缓涓€涓湇鍔″櫒銆?netxreateUDPSocket () 鍒涘缓涓€涓猆DP濂楁帴瀛椼€?netmulticastJoin () 鍔犲叆缁勬挱缁?netmulticastLeave () 绂诲紑缁勬挱缁勩€?netserver锛氬叧闂紙锛?鍏抽棴鏈嶅姟鍣ㄣ€?netserver锛氬惉锛堬級 浠嶪P鍦板潃渚﹀惉绔彛銆?netserver锛?getaddr () 杩斿洖鏈嶅姟鍣ㄦ湰鍦板湴鍧€/绔彛銆?netsocket锛氬叧闂紙锛?鍏抽棴濂楁帴瀛椼€?netsocket锛?connect () 鐨?杩炴帴鍒拌繙绋嬫湇鍔″櫒銆?netsocket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 netsocket锛?getPeer () 宸?妫€绱㈣繙绋嬪绔殑绔彛鍜孖P銆?netsocket锛?getaddr () 妫€绱㈡湰鍦扮鍙e拰濂楁帴瀛楃殑IP銆?netsocket锛?淇濇寔 () 閫氳繃鍙戝嚭闃绘TCP鎺ユ敹鍔熻兘鐨勮姹傛潵闄愬埗鏁版嵁鎺ユ敹銆?netsocket锛氫笂锛堬級 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?netsocket锛氬彂閫?) 灏嗘暟鎹彂閫佸埌杩滅▼瀵圭瓑銆?netsocket锛?TTL () 鏇存敼鎴栨绱㈠鎺ュ瓧涓婄殑鐢熷瓨鏃堕棿鍊笺€?netsocket锛氬彇娑堜繚鐣欙紙锛?閫氳繃鎾ら攢鍏堝墠鐨勪繚鎸侊紙锛夋潵瑙i櫎瀵筎CP鎺ユ敹鏁版嵁鐨勯樆姝€?netudpsocket锛氬叧闂紙锛?鍏抽棴UDP濂楁帴瀛椼€?/p>
netudpsocket锛?鍚?) 浠嶪P鍦板潃渚﹀惉绔彛銆?netudpsocket锛?涓?) 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?netudpsocket锛氬彂閫?) 灏嗘暟鎹彂閫佸埌鐗瑰畾鐨勮繙绋嬪绛夈€?netudpsocket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 netudpsocket锛?getaddr () 妫€绱㈡湰鍦扮鍙e拰濂楁帴瀛楃殑IP銆?netudpsocket锛?TTL () 鏇存敼鎴栨绱㈠鎺ュ瓧涓婄殑鐢熷瓨鏃堕棿鍊笺€?netdns.getdnsserver () 鑾峰彇鐢ㄤ簬瑙f瀽涓绘満鍚嶇殑DNS鏈嶅姟鍣ㄧ殑IP鍦板潃銆?net.dns.resolve () 灏嗕富鏈哄悕瑙f瀽涓篒P鍦板潃銆?net.dns.setdnsserver () 璁剧疆鐢ㄤ簬瑙f瀽涓绘満鍚嶇殑DNS鏈嶅姟鍣ㄧ殑IP銆?/p>
甯搁噺 甯搁噺鐢ㄤ簬鍏朵粬鍔熻兘锛歯et.TCP , net.UDP net.createConnection () 鍒涘缓涓€涓鎴风銆?鍙ユ硶 net銉籧reateConnection([type[, secure]]) 鍙傛暟 鈥?type net.TCP (榛樿)鎴?net.UDP -secure 1琛ㄧず鍔犲瘑锛?琛ㄧず鏅€?榛樿) 銆傛敞鎰?杩欏皢鍦ㄥ嵆灏嗗彂甯冪殑鐗堟湰涓彂鐢熷彉鍖栵紝浠ヤ究net.createConnection濮嬬粓鍒涘缓鏈姞瀵嗙殑TCP 杩炴帴銆?鏈夋病鏈夎繖鏍风殑浜嬫儏浣滀负UDP杩炴帴锛屽洜涓篣DP杩炴帴灏戙€傚洜姝や笉闇€瑕佽繛鎺ype鍙傛暟銆傚浜?UDP浣跨敤net.createUDPSocket ()鏉ヤ唬鏇裤€傝鍒涘缓瀹夊叏杩炴帴锛岃鏀逛负浣跨敤 tls.createConnection ()銆?杩斿洖 銉籪or net.tcp -net.socket瀛愭ā鍧?銉籪or net.UDP - net.udpsocket瀛愭ā鍧?銉诲浜?net.TCP 鏈?secure - tls.socket瀛愭ā鍧?net,cpeateConnection(net銉籘CP銆?) 涔熷彲浠ョ湅鐪?net.cneateServer() , net.cneateUDPSocket() , tls.createConnection() net.createServer () 鍒涘缓涓€涓湇鍔″櫒銆?鍙ユ硶 net銉籧reateServer([type[timeout]]) 鍙傛暟 銉籺ype net.TCP (榛樿)鎴?net.UDP -timeout瀵逛簬TCP鏈嶅姟鍣紝瓒呮椂鏃堕棿涓?銆?8800绉掞紝榛樿30绉?闈炴椿鍔ㄥ鎴风鏂紑杩?鎺? 銆傛敞鎰?璇ype鍙傛暟灏嗗湪鍗冲皢鍙戝竷鐨勭増鏈腑鍒犻櫎锛屼互渚縩et.createServer濮嬬粓鍒涘缓涓€涓熀浜?TCP鐨勬湇鍔″櫒銆傚浜嶶DP浣跨敤net.createllDPSocket ()鏉ヤ唬鏇裤€?杩斿洖 銉籪or net.tcp -netserver瀛愭ā鍧?銉籪or net.udp - net.udpsocket瀛愭ā鍧?渚?net.createServer(net.TCP, 30) 鈥?30s timeout 涔熷彲浠ョ湅鐪?net 銉?createConnection() , net.createUDPSocket() net.createUDPSocket () 鍒涘缓涓€涓猆DP濂楁帴瀛椼€?鍙ユ硶 net . createUDPSocket() 鍙傛暟 娌℃湁 杩斿洖 net.udpsocket 浜庢ā鍧?涔熷彲浠ョ湅鐪?net 銉?createConnection() net.multicastJoin () 鍔犲叆缁勬挱缁?鍙ユ硶 net.multicastJoin(if_ip4 multicast_ip) 鍙傛暟 -if_ip鍖呭惈鎺ュ彛ip鐨勫瓧绗︿覆鍔犲叆缁勬挱缁勩€傗€渁ny鈥濇垨鈥溾€濆奖鍝嶆墍鏈夋帴鍙c€?鈥?multicast_ip鐨勫洟闃熷姞鍏?杩斿洖 nil net.multicastLeave () 绂诲紑缁勬挱缁勩€?鍙ユ硶 net.multicastLeave(if_ipj multicast_ip) 鍙傛暟 -if_ip鍖呭惈鎺ュ彛ip鐨勫瓧绗︿覆绂诲紑缁勬挱缁勩€?any鈥濇垨鈥?褰卞搷鎵€鏈夋帴鍙c€?銉籱ulticast_ip璇ョ粍绂诲紑 杩斿洖 nil net.server 妯″潡 net.server锛氬叧闂?) 鍏抽棴鏈嶅姟鍣ㄣ€?鍙ユ硶 net.server.close() 娌℃湁 杩斿洖 nil 渚?鈥揷reates a server sv = net.createServer(net.TCP, 30) 鈥揹oses the server sv:close() 涔熷彲浠ョ湅鐪?net.createServer() net.server锛氬惉() 浠巌p鍦板潃渚﹀惉绔彛銆?鍙ユ硶 net.server.listen([port][ip],function(net.socket)) 鍙傛暟 鈥ort绔彛鍙凤紝鍙互鐪佺暐(闅忔満绔彛灏嗚閫変腑) -ip IP鍦板潃瀛楃涓诧紝鍙互鐪佺暐 鈥unction (net. socket)鍥炶皟鍑芥暟锛屽鏋滆繛鎺ユ垚鍔熷垱寤猴紝鍒欎紶閫掔粰璋冪敤鑰呭嚱鏁?杩斿洖 nil 渚?鈥搒erver Listens on 8銆傘€?if data receivedj print data to consoLe and send "heLLo --30s time out for a inactive client sv = net.cneateServer(net.TCP, 30) function receiver(sckj data) print(data) sck:close() end if sv then sv:listen(80> function(conn) conn:on("receive"j receiver) conn:send(鈥渉ello world鈥? end) end 涔熷彲浠ョ湅鐪?net.createServer() net.server锛?getaddr () 杩斿洖鏈嶅姟鍣ㄦ湰鍦板湴鍧€/绔彛銆?鍙ユ硶 net.server.getaddr() 鍙傛暟 娌℃湁 杩斿洖 port , ip (鎴栬€卬il, nil濡傛灉涓嶅惉) 涔熷彲浠ョ湅鐪?net.server:listen() net.socket 妯″潡 net.socket锛氬叧闂?) 鍏抽棴濂楁帴瀛椼€?鍙ユ硶 close() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?net.createServer() net.socket锛?connect () 鐨?杩炴帴鍒拌繙绋嬫湇鍔″櫒銆?鍙ユ硶 connect(port, ip|domain) 鈥ort 绔彛鍙?鈥p IP鍦板潃鎴栧煙鍚嶅瓧绗︿覆 杩斿洖 nil 涔熷彲浠ョ湅鐪?net 銉?socket:on() net.socket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 鍙ユ硶 dns(domainj function(net.socketip)) 鍙傛暟 鈥?domain 鍩熷悕 銉籪unction(net.socket, ip)鍥炶皟鍑芥暟銆傜涓€涓弬鏁版槸濂楁帴瀛楋紝绗簩涓弬鏁版槸IP鍦板潃浣滀负 瀛楃涓层€?杩斿洖 nil sk = net.createConnection(net.TCP, 0) sk:dns(鈥渨ww.nodemcu.com鈥? function(conn, ip) print(ip) end) sk = nil 涔熷彲浠ョ湅鐪?net . createServer() net.socket锛?getPeer () H 妫€绱㈣繙绋嬪绔殑绔彛鍜宨p銆?鍙ユ硶 getpeer() 鍙傛暟 娌℃湁 杩斿洖 port 锛?ip (鎴栬€卬il, nil濡傛灉娌℃湁杩炴帴) net.socket锛?getaddr () 妫€绱㈡湰鍦扮鍙e拰濂楁帴瀛楃殑ip銆?鍙ユ硶 getaddr() 鍙傛暟 娌℃湁 杩斿洖 port , ip (鎴栬€卬il, nil濡傛灉娌℃湁杩炴帴) net.socket锛氫繚鎸?) 閫氳繃鍙戝嚭闃绘TCP鎺ユ敹鍔熻兘鐨勮姹傛潵闄愬埗鏁版嵁鎺ユ敹銆傛璇锋眰涓嶇珛鍗崇敓鏁堬紝Espressif寤鸿鍦ㄤ繚鐣?5 1460瀛楄妭鐨勫唴瀛樻椂璋冪敤瀹冦€?鍙ユ硶 hold() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?net , socket:unhold() net.socket锛?涓?) 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?鍙ユ硶 on(eventj function()) 鍙傛暟 銉籩vent瀛楃涓诧紝鍙互鏄€滆繛鎺?锛?閲嶆柊杩炴帴鈥濓紝鈥滄柇寮€鈥濓紝鈥滄帴鏀垛€濇垨鈥滃彂閫佲€?鈥?function (net. socket [ j string])鍥炶皟鍑芥暟銆傚彲浠?nil 鍒犻櫎鍥炶皟銆?鍥炶皟鏃冲紵涓€涓弬鏁版槸浼氭帴瀛椼€?銉诲鏋滀簨浠舵槸鈥滄帴鏀垛€濓紝鍒欑浜屼釜鍙傛暟鏄互瀛楃涓插舰寮忔帴鏀剁殑鏁版嵁銆?-濡傛灉浜嬩欢鏄€滄柇寮€"鎴栤€滈噸鏂拌繛鎺モ€濓紝鍒欑浜屼釜鍙傛暟鏄敊璇唬鐮併€?濡傛灉鎸囧畾浜嗛噸鏂拌繛鎺ヤ簨浠讹紝鍒欐柇寮€鍙帴鏀垛€滄甯稿叧闂€濅簨浠躲€?鍚﹀垯锛屾墍鏈夎繛鎺ラ敊璇?姝e父鍏抽棴)浼犻€掑埌鏂紑杩炴帴浜嬩欢銆?杩斿洖 nil 渚?srv = net.createConnection(net.TCP, 0) srv:on("receive"function(sckj c) print漏 end) 鈥?Wait for connection before sending. srv:on("connection"j function(sck> c) 鈥?Connection: close1 rather than 'Connection: keep-aLive1 to have server --initiate a close of the connection after final response (frees memory --earlier here)https://tooLs.ietf.org/htmL/rfc7230#section-6.6 sck:send("GET /get HTTP/1.l\r\nHost: httpbin.org\r\nConnection: close\r\nAccep- end) srv:connect(80,鈥渉ttpbin.org鈥? 鉂舵敞鎰?璇eceive浜嬩欢琚Е鍙戞瘡涓綉缁滃抚锛佸洜姝わ紝濡傛灉鍙戦€佸埌璁惧鐨勬暟鎹秴杩囦簡 1460瀛楄妭(浠?浠ュお缃戝抚澶у皬瀵煎嚭)锛屽畠灏嗕細瑙﹀彂涓嶆涓€娆°€傚彲鑳借繕鏈夊叾浠栨儏鍐典笅浼犲叆鐨勬暟鎹湪澶氫釜甯т腑 鍒嗗壊(渚嬪HTTP POST multipart/form-data )銆傛偍闇€瑕佹墜鍔ㄧ紦鍐叉暟鎹苟鎵惧埌纭畾鏄惁 鏀跺埌鎵€鏈夋暟鎹殑鏂规硶銆?local buffer = nil srv:on("receive"function(sckJ c) if buffer == nil then buffer = c else buffer = buffer 鈥?c end end) 鈥搕hrottLing could be implemented using socket:hoLd() 鈥揺xampLe: https://github.com/nodemcu/nodemcu-firmware/bLob/moster/Lua_exampLesJ 涔熷彲浠ョ湅鐪?鈥et.createServer() 鈥et . socket:hold() net.socket锛氬彂閫?) 灏嗘暟鎹彂閫佸埌杩滅▼瀵圭瓑銆?send(string[> function(sent)]) sck:send(data, fnA) 鍦ㄥ姛鑳戒笂绛夊悓浜?sck:send(data) sck:on(,lsent11, fnA)銆?鍙傛暟 鈥tring瀛楃涓蹭腑鐨勬暟鎹皢琚彂閫佸埌鏈嶅姟鍣?鈥unction(sent)鐢ㄤ簬鍙戦€佸瓧绗︿覆鐨勫洖璋冨嚱鏁?杩斿洖 nil 娉ㄦ剰 send()鐢变簬SDK灏嗙綉缁滆姹傝涓哄崟鐙殑浠诲姟锛屽洜姝や笉鑳戒繚璇佽繛缁娆¤皟鐢?閫氬父涓嶄細)銆?鐩稿弽锛岃璁㈤槄濂楁帴瀛椾笂鐨?鍙戦€?浜嬩欢锛屽苟鍦ㄨ鍥炶皟涓彂閫佸叾浠栨暟鎹?鎴栧叧闂?銆傝鎯呰鍙傞槄# 730o 渚?srv = net.createServer(net.TCP) function receiver(sckj data) local response = {} 鈥搃f you鈥檙e sending back HTML over HTTP yourLL want something Like this instei --Local response = {"HTTP/1.0 200 OK\r\nServer: NodeMCU on ESP8266\r\nContent response[#response + 1] = 鈥渓ots of data鈥?response[#response + 1] = 鈥渆ven more data鈥?response[#response + 1] = 鈥渆.g. content read from a file鈥?鈥搒ends and removes the first eLement from the 'response 1 tabLe local function send(localsocket) if #response > 0 then localsocket:send(table , remove(response, 1)) else localsocket:close() response = nil end end 鈥搕riggers the send() function again once the first chunk of data was sent sck:on(鈥渟ent鈥? send) send(sck) end srv:listen(80j function(conn) conn:on(鈥渞eceive鈥? receiver) end) 濡傛灉浣犳病鏈夋垨鑰呬笉鑳戒竴鐩翠繚瀛樹綘鍦ㄥ唴瀛樹腑鍙戝洖鐨勬墍鏈夋暟鎹紙璁颁綇杩檙esponse鏄竴涓仛 鍚堬級锛屼綘鍙互浣跨敤鏄惧紡鐨勫洖璋冿紝鑰屼笉鏄儚杩欐牱寤虹珛涓€涓〃锛?sck:send(header, function() local datal = "some large chunk of dynamically loaded data sck:send(datalj function() local data2 = 鈥渆ven more dynamically loaded data鈥?sck:send(data2j function(sk) sk:close() end) end) end) 涔熷彲浠ョ湅鐪?net . socket:on() net.socket锛?TTL () 鏇存敼鎴栨绱㈠鎺ュ瓧涓婄殑鐢熷瓨鏃堕棿鍊笺€?鍙ユ硶 鍙傛暟 -tti (鍙€?鏂扮殑鐢熷瓨鏃堕棿鍊?杩斿洖 褰撳墠/鏂扮殑tti鍊?渚?sk = net.createConnection(net.TCP, 0) sk:connect(80, 鈥?92.168.1.1鈥? sk:ttl(l) 鈥?restrict frames to singLe subnet 涔熷彲浠ョ湅鐪?net 銉?createConnection() net.socket锛氬彇娑堜繚鐣?) 閫氳繃鎾ら攢鍓嶉潰鐨勬柟娉曟潵瑙i櫎瀵筎CP鎺ユ敹鏁版嵁鐨勯樆姝oid()銆?鍙ユ硶 unhold() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?net . socket:hold() netudpsocket 妯″潡 璇疯浣忥紝涓嶵CP鐩告瘮锛孶DP鏄棤杩炴帴鐨勩€傚洜姝わ紝瀵逛簬杩欎釜妯″潡涓殑TCP/UDP鍑芥暟锛屽瓨鍦ㄤ竴涓?灏忕殑浣嗘槸鑷劧鐨勪笉鍖归厤銆傝櫧鐒朵綘浼氫负TCP璋冪敤netcreateConnection (),浣嗘槸瀹冩槸 net.createllDPSocket () 鈻?鍏朵粬鍊煎緱娉ㄦ剰鐨勬槸锛?-UDP濂楁帴瀛楁病鏈夎listen鍑芥暟鐨勮繛鎺ュ洖璋冦€?-UDP濂楁帴瀛楁病鏈塩onnect鍑芥暟銆傝繙绋婭P鍜岀鍙e洜姝ら渶瑕佸湪涓畾涔塻end()銆?銉籙DP濂楁帴瀛楃殑receive鍥炶皟data鍙傛暟鍚庢敹鍒扮鍙?IP銆?net.udpsocket锛?鍏抽棴() 鍏抽棴UDP濂楁帴瀛椼€?璇硶鍜屽姛鑳界浉鍚宯et.socket:close()銆?net.udpsocket锛氬惉() 浠巌p鍦板潃渚﹀惉绔彛銆?璇硶鍜屽姛鑳界被浼糿et.server:listen()锛屼絾娌℃湁鎻愪緵鍥炶皟鍙傛暟銆?net.udpsocket锛氫笂() 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?璇硶鍜屽姛鑳界被浼间簬net.socket:on()銆備絾鏄紝鍙湁鈥滄帴鏀垛€濓紝"鍙戦€佲€濆拰鈥渄ns鈥濇槸鏀寔鐨勪簨浠躲€?銆傛敞鎰?璇eceive鍥炶皟鎺ユ敹port鍜宨p涔嬪悗鐨刣ata璇存硶銆?net.udpsocket锛?鍙戦€?() 灏嗘暟鎹彂閫佸埌鐗瑰畾鐨勮繙绋嬪绛夈€?鍙ユ硶 send(portip, data) 鈥ort杩滅▼濂楁帴瀛楃憺鍙?鈥p杩滅▼濂楁帴瀛桰P 鈥ata鏈夋晥杞借嵎鍙戦€?杩斿洖 nil 渚?udpSocket = net.c reateUDPSocket() udpSocket:listen(5000) udpSocket:on("receive"function(s, data, portip) print(string.format("received 鈥?s鈥?from %s:%d"4 data, ip, port)) s:send(port4 ip> 鈥渆cho:鈥濄兓銉?data) end) port, ip = udpSocket:getaddr() print(string.format("local UDP socket address / port: %s:%d鈥? ip, port)) 鍦?nix绯荤粺涓婏紝鐒跺悗鍙互閫氳繃鍙戝竷鏉ユ祴璇?echo -n 鈥渇oo鈥?| nc -wl -u 5000 net.udpsocket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 璇硶鍜屽姛鑳界浉鍚宯et.socket:dns()銆?net.udpsocket锛?getaddr () 妫€绱㈡湰鍦扮鍙e拰濂楁帴瀛楃殑I p銆?璇硶鍜屽姛鑳界浉鍚宯et .socket: getaddr () 鈻?net.udpsocket锛?TTL () 鏇存敼鎴栨绱㈠鎺ュ瓧涓婄殑鐢熷瓨鏃堕棿鍊笺€?璇硶鍜屽姛鑳界浉鍚宯et .socket :ttl()銆?net.dns 妯″潡 net.dns.getdnsserver () 鑾峰彇鐢ㄤ簬瑙f瀽涓绘満鍚嶇殑DNS鏈嶅姟鍣ㄧ殑IP鍦板潃銆?鍙ユ硶 net.dns.getdnsserver(dns_index)
鍙傛暟 dns_index鑾峰彇鍝釜DNS鏈嶅姟鍣?鑼冨洿0銆?) 杩斿洖 DNS鏈嶅姟鍣ㄧ殑IP鍦板潃(瀛楃涓? 渚?print(net.dns.getdnsserver(0)) 鈥?208.67.222.222 print(net.dns.getdnsserver(l)) 鈥?nil
print(net.dns.getdnsserver(0)) 鈥?8.8.8.8 print(net.dns.getdnsserver(1)) 鈥?192.168.1.252 涔熷彲浠ョ湅鐪?net.dns:setdnsserver() net.dns.resolve () 灏嗕富鏈哄悕瑙f瀽涓篒P鍦板潃銆備笉闇€瑕佸儚net. socket.dns()銆?鍙ユ硶 net.dns.resolve(host, function(sk, ip)) 鍙傛暟 銉籬ost涓绘満鍚嶆潵瑙e喅 鈥?function(sk, ip)鍚嶇О瑙f瀽鍚庤皟鐢ㄧ殑鍥炶皟銆俿k鎬绘槸 杩斿洖 nil net.dns.resolve(鈥渨ww.google.com鈥?鍗僽nction(sk, ip) if (ip == nil) then print(鈥淒NS fail!鈥? else print(ip) end end) 涔熷彲浠ョ湅鐪?net.dns.setdnsserver () 璁剧疆鐢ㄤ簬瑙f瀽涓绘満鍚嶇殑DNS鏈嶅姟鍣ㄧ殑IP銆傞粯璁わ細resolverl.opendns.com (208.67.222.222)銆?/p>
鏂囨。銆嬭嫳璇€濇ā鍧椼€嬭妭鐐?鑺傜偣妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday node.c
鑺傜偣妯″潡鎻愪緵瀵圭郴缁熺骇鍔熻兘鐨勮闂紝濡傜潯鐪狅紝閲嶅惎浠ュ強鍚勭淇℃伅鍜孖D銆?node.bootreason () 杩斿洖鍚姩鍘熷洜鍜屾墿灞曢噸缃俊鎭€?node.chipid () 杩斿洖ESP鑺墖ID銆?node.compile () 灏嗕竴涓狶ua鏂囨湰鏂囦欢缂栬瘧鎴怢ua瀛楄妭鐮侊紝骞朵繚瀛樹负銆?node.dsleep () 杩涘叆娣卞害鐫$湢妯″紡锛岃秴鏃堕啋鏉ャ€?nodeflashid () 杩斿洖闂瓨鑺墖ID銆?node.flashsize () 浠ュ瓧鑺備负鍗曚綅杩斿洖闂瓨鑺墖澶у皬銆?nodeheap () 浠ュ瓧鑺備负鍗曚綅杩斿洖褰撳墠鍙敤鐨勫爢澶у皬銆?nodeJnfo () 杩斿洖NodeMCU鐗堟湰锛宑hipid, flashid,闂厜澶у皬锛岄棯鍏夋ā寮忥紝闂?鍏夌伅閫熷害銆?nodeinput () 鍚慙ua瑙i噴鍣ㄦ彁浜や竴涓瓧绗︿覆銆?nodeoutput () 灏哃ua瑙i噴鍣ㄨ緭鍑洪噸瀹氬悜鍒板洖璋冨嚱鏁般€?node.readvdd33 ()-涓嶆帹 鑽愪娇鐢?杞Щ鍒癮dc銆?node.restart () 閲嶆柊鍚姩鑺墖銆?noderestore () node.setcpufreq () 鏇存敼宸ヤ綔鐨凜PU棰戠巼銆?nodesleep () 灏哊odeMCU缃簬杞诲害鐫$湢妯″紡浠ュ噺灏戠數娴佹秷鑰椼€?node.stripdebug () 鎺у埗鑺傜偣鏈熼棿淇濆瓨鐨勮皟璇曚俊鎭殑鏁伴噺銆?nodeosprint () 鎺у埗鏄惁鎵撳嵃Espressif SDK鐨勮皟璇曡緭鍑恒€?noderandom () 杩欏氨鍍忔暟瀛︿竴鏍枫€?node.egc.setmode () 璁剧疆绱ф€ュ瀮鍦炬敹闆嗗櫒妯″紡銆?/p>
node.bootreason 锛堬級 杩斿洖鍚姩鍘熷洜鍜屾墿灞曢噸缃俊鎭€?杩斿洖鐨勭涓€涓€兼槸鍘熷浠g爜锛岃€屼笉鏄渶杩慡DK涓紩鍏ョ殑鏂扳€滈噸缃俊鎭€濅唬鐮併€備环鍊艰鏄細 -1,寮€鏈?-2,閲嶇疆锛堣蒋浠讹紵锛?-3,閫氳繃澶嶄綅寮曡剼杩涜纭欢澶嶄綅 -4, WDTM浣嶏紙鐪嬮棬鐙楄秴鏃讹級 杩斿洖鐨勭浜屼釜鍊兼槸鎵╁睍鐨勫浣嶅師鍥犮€備环鍊艰鏄細 鈥?0,寮€鏈?-1,纭欢鐪嬮棬鐙楀浣?-2,寮傚父澶嶄綅 -3,杞欢鐪嬮棬鐙楀浣?-4,杞欢閲嶅惎 -5,浠庢繁搴︾潯鐪犱腑閱掓潵 銉?,澶栭儴澶嶄綅 涓€鑸潵璇达紝鎵╁睍閲嶇疆鍘熷洜鍙栦唬浜嗗師濮嬬爜銆傚師濮嬩唬鐮佷粎淇濈暀涓哄悜鍚庡吋瀹广€傚浜庢柊搴旂敤绋嬪簭锛屽己 鐑堝缓璁娇鐢ㄦ墿灞曢噸缃師鍥犮€?鍦ㄥ浣嶅師鍥? 锛堝紓甯稿浣嶏級鐨勬儏鍐典笅锛岃繑鍥炲寘鍚穿婧冧俊鎭殑闄勫姞鍊笺€傝繖浜涗緷娆℃槸EXCCAUSE, EPCI, EPC2, EPC3, EXCVADDR鍜孌EPC銆?鍙ユ硶 node.bootreason() 鍙傛暟 娌℃湁 杩斿洖 rawcodej reason [, exccause^ epcl^ epc2, epc3, excvaddr3 depc ] 渚?_j reset_reason = node.bootreason() if reset_reason == 0 then print(鈥淧ower UP!鈥? end node.chipid () 杩斿洖ESP鑺墖ID銆?node.chipid() 鍙傛暟 娌℃湁 杩斿洖 鑺墖ID (缂栧彿) node.compile () 灏哃ua鏂囨湰鏂囦欢缂栬瘧涓篖ua瀛楄妭鐮侊紝骞跺皢鍏朵繚瀛樹负銆峜鏂囦欢銆?鍙ユ硶 node.compile(鈥渇ile.lua鈥? 鍙傛暟 filename Lua鏂囨湰鏂囦欢鐨勫悕绉?杩斿洖 nil 渚?f ile. open (鈥渉ello. lua,/,w+鈥? file.writeline([[print(鈥渉ello nodemcu鈥?]]) file.writeline([[print(node.heap())]]) file.close() node.compile(鈥渉ello.lua鈥? dofileChello.lua") dofileChello.lc") node.dsleep () 杩涘叆娣卞害鐫$湢妯″紡锛岃秴鏃堕啋鏉ャ€?鏈€澶х潯鐪犳椂闂翠负4294967295US,绾?1鍒嗛挓銆傝繖鏄竴涓猄DK闄愬埗銆?016骞?鏈?鏃ヤ箣鍓嶇殑鍥轰欢 鐨勬渶闀垮仠鐣欐椂闂寸害涓?5鍒嗛挓銆?銆傝鍛?姝ゅ姛鑳藉彧鑳藉湪esp8266PIN32 (RST)鍜孭IN8 (XPD_DCDC鍙堝悕GPIO16)杩炴帴鍦ㄤ竴璧风殑 鎯呭喌涓嬩娇鐢ㄣ€備娇鐢ㄧ潯鐪?0)灏嗕笉浼氳缃敜閱掑畾鏃跺櫒锛屽皢GPIO杩炴帴鍒板紩鑴歊ST,鑺墖灏嗛€?杩囧紩鑴歊ST鐨勪笅闄嶆部鍞ら啋銆?鍙ユ硶 node.dsleep(us, option, instant) -us鏁板瓙锛堟暣鏁帮級鎴杗il浠ュ井鏉负鍗曚綅鏃崇潯鐪犳椂闂淬€傚鏋淯S == 0 ,瀹冨皢姘疯繙鐫$湢銆傚 鏋渦s == nil ,涓嶄細璁剧疆鐫$湢鏃堕棿銆?-option鏁板瓧锛堟暣鏁帮級鎴杗il o濡傛灉nil瀹冨皢浣跨敤鏈€鍚庣殑娲诲姩璁剧疆浣滀负榛樿閫夐」銆?銆?, init鏁版嵁瀛楄妭108鏄湁浠峰€肩殑 0 >0, init鏁版嵁瀛楄妭108鏄棤浠峰€肩殑 o 0, RF_CAL鏄惁鍦ㄦ繁搴︾潯鐪犲敜閱掍箣鍚庡彇鍐充簬鍒濆鍖栨暟鎹瓧鑺?08 掳 1, RF_CAL娣卞害鐫¢啋鍚庯紝浼氭湁澶х數娴?掳 2,娣卞害鐫¢啋鍚庢病鏈塕F.CAL,鍙湁灏忕數娴?鈻?4,娣卞害鐫$湢鍞ら啋鍚庣鐢≧F,灏卞儚璋冨埗瑙h皟鍣ㄧ潯鐪犱竴鏍凤紝浼氭湁鏈€灏忕殑鐢垫祦 -instant鏁板瓧锛堟暣鏁帮級鎴杗il銆傚鏋滃瓨鍦ㄤ笖闈為浂锛屽垯鍦ㄨ繘鍏ユ繁搴︾潯鐪犱箣鍓嶄笉瑕佷娇鐢ㄦ甯?鐨勫闄愭椂闂淬€傝繖鏄竴涓緢澶х▼搴︿笂娌℃湁璁板綍鐨勫姛鑳斤紝鍙槸鍦‥spressif鐨勪綆鍔熻€楄В鍐虫柟妗堟枃 妗o紙绗?.5绔狅級涓畝鍗曟彁鍙娿€?杩斿洖 nil 渚?鈥揹o nothing node.dsleep() 鈥搒Leep 銆僺 node.dsleep(1000000) 鈥搒et sLeep optionj then sleep ps node.dsleep(1000000j 4) 鈥搒et sLeep option only node.dsleep(nil4) 涔熷彲浠ョ湅鐪?鈥ifi.suspend() 鈥ifi.resume() 鈥ode.sleep() node.flashid 锛堬級 杩斿洖闂瓨鑺墖ID銆?鍙ユ硶 node.flashid锛堬級 鍙傛暟 娌℃湁 杩斿洖 闂厜ID 锛堟暟瀛楋級 node.flashsize () 浠ュ崜鑺備负鍗曞緟鏉垮悓KI鍦ㄨ姱鐗囧ぇ鍒€銆?鍦‵SP-19绛?MR娆婂瀮鍗?鏉垮悓鎸囩殝41943n4 = 4C9AKR. node.flashsize() 鍙傛暟 娌℃湁 杩斿洖 闂瓨澶у皬锛堝瓧鑺傦級锛堟暣鏁帮級 node.heap 锛堬級 浠ュ瓧鑺備负鍗曚綅杩斿洖褰撳墠鍙敤鐨勫爢澶у皬銆傝娉ㄦ剰锛岀敱浜庡垎娈碉紝姝ゅぇ灏忕殑瀹為檯鍒嗛厤鍙兘涓嶅彲鑳姐€?鍙ユ硶 node.heap锛堬級 鍙傛暟 娌℃湁 杩斿洖 浠ュ瓧鑺備负鍗曚綅鐨勭郴缁熷爢澶у皬锛堟暟瀛楋級 node.info 锛堬級 杩斿洖NodeMCU鐗堟湰锛宑hipid, flashid,闂厜澶у皬锛岄棯鍏夋ā寮忥紝闂厜鐏€熷害銆?鍙ユ硶 node.info锛堬級 鍙傛暟 娌℃湁 杩斿洖 鈥a jorVer 锛堟暟锛?鈥inorVer 锛堟暟锛?鈥evVer 锛堟暟锛?鈥hipid 锛堟暟锛?鈥lashid 锛堟暟锛?鈥lashsize 锛堟暟锛?鈥lashmode 锛堟暟锛?鈥lashspeed 锛堟暟锛?majorVer, minorVer, devVerchipid, flashid3 flashsizej flashmode, flashspeed = i print(鈥淣odeMCU 鈥溾€ajorVer鈥︹€?鈥濃€inorVer鈥︹€?鈥濃€evVer) node.input () 鍚慙ua瑙i噴鍣ㄦ彁浜や竴涓瓧绗︿覆銆傜被浼间簬pcall(loadstring(str)),浣嗘病鏈夊崟琛岄檺鍒躲€?鉂舵敞鎰?杩欎釜鍑芥暟鍙湁鍦ㄤ粠鍥炶皟涓皟鐢ㄦ椂鎵嶆湁鏁堟灉銆傜洿鎺ュ湪鎺у埗鍙颁笂浣跨敤瀹冧笉璧蜂綔鐢╫ 鍙ユ硶 node.input(str) 鍙傛暟 str Lua澶у潡 杩斿洖 skionCreceive", function(conn, payload) node.input(payload) end) 涔熷彲浠ョ湅鐪?node.output() node.output () 灏哃ua瑙i噴鍣ㄨ緭鍑洪噸瀹氬悜鍒板洖璋冨嚱鏁般€備篃鍙互灏嗗叾鎵撳嵃鍒颁覆琛屾帶鍒跺彴銆?鉂惰鍛?涓嶈涓嶈瘯鍥緋rint()鎴栬鍙慙ua瑙i噴浠庡洖璋冨嚱鏁颁腑浜х敓杈撳嚭銆傝繖鏍峰仛浼氬鑷存棤闄愰€掑綊锛屽苟 瀵艰嚧鐪嬮棬鐙楄Е鍙戦噸鍚€?鍙ユ硶 node.output(function(str)serial_debug) 鍙傛暟 鈥utput_fn(str) 涓€涓嚱鏁版帴鍙楁瘡涓緭鍑轰负Str,骞跺彲浠ュ皢杈撳嚭鍙戦€佸埌涓€涓鎺ュ瓧(鎴栬€呬竴 涓枃浠?銆?鈥erial_debug 1杈撳嚭涔熸樉75鍦ㄤ覆琛屻€?锛氭病鏈変覆琛岃緭鍑恒€?杩斿洖 nil function tonet(str) sk:send(str) end node.output(tonet1) 鈥?seriaL aLso get the Lua output. 鈥揳 simpLe teLnet server s=net.cneateServer(net.TCP) s:listen(2323,function漏 con_std = c function s_output(str) if(con_std^=nil) then con_std:send(str) end end node.output(s_output, 0) 鈥?re-direct output to function s_ouput. c:on(nreceiveHjfunction(Cj1) node.input(l) 鈥?works Like pcaLL(Loadstring(L)) but support muL end) c :on(鈥渄isconnection鈥橽function漏 con_std = nil node.output(nil) 鈥?un-regist the redirect output function, output i end) end) 涔熷彲浠ョ湅鐪?node.input() node.readvdd33 ()-涓嶆帹鑽愪娇鐢?绉诲姩鍒?adc.readvdd33()銆?node.restart () 閲嶆柊鍚姩鑺墖銆?鍙ユ硶 node.restart() 鍙傛暟 娌℃湁 杩斿洖 nil node.restore () 浣跨敤SDK鍑芥暟灏嗙郴缁熼厤缃仮澶嶄负榛樿鍊約ystem_restore(),鍦ㄦ枃妗d腑瀵规杩涜浜嗘弿杩帮細 閲嶇疆涓嬪垪API鐨勯粯璁よ 缃細 wifi_station_set_auto_connect , wifi_set_phy_mode , wifi_softap_set_config 鐩稿叧鐨勶紝wifi_station_set_config鐩稿叧鐨勶紝wifi_set_opmode浠ュ強閫氳繃璁板綍鍙楀奖鍝?浜虹殑淇℃伅 #define AP_CACHE銆?鍙ユ硶 node.restore() 鍙傛暟 娌℃湁 杩斿洖 nil 渚?node, restore銆?node.restart() 鈥?ensure the restored settings take effect node.setcpufreq () 鏇存敼宸ヤ綔鐨凜PU棰戠巼銆?鍙ユ硶 node.setcpufreq(speed) 鍙傛暟 speed 甯告暟鈥滆妭鐐?CPU80MHZ"鎴栤€滆妭鐐?CPU160MHZ鈥?杩斿洖 鐩爣CPU棰戠巼(鏁伴噺) 渚?node.setcpufreq(node.CPU80MHZ) node.sleep () 灏哊odeMCU缃簬杞诲害鐫$湢妯″紡浠ュ噺灏戠數娴佹秷鑰椼€?-濡傛灉wifi鎸傝捣锛孨odeMCU涓嶈兘杩涘叆杞诲害鐫$湢妯″紡銆?-鎵€鏈夋椿鍔ㄧ殑瀹氭椂鍣ㄥ皢琚殏鍋滐紝鐒跺悗鍦∟odeMCU浠庣潯鐪犵姸鎬佸敜閱掓椂鎭㈠銆?-褰揘odeMCU浠庣潯鐪犱腑閱掔背鏃讹紝浠讳己鍏堝墠鏅冲仠鏃冲畾鏃跺櫒閮藉皢鎭㈠銆?鍙ユ硶 node.sleep锛堬經wake_gpio[, duration^ int_type, resume_cb, preserve_mode]锝濓級 鍙傛暟 銉籨uration鐫$湢鎸佺画鏃堕棿浠ュ井绉掞紙|JS锛変负鍗曚綅銆傚鏋溿€傛寚瀹氫簡鐫$湢鎸佺画鏃堕棿锛屾殏鍋滃皢鏄?涓嶇‘瀹氱殑锛堣寖鍥达細0鎴?0000-2684354543锛堛€傦細 4锛?28.000454锛夛級 -wake.pin 1-12,寮曡剼杩炴帴鍞ら啋涓柇銆傝娉ㄦ剰锛屽紩鑴? 锛圙PIO 16锛変笉鏀寔涓柇銆?銉诲鏋滅潯鐪犳椂闂翠笉纭畾锛屽垯wake_pin蹇呴』鎸囧畾 鈥㈣鍙傝€僄PIO module鏇村鍏充簬pin map鐨勪俊鎭€?銉籭nt_type鎮ㄦ兂瑕佸敜閱掔殑涓柇绫诲瀷銆傦紙鍙€夛紝榛樿锛歯ode.INT_LOW 锛?-鏈夋晥鐨勪腑鏂ā寮忥細 銉籲ode.INT_UP涓婂崌鐨勪紭鍔?銉籲ode.INT_DOWN涓嬮檷鐨勮竟缂?銉籲ode.INT_BOTH 涓よ竟 銉籲ode.INT_LOW褰虫皭绾?銉籲ode.INT_HIGH 楂樻按骞?-resume_cb褰揥iFi浠庢殏鍋滅姸鎬佸敜閱掓椂鎵ц鍥炲彨銆傦紙鍙€夌殑锛?銉籶reserve_mode閫氳繃鑺傜偣浼戠湢鏉ヤ繚鎸佸綋鍓嶇殑WiFi妯″紡銆傦紙鍙€夛紝榛樿锛歵rue锛?銉诲鏋滀负true,鍒欏湪NodeMCU鎭㈠鏃讹紝Station鍜孲tationAP妯″紡灏嗚嚜鍔ㄩ噸鏂拌繛鎺ュ埌鍏堝墠閰嶇疆 鐨勬帴鍏ョ偣銆?-濡傛灉涓篺alse,鍒欎涪寮僕iFi妯″紡骞剁寮€NodeMCU wifi.NULL_MODE銆俉iFi妯″紡灏嗗湪閲嶅惎鏃?鎭㈠鍒板師濮嬫ā寮忋€?杩斿洖 nil
鈥揚ut NodeMCU in Light sleep mode indefiniteLy with resume caLLback and waPe inti cfg={} cfg.wake_pin=3 cfg.resume_cb=function() print(鈥淲iFi resume鈥? end node.sleep(cfg) 鈥揚ut NodeMCU in Light sleep mode with interruptj resume caLLback and discard Mil cfg={} cfg銉粀ake_pin=3 --GPIO0 cfg.resume_cb=function() print(鈥淲iFi resume鈥? end cfg.preserve_mode=false node.sleep(cfg) 鈥揚ut NodeMCU in Light sLeep mode for cfg={} cfg.duration=1010001000 cfg.resume_cb=function() print("WiFi node.sleep(cfg) 涔熷彲浠ョ湅鐪?鈥ifi.suspend() 鈥ifi.resume() 鈥ode.dsleep() node.stripdebug () 鎺у埗杩囩▼涓繚瀛樼殑璋冭瘯淇℃伅鐨勬暟閲弉ode.compile(),骞跺厑璁镐粠宸辩紪璇戠殑Lua浠g爜涓垹闄よ皟璇?淇℃伅銆?鍙帹鑽愮粰楂樼骇鐢ㄦ埛锛孨odeMCU鐨勯粯璁ゅ€煎嚑涔庨€傜敤浜庢墍鏈夌敤渚嬨€?鍙ユ硶 node.stripdebug([level[, function]]) 鍙傛暟 鈥evel O 1,涓嶈涓㈠純璋冭瘯淇℃伅 銆?,涓㈠純Local鍜孶pvalue璋冭瘯淇℃伅 鈻?3,涓㈠純Local, Upvalue鍜宭ine-number璋冭瘯淇℃伅 鈥unction 涓€涓紪璇戠殑鍑芥暟琚墺绂绘瘡涓猻etfenv闄や簡0鏄笉鍏佽鐨勩€?濡傛灉娌℃湁缁欏嚭鍙傛暟锛屽垯杩斿洖褰撳墠鐨勯粯璁よ缃€傚鏋滅渷鐣ュ嚱鏁帮紝杩欐槸鏈潵缂栬瘧鐨勯粯璁よ缃€傚嚱 鏁板弬鏁颁娇鐢ㄤ笌for鐩稿悓鐨勮鍒檚etfenvO銆?杩斿洖 濡傛灉璋冪敤娌℃湁鍙傛暟锛屽垯杩斿洖褰撳墠鐨勭骇鍒缃€傚惁鍒欙紝nil杩斿洖銆?渚?node.stripdebug(3) node.compile(鈥榖igstuff.lua鈥? 涔熷彲浠ョ湅鐪?node.compile() node.osprint () 鎺у埗鏄惁鎵撳嵃EspressifSDK鐨勮皟璇曡緭鍑恒€傝娉ㄦ剰锛屽彧鏈夊浐浠舵槸鍦ㄥ畾涔変簡 DEVELOPMENT.TOOLS鐨勬儏鍐典笅鎵嶅彲鐢ㄣ€?鍙ユ硶 node.osprint(enabled) 鍙傛暟 鈥?enabled杩欐槸瑕佷箞true鍚敤鎵撳嵃锛岃涔坒alse绂佺敤瀹冦€傞粯璁ゆ槸false銆?杩斿洖 娌℃湁 渚?node.osprint(true) node.random () 闄や簡瀹冧娇鐢ㄤ粠ESP8266纭欢娲剧敓鐨勭湡姝g殑闅忔満鏁颁箣澶栵紝鍏惰涓轰笌math.random鐩镐技銆傚畠杩斿洖鎵€ 闇€鑼冨洿鍐呯殑鍧囧寑鍒嗗竷鐨勬暟瀛椼€傚畠涔熼渶瑕佹敞鎰忔纭殑澶ц寖鍥淬€?瀹冨彲浠ラ€氳繃涓夌鏂瑰紡鏉ヨ皟鐢ㄣ€傚湪NodeMCU鐨勬诞鐐规瀯寤轰腑娌℃湁鍙傛暟锛屽畠浼氳繑鍥炰竴涓湪鍖洪棿 [0,1)涓叿鏈夊潎鍖€鍒嗗竷鐨勯殢鏈哄疄鏁般€傚綋浠呯敤涓€涓弬鏁拌皟鐢ㄦ暣鏁皀鏃讹紝瀹冭繑鍥炰竴涓暣鏁伴殢鏈烘暟x, 浣垮緱i<=x<=n銆備緥濡傦紝浣犲彲浠ラ殢鏈烘ā鎷熸浜$殑缁撴灉(6)-鏈€鍚庯紝鍙互鐢ㄤ袱涓暣鏁板弬鏁癐鍜寀 鏉ヨ皟鐢ㄩ殢鏈哄嚱鏁帮紝寰楀埌涓€涓吉闅忔満鏁存暟x,浣垮緱|<=x<=u銆?鍙ユ硶 node.random() node.random(n) node.random(lJ u) 鍙傛暟 -n鍙互杩斿洖鐨勪笉鍚屾暣鏁板€肩殑鏁伴噺-鍦?鍖呭惈)鑼冨洿鍐?鈥?n 銉?鑼冨洿鐨勪笅闄?-u鑼冨洿鐨勪笂闄?杩斿洖 鏆楀拰鏂板湪娲诲綋鐨勮尮:鐢倝涓€璇锋敞闊虫爠褰栨柊鈥㈠舰婧€娆㈡柤淇哄湪鏁曞皻鎰氬缓鍑虹増鏇癈L 渚?print ("I rolled a"j node.random(6)) node.egc 妯″潡 node.egc.setmode () 璁剧疆绱ф€ュ瀮鍦炬敹闆嗗櫒妯″紡銆侲GC鐧界毊涔︽彁渚涘叧浜嶦GC鐨勬洿澶氳缁嗕俊鎭€?鍙ユ硶 node.egc銉籹etmode(mode, [param]) 鍙傛暟 鈥ode 銆俷ode.egc.NOT_ACTlVE EGC涓嶆椿鍔紝鍦ㄤ綆鍐呭瓨鎯呭喌涓嬩笉浼氬己鍒舵敹闆嗗懆鏈?銆俷ode.egc.ON_ALLOC_FAILURE灏濊瘯鍒嗛厤涓€涓柊鐨勫唴瀛樺潡锛屽苟鍦ㄥ垎閰嶅け璐ユ椂杩愯鍨冨溇鍥?鏀跺櫒銆傚鏋滆繍琛屽瀮鍦炬恫闆嗗櫒鍚庡垎閰嶅け璐ワ紝鍒欏垎閰嶅櫒灏嗚繑鍥為敊璇€?銆俷ode. egc.ON_MEM_LIMIT褰揕ua鑴氭湰浣跨敤鐨勫唴瀛樿秴鍑轰笂闄愭椂杩愯鍨冨溇鍥炴敹鍣╨imit銆?濡傛灉杩愯鍨冨溇[鏀甸泦钀悗浠嶇劧鏃犳硶婊¤冻涓婇檺锛屽垯鍒嗛厤鍣ㄥ皢杩斿洖閿欒銆?o node.egc.ALWAYS鍦ㄦ瘡娆″垎閰嶅唴瀛樹箣鍓嶈繍琛屽瀮鍦惧洖鏀跺櫒銆傚鏋滆繍琛屽瀮鍦炬敹闆嗗櫒鍚庡垎閰?澶辫触锛屽垯鍒嗛厤鍣ㄥ皢杩斿洖閿欒銆傝繖绉嶆ā寮忓湪鑺傜渷鍐呭瓨鏂归潰闈炲父楂樻晥锛屼絾涔熸槸鏈€鎱㈢殑銆?鈥evel鍦ㄨ繖绉嶆儏鍐典笅 node.egc.ON_MEM_LIMIT , 杩欐寚瀹氫簡鍐呭瓨闄愬埗銆?杩斿洖 nil 渚?node.egc.setmode(node.egc.ALWAYS^ 4096) 鈥?This is the default setting at startup, node.egc.setmode(node.egc.ON_ALLOC_FAILURE) 鈥?This is the fastest activeEGC mode. node.task 妯″潡 node.task.post () 鍚敤涓€涓狶ua鍥炶皟鎴栦换鍔℃潵鍙戝竷鍙︿竴涓换鍔¤姹傘€傝娉ㄦ剰锛屾牴鎹ず渚嬶紝鍙互鍦ㄤ换浣曚换鍔′腑鍙戝竷 澶氫釜浠诲姟锛屼絾濮嬬粓棣栧厛鍙戦€佹渶楂樹紭鍏堢骇銆?濡傛灉浠诲姟闃熷垪宸叉弧锛屽垯浼氬紩鍙戦槦鍒楁弧閿欒銆?鍙ユ硶 node.task.post([task_priority]j function) 鏂囨。銆嬭嫳璇?妯″潡銆媜w (1-Wire) l銉籛ire妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday ow.c 璇ユā鍧楁彁渚涗簡涓?-Wire鍣ㄤ欢閫氫俊鎬荤嚎绯荤粺涓€璧峰伐浣滅殑鍔熻兘銆?ow.check_crcl6 () 璁$畻1-Wire CRC16骞跺皢鍏朵笌鏀跺埌鐨凜RC杩涜姣旇緝銆?ow.crcl6 () 璁$畻Dallas Semiconductor鐨?16浣岰RC鏍¢獙鐮併€?ow.crc8 () 璁$畻Dallas Semiconductor鐨?浣岰RC,杩欎簺鐢ㄤ簬ROM鍜屾殏瀛樺瘎瀛樺櫒銆?ow.depower () 鍋滄寮鸿涓婅溅銆?ow.read () 璇诲彇涓€涓瓧鑺傘€?ow.read_bytes () 璇诲彇澶氫釜瀛楄妭銆?ow.reset () 鎵ц1-Wire澶嶄綅鍛ㄦ湡銆?ow.reset_search () 娓呴櫎鎼滅储鐘舵€侊紝浠ヤ究浠庡ご鍐嶆寮€濮嬨€?ow.search () 瀵绘壘涓嬩竴涓澶囥€?ow.select () 鍙戝嚭1-Wire ROM閫夋嫨鍛戒护銆?ow.setup () 浠ュ崟绾挎ā寮忚缃紩鑴氥€?ow.skip () 鍙戝嚭1-Wire ROM璺宠繃鍛戒护锛屼互瑙e喅鎬荤嚎涓婄殑鎵€鏈夐棶棰樸€?ow.target_search () 璁剧疆鎼滅储浠ユ熁鎵捐澶囩被鍨媐amily_code銆?ow.write () 鍐欎竴涓瓧鑺傘€?ow.write_bytes () 鍐欏叆澶氫釜瀛楄妭銆?/p>
ow.check_crcl6 () 璁$畻1 -WireCRC16骞跺皢鍏朵笌鏀跺埌鐨凜RC杩涜姣旇緝銆?鍙ユ硶 ow.check_crcl6(buf, invented_cnc0j inverted_crcl[, crc]) -buf瀛愮鐢冲€硷紝瑕佽绠楁棾鏁版嵁鍦ㄥ瓧绗︾敵涓鏌ュ拰 鈥nverted_crc0 鏀跺埌鐨?CRC 鐨?LSB 鈥nverted_crcl 鏀跺埌CRC鐨凪SB -crc CRC璧峰鍊?鍙€? 杩斿洖 濡傛灉CRC鍖归厤鍒欒繑鍥瀟rue,鍚﹀垯杩斿洖false ow.crcl6 () 璁$畻Dallas Semiconductor鐨?6浣岰RC鏍¢獙鐮併€傝繖鏄鏌讳粠璁稿1-Wire鍣ㄤ欢鏀跺埌鐨勬暟鎹殑瀹屾暣 鎬ф墍蹇呴渶鐨勩€傝娉ㄦ剰锛岃繖閲岃绠楃殑CRC涓嶆槸浠?-Wire缃戠粶鑾峰緱鐨勶紝鍘熷洜鏈変簩锛?LCRC琚€愪綅鍙嶈浆銆?2.鏍规嵁澶勭悊鍣ㄧ殑瀛楄妭椤哄簭锛屽弻瀛楄妭杩斿洖鍊肩殑浜岃繘鍒惰〃绀哄彲鑳戒笌鎮ㄤ粠1-Wire鑾峰緱鐨勪袱涓瓧鑺傜殑 瀛楄妭椤哄簭涓嶅悓銆?鍙ユ硶 ow.crcl6(buf[, crc]) 鍙傛暟 銉籦uf瀛楃涓插€硷紝瑕佽绠楃殑鏁版嵁鍦ㄥ瓧绗︿覆涓鏌ュ拰 -crc CRC璧峰鍊?鍙€? 杩斿洖 Dallas Semiconductor瀹氫箟鐨凜RC16 ow.crc8 () 璁$畻Dalias Semiconductor鐨?浣岰RC,杩欎簺鐢ㄤ簬ROM鍜屾殏瀛樺瘎瀛樺櫒銆?鍙ユ硶 ow.crc8(buf) 鍙傛暟 buf瀛楃涓插€硷紝瑕佽绠楃殑鏁版嵁鍦ㄥ瓧绗︿覆涓鏌ュ拰 杩斿洖 CRC缁撴灉涓哄瓧鑺?ow.depower () 鍋滄寮鸿涓婅溅銆備綘鍙渶瑕佽繖鏍峰仛锛屽鏋滀綘浣跨敤鈥滄潈鍔涒€濇爣蹇梠w.write()鎴栦娇鐢ㄤ竴 涓猳w.write_bytes(),鑰屼笉鏄鍋氬彟涓€涓鎴栧啓銆?鍙ユ硶 ow.depower(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 nil 涔熷彲浠ョ湅鐪?銉籵w.write () 鈥w.write_bytes () ow.read () 璇诲彇涓€涓瓧鑺傘€?鍙ユ硶 ow.read(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 浠庝粠鍣ㄤ欢璇诲彇瀛楄妭 ow.read_bytes () 璇诲彇澶氫釜瀛楄妭銆?鍙ユ硶 ow.read_bytes(pin, size) 鍙傛暟 銉籶in 1銆?2, I/O绱㈠紩 -size浠庤澶囪鍙栫殑瀛楄妭鏁?鏈€澶?56涓? 杩斿洖 string瀛楄妭浠庝粠璁惧璇诲彇 ow.reset () 鎵цl-Wire澶嶄綅鍛ㄦ湡銆?鍙ユ硶 ow.reset(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 -1濡傛灉璁惧鍝嶅簲瀛樺湪鑴夊啿 -0濡傛灉娌℃湁璁惧鎴栨€荤嚎琚煭璺垨浠ュ叾浠栨柟寮忎綆浜?50鍗㏒ ow.reset.search () 娓呴櫎鎼滅储鐘舵€侊紝浠ヤ究浠庡ご鍐嶆寮€濮嬨€?鍙ユ硶 ow.reset_search(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 nil ow.search () 瀵绘壘涓嬩竴涓澶囥€?鍙ユ硶 ow.search(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 rom_code鎴愬姛鏃堕暱搴︿负8鐨勫瓧绗︿覆銆傚畠鍖呭惈浠庤澶囩殑ROM浠g爜銆俷il濡傛灉鎼滅储涓嶆垚鍔燂紝鍒?杩斿洖銆?涔熷彲浠ョ湅鐪?ow.target_search () ow.select () 鍙戝嚭1-Wire ROM閫夋嫨鍛戒护銆傜‘淇濅綘鍏堝仛ow銉籸eset (pin) 鍙ユ硶 ow.select(pinj rom) 鍙傛暟 鈥in 1~12, I/O绱㈠紩 鈥om瀛楃涓插€硷紝len 8,浠庤澶囩殑ROM浠g爜 杩斿洖 nil 渚?鈥?8b20 ExampLe pin = 9 ow.setup(pin) count = 0 repeat count = count + 1 addr = ow.reset_search(pin) addr = ow.search(pin) tmr.wdclr() until (addr ~= nil) or (count > 100) if addr == nil then print(鈥淣o more addresses.鈥? else print(addr:byte(1,8)) crc = ow.crc8(string.sub(addr,1,7)) if crc == addr:byte(8) then if (addr:byte(l) == 0x10) or (addr:byte(l) == 0x28) then print(鈥淒evice is a DS18S20 family device.鈥? repeat ow.reset(pin) ow.select(pin, addr) ow.write(pinj 0x44, 1) tmr.delay(1000000) present = ow.reset(pin) ow銉籹elect(pin, addr) ow.write(pinj 0xBE, 1) print(,P=H鈥?present) data = nil data = string.char(ow.read(pin)) for i = lj 8 do data = data 鈥?string.char(ow.read(pin)) end print(data:byte(1,9)) crc = ow.crc8(string.sub(data,l,8)) print(鈥淐RC=鈥濃€rc) if crc == data:byte(9) then t = (data:byte(l) + data:byte(2) * 256) * 625 tl = t / 10000 t2 = t % 10000 print(,Temperature=" . .tl鈥2. .鈥淐entigrade鈥? end tmr.wdclr() until false else print(鈥淒evice family is not recognized.鈥? end else print(鈥淐RC is not valid!鈥? end end 涔熷彲浠ョ湅鐪?ow.reset () ow.setup () 浠ュ崟绾挎ā寮忚缃紩鑴氥€?ow.setup(pin) 鍙傛暟 pin 1~12, I/O绱㈠紩 杩斿洖 nil ow.skip () 鍙戝嚭1-WireROM璺宠繃鍛戒护锛屼互瑙e喅鎬荤嚎涓婄殑鎵€鏈夐棶棰樸€?鍙ユ硶 ow.skip(pin) 鍙傛暟 pin 1 銆?2, I/O绱㈠紩 杩斿洖 nil ow.target.search () 璁剧疆鎼滅储浠ユ煡鎵捐澶囩被鍨媐amily_code銆傛悳绱㈡湰韬繀椤诲湪闅忓悗鐨勮皟鐢ㄤ腑鍚?鍔?ow.search()銆?鍙ユ硶 ow.target_search(pinj family_code) 鍙傛暟 銉籶in 1銆?2, I/O绱㈠紩 鈥?family_code瀹跺涵浠g爜鐨勫瓧鑺?杩斿洖 nil 涔熷彲浠ョ湅鐪?ow.search () ow.write () 鍐欎竴涓瓧鑺傘€傚鏋減ower鏄?,鍒欏瘎鐢熶緵鐢佃澶囩殑鐢电嚎鏈淇濇寔楂樼數骞炽€傛偍鏈夎矗浠绘渶缁堥€氳繃 璋冪敤ow.depower()鎴栧啀娆¤鍙栨垨鍐欏叆鏉ラ檷浣庡畠鐨勬潈鍔涖€?ow.write(pinj v, power) 鍙傛暟 -pin 1 銆?2, I/O绱㈠紩 -v瀛楄妭琚啓鍏ヤ粠璁惧 鈥ower 1鐢ㄤ簬瀵勭敓渚涚數璁惧鐨勯珮鐢电嚎 杩斿洖 nil 涔熷彲浠ョ湅鐪?ow.depower () ow.write_bytes () 鍐欏叆澶氫釜瀛楄妭銆傚鏋減ower鏄?,鍒欏瘎鐢熶緵鐢佃澶囩殑鐢电嚎鏈淇濇寔楂樼數骞炽€傛偍鏈夎矗浠绘渶缁堥€?杩囪皟鐢╫w.depower銆傛垨鍐嶆璇诲彇鎴栧啓鍏ユ潵闄嶄綆瀹冪殑鏉冨姏銆?鍙ユ硶 ow.write_bytes(pirij buf, power) 鍙傛暟 鈥in 1 銆?2, I銆傛寚鏁?鈥uf瀛楃涓茶鍐欏叆浠庡睘璁惧 鈥ower 1鐢ㄤ簬瀵勭敓渚涚數璁惧鐨勯珮鐢电嚎 杩斿洖 nil 涔熷彲浠ョ湅鐪? ow.depower () 鏂囨。銆嬭嫳璇?妯″潡銆婸CM pcm妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?鏃?闃垮凹濮嗏€㈡媺鏍?闃垮凹濮嗏€㈡媺鏍?pcmx 閫氳繃鍚勭鍚庣鎾斁澹伴煶銆?Sigma-Delta 纭欢 ESP鍖呭惈涓€涓タ鏍肩帥-寰峰皵濉斿彂鐢熷櫒锛屽彲浠ョ敤鏉ュ湪澶栭儴浣庨€氭护娉㈠櫒鐨勫府鍔╀笅鍚堟垚闊?棰戙€?闊抽鏍煎紡 棰勬湡闊抽涓哄崟澹伴亾鍘熷鏃犵鍙?姣旂壒娴侊紝閲嗘牱閫熺巼涓? k鍜?6 k閲嗘牱纾ㄤ箣闂淬€?pcm.new () 鍒濆鍖栭煶棰戦┍鍔ㄧ▼搴忋€?pcm.drv锛氬叧闂?() 鍋滄鎾斁骞堕噴鏀鹃煶棰戠‖浠躲€?pcm.drv锛氫笂锛堬級 娉ㄥ唽浜嬩欢鐨勫洖璋冨嚱鏁般€?pcm.drv锛涚帺锛堬級 寮€濮嬫挱鏀俱€?pcm.drv锛氭殏鍋?() 鏆傚仠鎾斁銆?pcm.drv锛氬仠姝?() 鍋滄鎾斁骞堕噴鏀剧紦鍐茬殑鍧椼€?/p>
Sigma-Delta 纭欢 ESP鍖呭惈涓€涓タ鏍肩帥-寰峰皵濉斿彂鐢熷櫒锛屽彲浠ョ敤鏉ュ湪澶栭儴浣庨€氭护娉㈠櫒鐨勫府鍔╀笅鍚堟垚闊抽銆傛墍鏈夊父瑙勭殑 GPIO 锛圙PIOO闄ゅ锛夐兘鑳藉杈撳嚭鏁板瓧娉㈠舰锛屼絾鍙湁涓€涓彂鐢熷櫒銆?澶栭儴婊ゆ尝鍣ㄧ數璺涓嬪浘鎵€绀恒€傝娉ㄦ剰锛屽垎鍘嬬數闃诲皢杈撳嚭鐢靛帇闄愬埗鍦↖V pp銆傝繖搴旇鍖归厤澶у鏁版斁澶у櫒 鏉匡紝浣嗘槸闇€瑕佷笌鎮ㄧ殑鐗瑰畾閰嶇疆杩涜浜ゅ弶妫€鏌汇€?/p>
銆傞噸瑕?璇ラ┍鍔ㄧ▼搴忎笌鍏朵粬妯″潡鍏变韩纭欢璧勬簮銆傚洜姝わ紝浣犱笉鑳藉苟琛屾搷浣滃畠浜?sigma delta , perf 鎴杙wm妯″潡銆傚畠浠垎鍒渶瑕乻igma-delta鐢熸垚鍣ㄥ拰hw_timero 闊抽鏍煎紡 棰勬湡闊抽涓哄崟澹伴亾鍘熷鏃犵鍙?姣旂壒娴侊紝閲嗘牱閫熺巼涓篒k鍜?6k閲嗘牱/绉掍箣闂淬€傚父瑙勭殑WAV鏂囦欢鍙互 鐢∣AC宸ュ叿锛堝Audacity鎴朣oX锛夎繘琛岃浆鎹€傝浆鎹㈠墠璋冩暣闊抽噺銆?sox jump.wav -r 8000 -b 8 -c 1 jump_8k.u8 鍙﹁鍙傞槄绀轰緥鏂囦欢澶逛腑鐨刾lay_fileJuao pcm.new 锛堬級 鍒濆鍖栭煶棰戦┍鍔ㄧ▼搴忋€?Sigma-Delta椹卞姩绋嬪簭
鏃硶 pern.new(pcm.SDj pin) 鍙傛暟 pcm.SD 浣跨敤sigma-delta纭欢銉?pin 1 銆?0, I銆傜储寮?杩斿洖 闊抽椹卞姩绋嬪簭瀵硅薄 闊抽椹卞姩瀛愭ā鍧? 姣忎釜闊抽椹卞姩绋嬪簭灞曠ず鎾斁澹伴煶鐨勭浉鍚屾帶鍒舵柟娉曘€?pcm.drv锛氬叧闂?) 鍋滄鎾斁骞堕噴鏀鹃煶棰戠‖浠躲€?鍙ユ硶 drv:close() 鍙傛暟 娌℃湁 杩斿洖 nil pcm.drv锛氫笂() 娉ㄥ唽浜嬩欢鐨勫洖璋冨嚱鏁般€?鍙ユ硶 drv:on(event[, cb_fn[, freq]]) 鍙傛暟 鈥vent鏍囪瘑绗︼紝鍏朵腑涔嬩竴*锛?銆俤ata鍥炶皟鍑芥暟搴旇杩斿洖涓€涓寘鍚笅涓€涓暟鎹潡鐨勫瓧绗︿覆銆?銆俤rained鐢变簬缂轰箯鏁版嵁锛屾挱鏀惧仠姝€俤ata鍥炶皟鐨勬渶鍚?涓皟鐢ㄦ病鏈夊強鏃?鏈夋剰鎴栨棤鎰?鎻?渚涙柊鐨勫潡锛屽厜涓斿唴閮ㄧ紦鍐插尯琚畬鍏ㄦ秷鑰椼€?銆俻aused 鎾斁琚殏鍋?pcm.drv:pause()銆?掳 stopped 鎾斁琚仠姝簡 pcm.drv:stop()銆?銆倂u鏂扮殑宄板€兼暟鎹紝姣忕cb_fn瑙﹀彂鍗價eq娆℃暟(1鍒?00 Hz)銆?鈥b_fn鍥炶皟鍑芥暟涓烘寚瀹氱殑浜嬩欢銆傚鏋滅渷鐣ワ紝鍒欏彇娑堝厛鍓嶇殑鍔熻兘銆傜涓€涓弬鏁版槸drv ,鎺ョ潃 鏄痸u鍥炶皟鐨勫嘲鍊兼暟鎹€?杩斿洖 pcm.drv锛氱帺() 寮€濮嬫挱鏀俱€?鍙ユ硶 drv: play(rate)_| 鍙傛暟 rate閲囨牱鐜囥€傛敮鎸佺殑 鏈?pcm.RATE_lK , pcm.RATE_2K , pcm.RATE_4K , pcm.RATE_5K , pcm.RATE_8K , pcm.RATE_10K , 榛樿涓篟ATE_8K ,濡傛灉蹇界暐銆?杩斿洖 pcm.drv锛氭殏鍋?) 鏆傚仠鎾斁銆傛潵鐢礵rv:play()灏嗕粠鏈€鍚庝竴涓綅缃仮澶嶃€?鍙ユ硶 drv:pause() 鍙傛暟 娌℃湁 杩斿洖 nil pcm.drv锛氬仠姝?) 鍋滄鎾斁骞堕噴鏀剧紦鍐茬殑鍧椼€?鍙ユ硶 drv:stop() 鍙傛暟 娌℃湁 杩斿洖 nil 鏂囨。銆嬭嫳璇€濇ā鍧椔?PERF perf妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?6鏃?鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?perf.c
璇ユā鍧椾负搴旂敤绋嬪簭鎻愪緵绠€鍗曠殑鎬ц兘娴嬮噺銆傚畠澶ц嚧姣?0寰瀵圭▼搴忚鏁板櫒杩涜閲囨牱锛屽苟寤虹珛瀹?鎵惧埌鐨勫€肩殑鐩存柟鍥俱€傜敱浜庡彧鏈夊皯閲忕殑鍐呭瓨鏉ュ瓨鍌ㄧ洿鏂瑰浘锛屾墍浠ョ敤鎴峰彲浠ユ寚瀹氬摢涓唬鐮佸尯鍩熸槸 鎰熷叴瓒g殑銆傞粯璁ゆ槸鍖呭惈浠g爜鐨勬暣涓棯瀛樸€備竴鏃︾‘瀹氫簡鐑偣锛岀劧鍚庡彲浠ュ湪涓嶅悓鐨勫尯鍩熶互涓嶅悓鐨?鍒嗚鲸鐜囬噸澶嶈繍琛岋紝浠ヨ幏寰楁墍闇€鐨勪俊鎭€?perf.start () 寮€濮嬩竴涓€ц兘鐩戣浼氳瘽銆?perf.stop () 缁堟鎬ц兘鐩戣浼氳瘽骞惰繑鍥炵洿鏂瑰浘銆?/p>
perf.start () 寮€濮嬩竴涓€ц兘鐩戣浼氳瘽銆?鍙ユ硶 perf.start([start[, endnbins]]]) 鍙傛暟 -Start (鍙€?鐩存柟鍥剧殑鏈€浣嶱C鍦板潃銆傞粯璁ゆ槸0x40000000銆?-end (鍙€?鐩存柟鍥剧殑鏈€楂樺湴鍧€銆傞粯璁ゅ€兼槸闂瓨涓繁鐢ㄧ┖闂寸殑缁撴潫銆?銉籲bins (鍙€?鐩存柟鍥句腑鐨勫垎绠辨暟閲忋€備繚鎸佽繖涓悎鐞嗙殑锛屽惁鍒欎綘浼氱敤瀹屽唴瀛樸€傞粯璁ゅ€兼槸 1024銆?璇锋敞鎰忥紝鍨冨溇绠辩殑鏁伴噺鏄竴涓笂闄愩€傛瘡涓瀮鍦剧鐨勫ぇ灏忚缃负涓や釜鐨勬渶灏忓箷锛屼娇寰楁墍闇€鍨冨溇 绠辩殑鏁伴噺灏忎簬鎴栫瓑浜庢墍鎻愪緵鐨勫瀮鍦剧鏁伴噺銆?杩斿洖 娌℃湁 perf.stop () 缁堟鎬ц兘鐩戣浼氳瘽骞惰繑鍥炵洿鏂瑰浘銆?鍙ユ硶 total, outside, histogram^ binsize = perf.stop() 杩斿洖 -total鍦ㄦ杩愯涓崟鑾风殑鏍锋湰鎬绘暟 鈥utside鐩存柟鍥捐寖鍥翠箣澶栫殑鏍锋湰鏁伴噺 銉籬istogram鐩存柟鍥捐〃绀轰负鎸夊湴鍧€绱㈠紩鐨勮〃鏍硷紝鍏朵腑鍊兼槸鏍锋湰鏁伴噺銆傚湴鍧€鏄瀮鍦剧鐨勬渶浣?鍦板潃銆?鈥insize姣忎釜鐩存柟鍥綽in鐨勫瓧鑺傛暟銆?渚?perf.start() for j = 0, 100 do str = 鈥渟tr鈥濃€ end tot, outtblj binsize = perf.stop() print(tot, out) local keyset = {} local n = 0 for kjv in pairs(tbl) do n=n+l keyset[n]=k end table.sort(keyset) for kkjk in ipairs(keyset) do print(string.format(鈥?x 鈻?%x鈥?k, k + binsize - 1)/ 杩欒繍琛屽惊鐜垱寤哄瓧绗︿覆100娆★紝鐒跺悗鎵撳嵃鍑虹洿鏂瑰浘锛堟帓搴忓悗锛夈€傝繖闇€瑕佸ぇ绾?500涓牱鏈紝骞?鎻愪緵浜嗘墍鏈塁PU鏃堕棿鑺卞湪鍝噷鐨勪竴涓緢濂界殑鎸囩ず銆?PWM妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 鎯呰妭涓瓧 Zeroday Zeroday pwm.c
pwm.close () 閫€鍑烘寚瀹欸PIO寮曡剼鐨凱WM妯″紡銆?pwm.getclock () 鑾峰彇閫夊畾鐨勫紩鑴歅WM棰戠巼銆?pwm.getduty () 鑾峰彇寮曡剼鐨勯€夊畾宸ヤ綔鍛ㄦ湡銆?pwm.setclock () 璁剧疆PWM棰戠巼銆?pwm.setduty () 璁剧疆涓€涓紩鑴氱殑鍗犵┖姣斻€?pwm.setup () 灏嗗紩鑴氳缃负PWM妯″紡銆?pwm.start () PWM鍚姩锛屾尝褰㈣搴旂敤鍒癎PI銆傚紩鑴氥€?pwm.stop () 鏆傚仠PWM娉㈠舰鐨勮緭鍑恒€?/p>
pwm.close () 閫€鍑烘寚瀹欸PIO寮曡剼鐨凱WM妯″紡銆?鍙ユ硶 pwm.close(pin) 鍙傛暟 pin 1銆?2, I銆傛寚鏁?杩斿洖 nil 涔熷彲浠ョ湅鐪?pwm.start () pwm.getclock () 鑾峰彇閫夊畾鐨勫紩鑴歅WM棰戠巼銆?鍙ユ硶 pwm.getclock(pin) 鍙傛暟 pin 1銆?2, I銆傛寚鏁?杩斿洖 number寮曡剼鐨凱WM棰戠巼 涔熷彲浠ョ湅鐪?pwm.setclock () 涔熷彲浠ョ湅鐪?pwm.getduty () pwm.getduty () 鑾峰彇寮曡剼鐨勯€夊畾宸ヤ綔鍛ㄦ湡銆?鍙ユ硶 pwm.getduty(pin) 鍙傛暟 pin 1-12, I銆傛寚鏁?杩斿洖 number宸ヤ綔寰幆锛屾渶澶?023 涔熷彲浠ョ湅鐪?pwm.setduty () pwm.setclock () 璁剧疆PWM棰戠巼銆傛敞鎰忥細璁剧疆PWM棰戠巼浼氬悓姝ユ洿鏀瑰叾浠栬缃紝濡傛灉鏈夌殑璇濄€傜郴缁熷彧鑳戒娇鐢ㄤ竴 涓狿WM棰戠巼銆?鍙ユ硶 pwm.setclock(pin, clock) 鍙傛暟 -pin 1 銆?2, I銆傛寚鏁?-clock 1 銆?000, PWM棰戠巼 杩斿洖 nil 涔熷彲浠ョ湅鐪?pwm.getclock () pwm.setduty () 璁剧疆涓€涓紩鑴氱殑鍗犵┖姣斻€?鍙ユ硶 pwm.setduty(pin, duty) 鍙傛暟 -pin 1 銆?2, I銆傛寚鏁?-duty 0銆?023, pwm鍗犵┖姣旓紝鏈€澶?023 (lObit) 杩斿洖 nil 鈥揇I is connected to green Led --D2 is connected to blue Led --D3 is connected to red Led pwm.setup(l, 500, 512) pwm.setup(2, 500, 512) pwm.setup(3, 500, 512) pwm.start(l) pwm.start(2) pwm.start(3) function led(r, g, pwm.setduty(lj pwm.setduty(2j pwm.setduty(3j r) end led(512j 0, 0) 鈥?set Led to red led(0, 0, 512)鈥?pwm.setup () 灏嗗紩鑴氳缃负PWM妯″紡銆傛渶澶氬彧鑳藉皢6涓紩鑴氳缃负PWM妯″紡銆?pwm.setup(pin, clock, duty) pin 1銆?2, I銆傛寚鏁?銉?clock 1 銆?000, pwm棰戠巼 -duty 0銆?023, pwm鍗犵┖姣旓紝鏈€澶?023 (lObit) 杩斿洖 nil 渚?鈥搒et pin index 1 as pwm outputj frequency is 100HZj duty cycLe is half. pwm.setup(l, 100, 512) 涔熷彲浠ョ湅鐪?pwm.start () pwm.start () PWM鍚姩锛屾尝褰㈣搴旂敤鍒癎PIO寮曡剼銆?鍙ユ硶 pwm.start(pin) 鍙傛暟 pin 1-12, I銆傛寚鏁?杩斿洖 nil 涔熷彲浠ョ湅鐪?pwm.stop () pwm.stop () 鏆傚仠PWM娉㈠舰鐨勮緭鍑恒€?鍙ユ硶 pwm.stop(pin) 鍙傛暟 pin 1銆?2, I銆傛寚鏁?杩斿洖 nil 涔熷彲浠ョ湅鐪?pwm.start () rfswitch 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?2鏈?鏃?缃楅┈璐瑰ゥ澶氱綏澶?缃楅┈璐瑰ゥ澶氱綏澶?rfswitch.c
鐢ㄤ簬鎿嶄綔433/315Mhz璁惧鐨勬ā鍧楋紝濡傜數婧愭彃搴э紝缁х數鍣ㄧ瓑銆傝繖寰堝彲鑳介€傜敤浜庢墍鏈夊父鐢ㄧ殑浣?鎴愭湰鐢垫簮鎻掑骇锛屽寘鎷琒C5262/SC5272, HX2262/HX2272, PT2262/PT2272, EV1527, RT1527, FP1527鎴朒S1527鑺墖缁勩€?杩欎釜妯″潡浣跨敤浜嗗師濮嬬殑rc-switchArduino搴撲腑鐨勪竴浜涗唬鐮侊紝浣嗘槸NodeMCU鍜孉rduino骞朵笉瀹?鍏ㄥ吋瀹广€傝繖灏辫姹俽c-switch鐢↙ua鏀寔閲嶅啓鎴恟fswitch NodeMCU銆?鍙橀€佸櫒鐨勮繛鎺?鍙戝皠鏈?ESP8266 娉ㄩ噴 vin 鎴? 3V3 3.3 - 5浼忓湪ESP8266鎴栧叾浠栫數婧?鍦伴潰鎴朹 GND 鍦板簲璇ヨ繛鎺ュ埌ESP8266鍜岀數婧?鏁版嵁寮曡剼 6 鍑犱箮ESP8266涓婄殑浠讳綍寮曡剼 浣犲彲浠ュ湪杩欓噷闃呰鏇村鍏充簬杩炴帴銆?/p>
閫夋嫨閫傚綋鐨勫崗璁?璇ユā鍧楁敮鎸佷娇鐢?绉嶄笉鍚岀殑鍗忚浼犺緭鏁版嵁锛屾偍搴旇浣跨敤鏈€閫傚悎鎮ㄧ殑闇€姹傜殑鏁版嵁銆傛帴鏀舵暟鎹皻涓?鏀寔銆傛墍浠ワ紝浣犱笉鑳藉惉鏀堕煶鏈虹殑绌烘皵锛屽苟浣跨敤Lua鑾峰彇鍗忚璇︾粏淇℃伅銆?鎰佸緱姝g‘鍗忚鐨勬渶绠€鍗曟柟娉曟槸灏嗘棤绾跨數鎺ユ敹鍣ㄨ繛鎺ュ埌ESP8266鎴朅rduino,鐒跺悗杩?琛孯eceiveDemo_Advanced.ino 骞跺湪涓茶鎺у埗鍙?examplel, example2)涓煡鐪嬭緭鍑恒€?浣犲簲璇ュ緱鍒拌繖鏍风殑涓滆タ锛?Decimal: 11001351 (24Bit) Binary: 101001111101111000000111 Tri-State: not applicable PulseLength: 517 microseconds Protocol: 5 Raw data锛?7200,1004,528,504,1048,980,336,1176,356,1176,352,1180,1108,412,356,117锛?鍏充簬浣庡眰鍗忚瑙勮寖鐨勬洿璇︾粏鐨勪俊鎭彲浠ュ湪杩欓噷鎵惧埌浣犲彲浠ラ€氳繃鐩磋鐨勬柟寮忓皢鐢垫姤鎷疯礉 鑷?| http:銆僼est.su i.li/oszi/ rfswitch.send () 浣跨敤鏃犵嚎鐢垫ā鍧椾紶杈撴暟鎹€?rfswitch.send () 浣跨敤鏃犵嚎鐢垫ā鍧椾紶杈撴暟鎹€?鍙ユ硶 rfswitch.send(protocol_idpulse_length, repeat, pin, value, length) 鍙傛暟 銉籶rotocol_id姝f暣鏁板€硷紝浠?-6寮€濮?鈥ulse_length 涓€涓剦鍐茬殑闀垮害浠ュ井绉掍负鍗曚綅锛岄€氬父浠?00鍒?50 銉籸epeat閲嶅鍊硷紝閫氬父浠?鍒?.杩欐槸涓€涓悓姝ヤ换鍔°€傚皢閲嶅璁℃暟璁剧疆涓鸿緝澶х殑鍊间細瀵艰嚧闂?棰樸€傚缓璁殑闄愬埗鏄ぇ绾?-4銆傚鏋滀綘闇€瑕佹洿澶氾紝閭d箞鍐嶅娆¤皟鐢ㄥ畠(渚嬪浣?鐢?node.task.post) -pin 1/閿€鐨勩€?鎸囨暟锛屽疄鏂戒緥6涓篏PIO12,瑙佺粏鑺?銉籿alue姝f暣鏁板€硷紝杩欐槸灏嗚鍙戦€佺殑涓昏鏁版嵁 鈥ength濡傛灉鍊奸暱搴︽槸3涓瓧鑺傦紝閭d箞闀垮害鏄?4 杩斿洖 nil 渚?鈥揕ua transmit radio code using protocol #1 鈥損uLse_Length 300 microseconds 鈥搑epeat 5 times 鈥搖se pin #7 (GPI013) 鈥搗aLue to send is 560777 鈥搗aLue Length is 24 bits (3 bytes) rfswitch.send(l, 300, 5, 7, 560777, 24) 鏃嬭浆妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?鏃?鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?rotary.c
璇ユā鍧楀彲浠ヨ鍙栦究瀹滅殑鏃嬭浆缂栫爜鍣ㄥ紑鍏崇殑鐘舵€併€傛墍鏈夋爣鍑嗙殑鍦版柟閮芥湁涓€涓ょ編鍏冦€傚畠浠槸浜旈拡 瑁呯疆锛屽叾涓笁涓敤浜庣伆鐮佺紪鐮佸櫒鐨勬棆杞紝涓や釜鐢ㄤ簬鎸夐挳寮€鍏炽€傝繖浜涘紑鍏抽€氬父鐢ㄤ簬姹借溅闊冲搷绯?缁熴€?杩欎簺寮€鍏虫病鏈夌粷瀵逛綅缃紝鍙槸缂栫爜椤烘椂閽?閫嗘椂閽堟棆杞殑浣嶇疆鏁般€傝浣跨敤姝ゆā鍧楋紝璇峰皢姝d氦缂?鐮佸櫒鐨勫叕鍏卞紩鑴氳繛鎺ュ埌鍦帮紝灏咥鍜孊鐩歌繛鎺ュ埌NodeMCUo鎸夐挳寮€鍏崇殑涓€涓紩鑴氫篃搴旇鎺ュ湴锛?鍙︿竴涓紩鑴氳繛鎺ュ埌NodeMCUo 閮ㄤ欢鏉ユ簮 浜氶┈閫婏細杩欎釜鎼滅储鏄剧ず浜嗗绉嶃€?甯搁噺 鏃嬭浆銆?rotarysetup () 鍒濆鍖杗odemeu浠ヤ笌鏃嬭浆缂栫爜鍣ㄥ紑鍏抽€氫俊銆?rotaryon () 璁剧疆鐗瑰畾浜嬩欢鐨勫洖璋冦€?rotary.getpos () rotary.close () 閲婃斁涓庢棆杞紑鍏崇浉鍏崇殑璧勬簮銆?/p>
閮ㄤ欢鏉ユ簮 -浜氶┈閫婏細杩欎釜鎼滅储鏄剧ず浜嗗绉嶃€?-Ebay锛氬湪杩欎釜鎼滅储涓瘮杈冧究瀹?銉籄dafruit锛氭棆杞紪鐮佸櫒 -Aliexpress锛氳繖涓悳绱㈡彮绀轰簡鍚勭鍚勬牱鐨勫舰鐘跺拰澶у皬銆?杩樻湁涓€涓畨瑁呭湪鏍囧噯0.1鈥滃紩鑴氫笂鐨勫紑鍏筹紝杩欐槸KY-040,涔熷彲浠ュ湪寰堝鍦版柟鎵惧埌锛岃娉ㄦ剰锛岃繖 浜涘紩鑴氭湁鐐瑰亸蹇冿紝鎴戞€€鐤戝畠纭疄闇€瑕乂CC杩炴帴銆?甯搁噺 銉籸otary. PRESS = 1浜ゆ崲鏈虹殑浜嬩欢绫诲瀷銆?銉籸otary. LONGPRESS = 2浜嬩欢绫诲瀷鐨勯暱鎸夈€?銉籸otary. RELEASE = 4浜ゆ崲鏈虹増鏈殑浜嬩欢绫诲瀷銆?銉籸otary.TURN = 8浜ゆ崲鏈烘棆杞殑浜嬩欢绫诲瀷銆?鈥otary.CLICK = 16鍗曞嚮浜嬩欢绫诲瀷锛堝彂甯冨悗锛?鈥otary.DBLCLICK = 32鍙屽嚮浜嬩欢绫诲瀷锛堢浜屾鍙戝竷鍚庯級 鈥otary .ALL = 63鎵€鏈変簨浠剁被鍨嬨€?rotary.setup 锛堬級 鍒濆鍖杗odemeu浠ヤ笌鏃嬭浆缂栫爜鍣ㄥ紑鍏抽€氫俊銆?鍙ユ硶 rotary.setup锛坈hannel, pina, pinb[pinpress[, longpress_time_ms[3 dblclick_time_ms]]]锛?鍙傛暟 鈥hannel鏃嬭浆妯″潡鏀寔涓変釜寮€鍏炽€傞€氶亾鏄?,1鎴?銆?-pina杩欐槸涓€涓狦PIO缂栧彿锛堜笉鍖呮嫭0锛?骞惰繛鎺ュ埌鏃嬭浆寮€鍏充笂鐨勫紩鑴欰鐩搞€?-pinb杩欐槸涓€涓狦PIO缂栧彿锛堜笉鍖呮嫭0锛?骞惰繛鎺ュ埌鏃嬭浆寮€鍏充笂鐨勫紩鑴欱鐩搞€?鈥inpress 锛堝彲閫夛級杩欐槸涓€涓狦PIO缂栧彿锛堜笉鍖呮嫭0锛?骞惰繛鎺ュ埌鎸変笅寮€鍏炽€?鈥ongpress_time_ms 锛堝彲閫夛級鎸変笅鐨勬绉掓暟锛堥粯璁?00锛夎璁や负鏄暱鎸夈€?鈥blclick_time_ms 锛堝彲閫夛級涓嬩竴涓彂琛岀増鐨勫彂琛岀増鍜屽嵃鍒锋満涔嬮棿鐨勬绉掓暟锛堥粯璁ゅ€间负 500锛夎搴斾负鍙岄噾銆?杩斿洖 娌℃湁銆傚鏋滃弬鏁伴敊璇紝鎴栬€呮搷浣滄棤娉曞畬鎴愶紝鍒欎細鎶涘嚭閿欒銆?瀵逛簬鎵€鏈堿PI璋冪敤锛屽鏋滈€氶亾鍙疯秴鍑鸿寖鍥达紝鍒欎細鎶涘嚭閿欒銆?渚?rotary.setup锛?j 5,6銆?锛?rotary.on 锛堬級 璁剧疆鐗瑰畾浜嬩欢鐨勫洖璋冦€?鍙ユ硶 rotary.on锛坈hannel, eventtypecallback]锛?鍙傛暟 銉籧hannel鏃嬭浆妯″潡鏀寔涓変釜寮€鍏炽€傞€氶亾鏄?,1鎴?銆?銉籩venttype杩欏畾涔変簡姝e湪娉ㄥ唽鐨勪簨浠剁殑绫诲瀷銆傝繖鏄€昏緫鎴栦竴绉嶆垨澶氱 鐨?PRESS , LONGPRESS , RELEASE , TURN , CLICK 鎴?DBLCLICK 銆?銉籧allback杩欐槸鍦ㄦ寚瀹氫簨浠跺彂鐢熸椂灏嗚璋冪敤鐨勫嚱鏁般€?濡傛灉鍥炶皟鏄€滄棤鈥濇垨鐪佺暐锛屽垯娉ㄥ唽琚彇娑堛€?浜嬩欢鍙戠敓鏃讹紝灏嗕娇鐢ㄤ笁涓弬鏁拌皟鐢ㄥ洖璋冦€傜涓€涓弬鏁版槸浜嬩欢绫诲瀷锛岀浜屼釜鍙傛暟鏄棆杞紑鍏崇殑 褰撳墠浣嶇疆锛岀涓変釜鍙傛暟鏄簨浠跺彂鐢熺殑鏃堕棿銆?璇ヤ綅缃璺熻釜锛屽苟琚〃绀轰负涓€涓湁绗﹀彿鐨?2浣嶆暣鏁般€傚鍔犲€艰〃绀洪『鏃堕拡杩愬姩銆傛椂闂存槸浠?2浣?鏁存暟琛ㄧず鐨勫井绉掓暟銆傝娉ㄦ剰锛岃繖涓瘡闅斾竴灏忔椂宸﹀彸灏变細鎹㈣銆?rotary.011(0, rotary.ALL, function (type, pos, when) print 鈥淧osition=鈥?鈥⑩€?pos .銉烩€渆vent type=鈥濃€?type .鈥?" time=鈥?鈥?when end) 绗旇 娲诲姩灏嗘寜椤哄簭杩涜锛屼絾鍙兘缂哄皯TURN浜嬩欢銆傚鏋滄湁寰堥暱鐨勪簨浠堕槦鍒楋紝鍒橮RESS鍜孯ELEASE浜?浠朵篃鍙兘浼氫涪澶便€傚涓寕璧风殑TURN浜嬩欢閫氬父浣滀负涓€涓猅URN鍥炶皟琚皟搴︼紝鍏舵渶缁堜綅缃綔涓哄叾 鍙傛暟銆?涓€浜涘紑鍏虫瘡涓埗鍔ㄥ櫒鏈?涓楠ゃ€傝繖鎰忓懗鐫€鍦ㄥ疄璺典腑锛屽簲鐢ㄧ▼搴忓簲璇ュ皢浣嶇疆闄や互4,骞朵娇鐢ㄥ畠 鏉ョ‘瀹氱偣鍑绘鏁般€備竴涓紑鍏充笉鍙兘鍦ㄤ换浣曚竴涓柟鍚戜笂杈惧埌30浣嶇殑鏃嬭浆-鏈変簺鏄綆浜?0000杞?鐨勩€?鍦–LICK鍜孡ONGPRESS浜嬩欢瀵硅秴鏃朵氦浠樸€傝DBLCLICK浜嬩欢琚箣鍚庣殑浜?浠楶RESS , RELEASE , PRESS , RELEASE鍏朵腑杩欐槸涓棿涔嬮棿寰堢煭鐨勬椂闂撮棿闅斿簭 鍒?RELEASE 鍜?PRESS 銆?閿欒 濡傛灉鎻愪緵浜嗕竴涓棤鏁坋venttype ,閭d箞灏嗕細鎶涘嚭涓€涓敊璇€?rotary.getpos () 鑾峰彇寮€鍏崇殑褰撳墠浣嶇疆鍜屾寜涓嬬姸鎬?鍙ユ硶 pos, press, queue = rotary.getpos(channel) 鍙傛暟 鈥hannel鏃嬭浆妯″潡鏀寔涓変釜寮€鍏炽€傞€氶亾鏄?,1鎴?銆?杩斿洖 -pos浜ゆ崲鏈虹殑褰撳墠浣嶇疆銆?-press鎸囩ず褰撳墠鏄惁鎸変笅寮€鍏崇殑甯冨皵鍊笺€?鈥ueue鏈紶閫佺殑鍥炶皟鏁?閫氬父涓?)銆?渚?print rotary.getpos(0) rotary.close () 閲婃斁涓庢棆杞紑鍏崇浉鍏崇殑璧勬簮銆?鍙ユ硶 rotary.close(channel) 鈥?channel鏃嬭浆妯″潡鏀寔涓変釜寮€鍏炽€傞€氶亾鏄?,1鎴?銆?rotary.close(0) RTC FIFO妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?26 S DiUS, JohnyMattsson, Bernd Meyer bmeyer@dius.com.au Johny Mattsson rtcfifo.c
rtcfif銆傛ā鍧楀疄鐜颁簡鐢ㄤ簬浼犳劅鍣ㄨ鏁扮殑鍏堣繘鍏堝嚭瀛樺偍銆傞【鍚嶆€濅箟锛屽畠鐢盧TC鐢ㄦ埛瀛樺偍鍣ㄦ彁渚涙敮 鎸侊紝鍥犳鍙互鍦ㄦ繁搴︾潯鐪犲懆鏈熶腑瀛樻椿涓嬫潵銆備粠姒傚康涓婅锛屽畠鍙互琚涓?鏄經 timestamp, name, value 锝濆厓缁勭殑寰幆鏁扮粍銆傚湪鍐呴儴锛屽畠浣跨敤绌洪棿浼樺寲鐨勫瓨鍌ㄦ牸寮忔潵 淇濆瓨鏈€澶ф暟閲忕殑鏍峰搧銆傝繖甯︽潵浜嗕竴浜涙姌琛凤紝鍥犳涓嶆槸涓€涓В鍐虫柟妗堛€傚€煎緱娉ㄦ剰鐨勬槸锛?-鏃堕棿鎴充互绗簩绮惧害瀛樺偍銆?銉婚噰鏍烽鐜囧繀椤昏嚦灏戞瘡8.5鍒嗛挓涓€娆°€傝繖鏄敤浜庢椂闂存埑鐨勫閲忓帇缂╃殑鍓綔鐢ㄣ€?-鏁板€艰闄愬埗鍦?6浣嶇殑绮惧害锛屼絾鏈変竴涓嫭绔嬬殑瀛楁鏉ュ瓨鍌ㄤ竴涓狤-n涔樻硶鍣ㄣ€傚嵆浣夸娇鐢ㄩ潪甯稿皬 鐨勫€硷紝杩欎篃鍙互淇濊瘉楂樹繚鐪熷害銆傛湁鏁堣寖鍥存槸1E涓€7鍒?5535銆?-浼犳劅鍣ㄥ悕绉伴檺鍒朵负鏈€澶?涓瓧绗︺€?銆傞噸瑕?璇ユā鍧椾娇鐢ㄤ袱缁凴TC瀛樺偍鍣ㄦ彃妲斤紝鍏舵帶鍒舵ā鍧椾负10-20,浠ュ強鍙彉鏁伴噺鐨勬彃妲界敤浜庨噯鏍峰拰 浼犳劅鍣ㄥ悕绉般€傞粯璁ゆ儏鍐典笅杩欎簺璺ㄥ害涓?2-127,浣嗘槸杩欐槸鍙厤缃殑銆傛彃妲借绉颁负 鏃?rtcfif0. prepare()琚О涓恒€?杩欐槸rtcmem鍜宺tcti me妯″潡鐨勯厤濂楁ā鍧椼€?rtcfifo.ds 1 eep_until_samp 1 e () 褰搑tcfifo妯″潡涓巖tctime妯″潡涓€璧风紪璇戞椂,姝や究鍒╁姛鑳藉彲鐢ㄣ€?rtcfifo.peek () 浠巖tcfif o璇诲彇涓€涓牱鏈琽 rtcfifo.pop () 浠巖tcfif銆傝鍙栫涓€涓牱鏈紝骞朵粠閭i噷鍒犻櫎瀹冦€?rtcfifo.prepare () 鍒濆鍖杛tcfifo妯″潡浠ヤ緵浣跨敤銆?rtcfifo.put () 灏嗘牱鍝佹斁鍏tcfifo銆?rtcfifo.ready () 濡傛灉rtcfif銆傚凡鍑嗗濂藉苟鍑嗗浣跨敤锛屽垯杩斿洖闈為浂鍊硷紝濡傛灉涓嶆槸锛屽垯 杩斿洖0銆?/p>
rtcfifo.dsleep_untiLsample () 褰搑tcfifo妯″潡涓巖tctime妯″潡涓€璧风紪璇戞椂锛屾渚垮埄鍔熻兘鍙敤銆傚畠鑰冭檻浜嗕竴浜涘叧娉ㄧ偣鍒嗙鐨勬帾鏂? 浣垮緱浼犳劅鍣ㄨ鍙栨娊璞″彲鑳戒笉闇€瑕佺煡閬撻噯鏍烽鐜?杩欏湪寰堝ぇ绋嬪害涓婃槸绛栫暐鍐冲畾锛岃€屼笉鏄紶鎰熷櫒 鏈川)鐨勬ā鍧楀寲Lua浠g爜鐨勪功鍐欍€備娇鐢ㄦ鍔熻兘瀹為檯涓婄浉褰?鍗?rtctime.dsleep_aligned(interval_usJ minsleep_us) 鍦颁竾 interval_us 鏄粈涔?缁?rtcfifo.prepare()銆?鍙ユ硶 rtcfifo.dsleep_until_sample(minsleep_us) 鍙傛暟 minsleep_us鏈€鐭殑鐫$湢鏃堕棿锛屼互寰涓哄崟浣?渚?鈥揹eep sLeep untiL it鈥檚 time to take the next sampLe rtcfifo.dsleep_until_sample(0) 涔熷彲浠ョ湅鐪?rtctime.dsleep_aligned() rtcfifo.peek () 浠巖tcfifo璇诲彇涓€涓牱鏈€傚彲浠ユ寚瀹歳tcfifo鐨勫亸绉婚噺锛屼絾榛樿鎯呭喌涓嬩細璇诲彇绗竴涓牱鏈?鍋忕Щ閲?0)銆?鍙ユ硶锛?rtcfifo.peek([offset]) 鍙傛暟 offset鍋风湅鏍锋湰鍦╫ffset fifo鐨勪綅缃€傝繖鏄浉瀵逛簬褰撳墠澶撮儴鐨勭浉瀵瑰亸绉婚噺銆備粠闆跺紑濮嬨€傞粯 璁ゅ€兼槸0銆?杩斿洖 杩斿洖鐨勫€间笌鐢ㄤ簬鐨勮緭鍏ュ弬鏁板尮閰峳tcfifo.put() o 鈥imestamp鏃堕棿鎴充互绉掍负鍗曚綅 鈥alue浠峰€?鈥eg_e姣斾緥鍥犲瓙 鈥ame浼犳劅鍣ㄥ悕绉?濡傛灉娌℃湁鏍峰搧鍙敤(鍦ㄦ寚瀹氱殑鍋忕Щ閲?锛屽垯涓嶈繑鍥炰换浣曟牱鍝併€?渚?local timestampj value, neg_e, name = rtcfifo.peek() rtcfifo.pop () 浠巖tcfifo璇诲彇绗竴涓牱鏈紝骞朵粠閭i噷鍒犻櫎瀹冦€?鍙ユ硶锛?rtcfifo.pop() 鍙傛暟 娌℃湁 杩斿洖 杩斿洖鐨勫€间笌鐢ㄤ簬鐨勮緭鍏ュ弬鏁板尮閰峳tcfifo.put() o 鈥imestamp鏃堕棿鎴充互绉掍负鍗曚綅 鈥alue浠峰€?鈥eg_e姣斾緥鍥犲瓙 鈥ame浼犳劅鍣ㄥ悕绉?渚?while rtcfifo.count() > 0 do local timestamp^ value, neg_e> name = rtcfifo.pop() 鈥揹o something with the sampLe, e.g. upload to somewhere end rtcfifo.prepare () 鍒濆鍖杛tcfifo妯″潡浠ヤ緵浣跨敤銆?璋冪敤rtcfifo.prepare()鏃犳潯浠跺湴閲嶆柊鍒濆鍖栧瓨鍌?浠讳綍瀛樺偍鐨勬牱鏈兘灏嗚涓㈠純銆?鍙ユ硶 rtcfifo.prepare([table]) 鍙傛暟 璇ュ嚱鏁板皢涓€涓彲閫夌殑閰嶇疆琛ㄤ綔涓哄弬鏁般€備互涓嬮」鐩彲鑳介厤缃細 鈥nterval_us濡傛灉鎯宠浣跨敤璇tcfifo.sleep_until_sample()鍑芥暟锛屽垯璇ュ瓧娈靛皢璁剧疆 閲嗘牱闂撮殧7浠ュ井绉掍负鍗曚綅)浠ヤ緵浣跨敤銆傝繖瀹為檯涓婃槸绗簩涓 鐐?rtctime.dsleep_aligned()銆?鈥ensor_count鎸囧畾鍒嗛厤鍚嶇О绌洪棿鐨勪笉鍚屼紶鎰熷櫒鐨勬暟閲忋€傝繖鐩存帴瀵瑰簲浜庝负鍙橀噺鍧椾腑鐨勫悕绉?淇濈暀鐨勭巹涓Ы銆傞粯璁ゅ€兼槸5,鏈€灏忓€兼槸1,鏈€澶у€兼槸16銆?鈥torage_begin鎸囧畾鐢ㄤ簬鍙橀噺鍧楃殑绗竴涓猂TC鐢ㄦ埛鍐呭瓨鎻掓Ы銆傞粯璁ゅ€兼槸32.鍙湁 鍦╯torage_end鎸囧畾鏃舵墠鏈夋晥銆?鈥torage_end鎸囧畾RTC鐢ㄦ埛鍐呭瓨鎻掓Ы鐨勬湯绔€傛鎻掓Ы缂栧彿涓嶄細琚Е鍙娿€傞粯璁ゅ€兼槸128.鍙湁 鍦╯torage_begin鎸囧畾鏃舵墠鐢熸晥銆?杩斿洖 nil 鈥揑nitiaLize with default values rtcfifo , prepare() 鈥?Use RTC sLots 19 and up for variabLe storage rtcfifo.prepare((storage_begin=21, storage_end=128)) 涔熷彲浠ョ湅鐪?鈥tcfifo.ready() 鈥tcfifo.prepare() rtcfifo.put () 灏嗘牱鍝佹斁鍏tcfifo銆?濡傛灉rtcfifo娌℃湁鍑嗗濂斤紝杩欎釜鍑芥暟浠€涔堥兘涓嶅仛銆?鍙ユ硶 rtcfifo.put(timestamp, value, neg_e, name) 鍙傛暟 鈥imestamp浠ョ涓哄崟浣嶇殑鏃堕棿鎴炽€傛椂闂存埑閫氬父鏉ヨ嚜浜巖tctime.get()銆?鈥alue瑕佸瓨鍌ㄧ殑鍊笺€?鈥eg_e 瀛樺偍鐨勬湁鏁堝€糓valueE neg-eo 鈥ame浼犳劅鍣ㄧ殑鍚嶇О銆傚彧浣跨敤鍓嶅洓涓?ASCII)瀛楃name銆?璇锋敞鎰忥紝濡傛灉鏃堕棿鎴冲閲忎笌涔嬪墠瀛樺偍鐨勬牱鏈浉姣斿お澶э紝鍒檙tcfifo浼氶€愬嚭鎵€鏈夎緝鏃╃殑鏍锋湰浠ュ瓨鍌?姝ゆ牱鏈€傚悓鏍凤紝濡傛灉name鎰忓懗鐫€浣跨敤鐨勫悕绉板浜巗ensor_count (濡傛寚瀹?鐨剅tcfifo.prepare())鍚嶇О锛屽垯rtcfifo浼氶€愬嚭鎵€鏈夎緝鏃╃殑鏍锋湰銆?杩斿洖 nil 渚?鈥?Obtain a sampLe vaLue from somewhere local sample =鈥?鈥揝tore sample with no scaLing^ under the name 鈥渇oo鈥?rtcfifo.put(rtctime.get(), sample, 0, 鈥渇oo鈥? rtcfifo.ready () 濡傛灉rtcfifo宸插噯澶囧ソ骞跺噯澶囦娇鐢紝鍒欒繑鍥為潪闆跺€硷紝濡傛灉涓嶆槸锛屽垯杩斿洖0銆?鍙ユ硶锛?rtcfifo.ready() 鍙傛暟 娌℃湁 杩斿洖 濡傛灉rtcfif銆傚凡缁忓噯澶囧ソ骞跺彲浠ヤ娇鐢紝鍒欎负闈為浂锛屽鏋滀笉鏄紝鍒欎负闆躲€?渚?鈥揚repare the rtcfifo if not aLready done if not rtcfifo.ready() then rtcfifo.prepare() end RTC鐢ㄦ埛瀛樺偍鍣ㄦā鍧?浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?25 鏃?DiUS, Johny Mattsson Johny Mattsson rtcmem.c rtcmem妯″潡鎻愪緵瀵筊TC (瀹炴椂鏃堕挓)瀛樺偍鍣ㄧ殑鍩烘湰璁块棶銆?ESP8266涓殑RTC鍖呭惈鍐呭瓨瀵勫瓨鍣紝鑳藉鍦ㄦ繁搴︾潯鐪犱腑骞稿瓨涓嬫潵锛屽洜姝ら潪甯搁€傚悎鍦ㄦ暣涓潯鐪犲懆 鏈熷唴淇濇寔鐘舵€併€傛湁浜涘唴瀛樻槸涓虹郴缁熶娇鐢ㄨ€屼繚鐣欑殑锛屼絾128涓彃妲?姣忎釜32浣嶅)鍙緵搴旂敤绋嬪簭 浣跨敤銆傝繖涓ā鍧楁彁渚涘杩欎簺鐨勮鍐欐潈闄愩€?鐢变簬鍙敤鍐呭瓨鐨勬暟閲忛潪甯告湁闄愶紝鍥犳涓嶅瓨鍦ㄧ敤浜庝徊瑁佷娇鐢ㄧ壒瀹氭彃妲界殑鏈哄埗銆傛渶缁堢敤鎴峰簲璇ョ煡 閬撳摢浜涘唴瀛樼敤浜庝粈涔堬紝骞堕伩鍏嶅啿绐併€傝娉ㄦ剰锛屼竴浜汱ua妯″潡澹扮О鏌愪簺鎻掓Ы銆?杩欐槸rtcti me鍜宺tcfifo妯″潡鐨勯厤濂楁ā鍧椼€?rtcmem.read32 () 浠嶳TC鐢ㄦ埛瀛樺偍鍣ㄤ腑璇诲彇涓€涓垨澶氫釜32浣嶅€笺€?rtcmem.write32 () 灏嗕竴涓垨澶氫釜鍊煎啓鍏TC鐢ㄦ埛鍐呭瓨锛屼粠绱㈠紩idx寮€濮嬨€?rtcmem.read32 () 浠嶳TC鐢ㄦ埛瀛樺偍鍣ㄤ腑璇诲彇涓€涓垨澶氫釜32浣嶅€笺€?鍙ユ硶 rtcmem.read32(idx [3 num]) 鍙傛暟 銉籭dx浠庨浂寮€濮嬭鍙栫储寮?銉籲um瑕佽鍙栫殑鎻掓Ы鏁伴噺(榛樿鍊间负1) 杩斿洖 浠嶳TC鐢ㄦ埛瀛樺偍鍣ㄤ腑璇诲彇鐨勫€笺€?濡傛灉idx瓒呭嚭鏈夋晥鑼冨洿[0,127],鍒欐鍑芥暟涓嶈繑鍥炰换浣曞唴瀹广€?濡傛灉num缁撴灉瓒呭嚭鍙敤鍐呭瓨鐨勬湯灏撅紝鍒欒鍔熻兘浠呰繑鍥炴湁鏁堟彃妲戒腑鐨勬暟鎹€?val = rtcmem.read32(0) 鈥?Read the value in sLot 0 vail, val2 = rtcmem.read32(42j 2) 鈥?Read the vaLues in sLots 42 and 43 涔熷彲浠ョ湅鐪?rtcmem.write32() rtcmem.wiite32 () 浠庣储寮曞紑濮嬶紝灏嗕竴涓垨澶氫釜鍊煎啓鍏TC鐢ㄦ埛鍐呭瓨idx - 鍐欏叆鏈夋晥鑼冨洿澶栫殑绱㈠紩[0,12鍒€涓嶈捣浣滅敤銆?鍙ユ硶 ptcmem銉粀pite32(idx, val [4 val24 ]) 鍙傛暟 銉籭dx浠庨浂寮€濮嬪啓鍏ョ殑绱㈠紩銆傚鏋滅粰鍑哄涓€硷紝鍒欒嚜鍔ㄩ€掑銆?-val瀛樺偍鐨勪环鍊?32浣? -val2鈥?瀛樺偍鐨勯檮鍔犲€?鍙€? 杩斿洖 nil 渚?rtcmem.write32(0J 53) 鈥?Store the vaLue 53 in sLot 0 rtcmem.write32(42j 2, 5, 7) 鈥?Store the vaLues 2, 5 and 7 into sLots 42, 43 and 涔熷彲浠ョ湅鐪?rtcmem.read32() RTC鏃堕棿妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?25 S DiUS, JohnyMattsson, Bernd Meyer bmeyer@dius.com.au Johny Mattsson rtctime.c
rtctime妯″潡涓篘odeMCU鎻愪緵楂樼骇鏃堕挓鏀寔锛屽寘鎷湪娣卞害鐫$湢鍛ㄦ湡鍐呬繚鎸佹椂闂达紙浣跨敤鎻?渚況tctime.dsleep锛堬級鐨勪唬鏇縩ode.dsleep锛堬級锛夈€傝繖鍙互鐢ㄦ潵鏄剧潃寤堕暱鐢垫睜渚涚數鐨勪紶鎰熷櫒鑺?鐐圭殑鐢垫睜瀵垮懡锛屽洜涓烘瘡娆″敜閱掓椂涓嶅啀闇€瑕佸惎鍔≧F妯″潡浠ヤ究鑾峰緱鍑嗙‘鐨勬椂闂存埑銆?姝ゆā鍧楁棬鍦ㄤ笌NTP 锛堢綉缁滄椂闂村崗璁級涓€璧蜂娇鐢紝浠ュ缁堜繚鎸侀珮搴﹀噯纭殑瀹炴椂鎬с€傛椂闂存埑浠ュ井 绉掔簿搴︽彁渚涳紝鍩轰簬Unix Epoch 锛?970/01/0100:00:00锛夈€傜劧鑰岋紝鍑嗙‘搴︼紙瀹為檯涓婏級鏄?姣浠?鍐咃紝骞朵笖寰€寰€姣旇繖杩樺樊銆?鍦‥SP8266涓婁繚鎸佹椂闂村湪鎶€鏈笂鐩稿綋鍏锋湁鎸戞垬鎬с€傚敖绠¤鍛藉悕涓篟TC,浣哛TC骞朵笉鏄湡姝f剰涔?涓婄殑瀹炴椂鏃堕挓銆傝櫧鐒跺畠鍦ㄦā鍧楀浜庣潯鐪犵姸鎬佹椂纭疄淇濇寔璁℃暟鍣ㄦ淮绛旂姸鎬侊紝浣嗘槸瀹冪殑鍑嗙‘鎬ч珮 搴︿緷璧栦簬鑺墖鐨勬俯搴︺€傛墍杩版俯搴﹀湪鑺墖杩愯鏃跺拰浼戠湢鏃堕棿涔嬮棿鏄剧潃鍙樺寲锛岃繖鎰忓懗鐫€鍦ㄨ姱鐗囧伐 浣滄椂鎵ц鐨勪换浣曟牎鍑嗗湪鑺墖杩涘叆鐫$湢涔嬪悗浠呬粎鏄煭鏆傜殑銆傚洜姝わ紝闇€瑕佸湪鏁翠釜鐫$湢鍛ㄦ湡涓帹瀵?鍑烘牎鍑嗗€硷紝浠ヤ究瀹炵幇鍑嗙‘鐨勬椂闂翠繚鎸併€傝繖鏄繖涓ā鍧楁墍鍋氱殑浜嬫儏涔嬩竴銆?鏃堕棿淇濇寔闂鏇村鏉傜殑鏄紝ESP8266鍦ㄤ笁绉嶄笉鍚岀殑鏃堕挓棰戠巼涓嬪伐浣滐細姝e父鍚姩鏃朵负52MHz, 姝e父宸ヤ綔鏃朵负80MHz,濡傛灉鍚姩鍒欎负160MHz銆傛湰鍗曞厓鑺辫垂浜嗙浉褰撻暱鐨勬椂闂存潵鑰冭檻鎵€鏈夎繖 浜涳紝浠ラ€傚綋鍦颁繚鎸佹椂闂淬€?瑕佸惎鐢ㄨ繖涓ā鍧楋紝鑷冲皯闇€瑕佺粰涓€娆″弬鑰冩椂闂达紙閫氳繃rtctime.set锛堬級锛夈€備负浜嗚幏寰楁渶浣崇殑绮?搴︼紝寤鸿瀹氭湡鎻愪緵鍙傝€冩椂闂淬€傝sntp.syncO鍔熻兘鏈変竴涓畝鍗曠殑鏂规硶鏉ュ仛鍒拌繖涓€鐐广€傛彁渚涘弬 鑰冩椂闂磋嚦灏戜袱娆℃槸閲嶈鐨勶紝绗簩娆℃槸鍦ㄦ繁搴︾潯鐪犱箣鍚庛€?璇锋敞鎰忥紝铏界劧rtctime妯″潡鍙互鍦ㄦ繁搴︾潯鐪犱腑淇濇寔鏃堕棿锛屼絾濡傛灉妯″潡鎰忓閲嶇疆锛屽皢浼氭氮璐规椂 闂淬€?杩欎釜妯″潡鍙互琛ュ伩娌℃湁鎸夌収瑕佹眰鐨勯€熺巼杩愯鐨勫簳灞傛椂閽熴€傝皟鏁存槸鍦?浜?2 锛堝嵆绾?.25ppb锛?1 閮ㄥ垎鐨勬楠ゃ€傚鏋渟ntp.sync锛堬級浣跨敤autorepeat鏍囧織璁剧疆璋冪敤锛屽垯鑷姩瀹屾垚姝よ皟闈堛€傝垂鐜?鍙互浣跨敤set锛堬級涓嬮潰鐨勫姛鑳借缃€傚钩鍙板惎鍔ㄦ椂锛岄粯璁や负0 锛堝嵆鏍囩О锛夈€傛ā鍧楁牱鏈樉绀哄疄闄呮椂 閽熼鐜囦笌娓╁害鏈夊叧锛屼絾閫氬父鍦ㄩ瀹氶鐜囩殑5ppm浠ュ唴銆傝繖杞寲涓烘瘡鏈?5绉掑乏鍙炽€?鍦ㄨ嚜鍔ㄦ洿鏂版ā寮忎笅锛屾椂閽熼鐜囧彲鑳介渶瑕佸嚑涓皬鏃舵墠鑳借揪鍒版纭殑鍊笺€備箣鍚庯紝璺熻釜鐨勬椂闂村皢鍙?鍐充簬NTP鏈嶅姟鍣ㄧ殑鏃堕棿鎴冲彉鍖栭噺銆傚鏋滀粬浠帴杩戯紝閭d箞鏃堕棿灏嗚拷韪埌姣宸﹀彸銆傚鏋滆窛绂昏緝 杩滐紙渚嬪寰€杩?00ms锛?鍒欐椂闂磋窡韪細绋嶅樊涓€浜涳紝浣嗛€氬父鍦?0ms鍐呫€?銆傞噸瑕?姝ゆā鍧椾娇鐢≧TC鍐呭瓨鎻掓Ы0-9 锛堝惈锛夈€備竴鏃tctime.set锛堬級 浣跨敤杩欎簺RTC鍐呭瓨鎻掓Ы銆?杩欐槸rtcmem鍜孲NTP妯″潡鐨勯厤濂楁ā鍧椼€?rtctimedsleep () 灏咵SP8266缃簬娣卞害鐫$湢妯″紡锛屽鑺傜偣銆?rtctime.dsleep_aligned () 瀵逛簬闇€瑕侀珮瑙勬牸鍙栨牱鐨勫簲鐢紝姝ゅ姛鑳介潪甯告湁鐢ㄣ€?rtctime.epoch2cal () 灏哢nix鏃堕棿鎴宠浆鎹负0鍘嗘牸寮忋€?rtctimeget () 杩斿洖褰撳墠鏃堕棿銆?rtctimeset () 鍦║nix绾厓(io )涓皢rtctime璁剧疆涓轰竴涓粰瀹氱殑鏃堕棿鎴炽€?/p>
rtctime.dsleep () 浣縀SP8266杩涘叆娣卞害鐫$湢妯″紡node.dsleep() 掳瀹冧笉鍚屼簬node.dsleep()浠ヤ笅鏂归潰锛?-鏃堕棿淇濇寔鍦ㄦ繁搴︾潯鐪犮€傚嵆rtctime.getO浼氱户缁伐浣?鎻愪緵鐨勬椂闂存槸鐫″墠鍙敤)銆?-杩欎釜璋冪敤姘镐笉杩斿洖銆傝妯″潡绔嬪嵆鐫¤銆傝繖鏃㈡槸涓轰簡鏀寔鍑嗙‘鐨勬椂闂翠繚鎸佸拰闄嶄綆鍔熻€椼€?鈥㈢潯瑙夌殑鏃堕棿閫氬父浼氭瘮浠ュ墠鍑嗙‘寰楀node.dsleep()銆?-鐫$湢鏃堕棿涓洪浂骞朵笉鎰忓懗鐫€鏃犻檺鏈熺潯鐪狅紝鑰屾槸琚В閲婁负闆堕暱搴︾潯鐪犮€?褰撶潯鐪犲畾鏃跺櫒鍒版湡鏃讹紝骞冲彴閲嶆柊鍚姩骞朵笖lua浠g爜涓巌nit.lua鏂囦欢涓€璧峰惎鍔ㄣ€傛椂閽熻瀹氬悎鐞?鍑嗙‘銆?鍙ユ硶 rtctime.dsleep(microseconds [, option]) 鍙傛暟 鈥icroseconds鐫$湢鏃堕棿鐨勫井绉掓暟銆傛渶澶у€兼槸4294967295us,鎴杶71鍒嗛挓銆?鈥ption鐫$湢閫夐」锛岃鍙傞槄node.dsleep()鍏蜂綋淇℃伅銆?杩斿洖 杩欎釜鍑芥暟涓嶈繑鍥炪€?渚?鈥搒Leep for a minute rtctime.dsleep(601000000) 鈥搒Leep for 5 secondsj do not start RF on wakeup rtctime , dsleep(5000000, 4) rtctime.dsleep_aligned () 瀵逛簬闇€瑕侀珮瑙勬牸鍙栨牱鐨勫簲鐢紝姝ゅ姛鑳介潪甯告湁鐢ㄣ€傚畠鎻愪緵浜嗕竴绉嶇畝鍗曠殑鏂规硶鏉ュ疄鐜?鍦ㄤ笅涓€涓? 鍒嗛挓鐨勮竟鐣屼笂"閱掓潵锛岃€屼笉蹇呭湪杩斿洖鐫$湢涔嬪墠鏄庣‘鍦拌€冭檻妯″潡宸辩粡娲诲姩浜嗗涔呫€?鍙ユ硶 rtctime.dsleep_aligned(aligned_uSj minsleep_us [, option]) 鈥ligned_us浠ュ井绉掍负鍗曚綅鐨勮竟鐣岄棿闅?-minsleep_us鏈€灏忕殑鏃堕棿灏嗙潯瑙夛紝濡傛灉闇€瑕佽烦杩囦竴涓椂闂撮棿闅斻€傝繖閫傜敤浜庡湪ESP8266杩?鍏ヤ紤鐪犳ā鎴栦箣鍓嶅紑濮嬮噯鏍疯鏁扮殑浼犳劅鍣紝鐒跺悗鍦ㄥ敜閱掓椂璇诲彇銆傝繖閲宮insleep.us搴旇鏄?浼犳劅鍣ㄩ噰鏍锋墍闇€鐨勬渶鐭椂闂淬€?鈥ption涓庝箣涓€鏍穌sleep() , option濡傛灉鎸囧畾锛屽垯璁剧疆鐫$湢閫夐」銆?渚?鈥搒Leep at Least 3 seconds, then wake up on the next 5-second boundary rtctime.dsleep_aligned(51000000j 3*1000000) rtctime.epoch2cal () 灏哢nix鏃堕棿鎴宠浆鎹负鏃ュ巻鏍煎紡銆傛椂鍖哄拰DST鏍℃閮戒笉浼氭墽琛?缁撴灉鏄疷TC鏃堕棿銆?鍙ユ硶 rtctime.epoch2cal(timestamp) 鍙傛暟 timestamp鑷猆nix绾厓浠ユ潵鐨勭鏁?杩斿洖 鍖呭惈瀛楁鐨勮〃鏍硷細 -year 1970銆?038骞?銉籱on鏈勾搴?銆?2鏈堜唤 鈥ay褰撴湀1銆?1鏃?鈥our 鈥in 鈥ec 鈥day褰撳勾1銆?66澶?鈥day褰撳墠1 ~7鏃ュ急(鍛ㄦ棩1鐐? 渚?tm = rtctime.epoch2cal(rtctime.get()) print(string.format("%04d/%02d/%02d %02d:%02d:%02d"4 tm[鈥測ear鈥漖, tm[鈥渕on鈥漖銆弔m["i rtctime.get () 杩斿洖褰撳墠鏃堕棿銆傚鏋滃綋鍓嶆椂闂翠笉鍙敤锛屽垯杩斿洖闆躲€?rtctime.get() 鍙傛暟 娌℃湁 杩斿洖 涓夊€兼椂闂存埑鍖呭惈锛?-sec鑷粠Unix绾厓浠ユ潵鐨勭鏁?鈥see寰鐨勯儴鍒?, rate褰撳墠鏃堕挓棰戠巼鍋忕Щ銆傝繖鏄痳ate / 2A32 (鍚嶄箟鍒╃巼涓?)鐨勫亸绉婚噺銆備緥濡傦紝4295鐨?鍊煎搴斾簬鐧句竾鍒嗕箣涓€銆?渚?sec, usee, rate = rtctime.get() 涔熷彲浠ョ湅鐪?rtctime.set() rtctime.set () 鍦║nix鏃朵唬灏唕tetime璁剧疆涓虹粰瀹氱殑鏃堕棿鎴?鍗充粠1970/01/01鍗堝寮€濮?銆傚鏋滄ā鍧楄繕娌℃湁淇?鎸佹椂闂达紝鐜板湪灏卞紑濮嬨€傚鏋滄ā鍧楀繁缁忎繚鎸佹椂闂达紝鍒欎娇鐢ㄨ繖涓椂闂存潵甯姪璋冩暣鍏跺唴閮ㄦ牎鍑嗗€笺€?娉ㄦ剰浠庢案涓嶉€€姝ヨ繑鍥炵殑鏃堕棿鎴炽€傚鏋滄湁蹇呰鐨勮瘽锛屾椂闂翠細琚窐姹帮紝骞堕€愭笎琚拷 涓娿€俽tetime.get() 寮虹儓寤鸿閫氳繃NTP (璇峰弬闃匰NTP妯″潡)锛孏PS鎴栧叾浠栭珮绮惧害鏃堕棿婧愯幏鍙栨椂闂存埑銆?闈炲父鎺ヨ繎鏃朵唬鐨勫€间笉琚敮鎸併€傝繖鏄繚鎸佸唴瀛樿姹傚敖鍙兘浣庣殑鍓綔鐢ㄣ€傝€冭檻鍒板畠涓嶅啀鏄?970 骞达紝杩欎笉琚涓烘槸涓€涓棶棰樸€?鍙ユ硶 rtetime.set(seconds, microseconds^ [rate]) 鍙傛暟 -seconds浠嶶nix绾厓绠楄捣鐨勭鏁伴儴鍒?鈥icroseconds寰鐨勯儴鍒?鈥ate鍦ㄥ悓鏍风殑鍗曚綅姣旂巼rtetime.get()銆傚鏋滄湭鎸囧畾锛屽垯瀛樺偍鐨勯€熺巼涓嶄細琚慨鏀广€?杩斿洖 nil 渚?鈥揝et time to 2015 JuLy 9, 18:29:49 rtetime.set(1436430589j 0) 涔熷彲浠ョ湅鐪?sntp.sync() 鏂囨。銆嬭嫳璇€濇ā鍧椔籹i7021 Si7021妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?9鏃?fetchbot fetchbot si7021.c
璇ユā鍧楁彁渚涘Si7021婀垮害鍜屾俯搴︿紶鎰熷櫒鐨勮闂? si7021.firmware () 闃呰S7021浼犳劅鍣ㄧ殑鍐呴儴鍥轰欢鐗堟湰銆?si7021.read () si7021.serial () 璇诲彇Si7021浼犳劅鍣ㄧ殑涓€у寲64锝涚珛鐢靛瓙搴忓垪鍙枫€?si7021.setting () 璁剧疆浼犳劅鍣ㄩ厤缃瘎瀛樺櫒鏉ヨ皟鏁存祴閲忓垎杈ㄧ巼锛岀墖涓婂姞鐑櫒鍜岃鍙栫數婧愮數鍘嬬姸 鎬併€?si7021.setup () 鍦ㄥ浐瀹氱殑FC鍣ㄤ欢鍦板潃(0x40)涓婂垵濮嬪寲鍣ㄤ欢銆?/p>
si7021.firmware () 闃呰Si7021浼犳劅鍣ㄧ殑鍐呴儴鍥轰欢鐗堟湰銆?鍙ユ硶 si7021.firmware() 鍙傛暟 娌℃湁 杩斿洖 fwrev鍥轰欢鐗堟湰鍥轰欢鐗堟湰1.0鍥轰欢鐗堟湰2.0 0XFF 0x20 渚?local sdaj scl = 6, 5 i2c.setup(0j sda, scl> i2c.SL0W) 鈥?caLL i2c.setup() onLy once si7021.setup() fwrev = si7021.firmware() print(string.format(MFW: %X\r\n"J fwrev)) si7021.read () si7021.read() 鍙傛暟 娌℃湁 杩斿洖 鈥um婀垮害(瑙佷笅闈㈢殑娉ㄩ噴) 鈥emp娓╁害(瑙佷笅闈㈢殑娉ㄩ噴) 鈥um_dec婀垮害灏忔暟 鈥emp_dec娓╁害鍗佽繘鍒?鉂舵敞鎰?濡傛灉浣跨敤娴姩鍥轰欢鐒跺悗hum鍜宼emp鏄诞鐐规暟銆傚湪鏁存暟鍥轰欢涓婏紝鏈€鍚庣殑鍊煎繀椤讳粠hum 鍜?hum_dec / temp 鍜岃繛鎺ヨ捣鏉?temp_dec銆?渚?local sda, scl = 6, 5 i2c.setup(0J sda, scl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once si7021.setup() hum, temp, hum_deCj temp_dec = si7021.read() 鈥揑nteger firmware using this exampLe print(string.format(鈥淗umidity:\t\t%d.%03d\nTemperature:\t%d.%03d\n鈥? hum, hum 鈥揊Loat firmware using this exampLe print(鈥淗umidity: 鈥溾€um鈥︹€漒n鈥濃€?Temperature: "鈥emp) si7021.serial () 璇诲彇Si7021浼犳劅鍣ㄧ殑涓€у寲64浣嶇數瀛愬簭鍒楀彿銆?鍙ユ硶 si7021.serial() 鍙傛暟 娌℃湁 杩斿洖 鈥?sna 32浣嶅簭鍒楀彿閮ㄥ垎a , snb 32浣嶅簭鍒楀彿閮ㄥ垎b,楂樹綅瀛楄妭鍖呭惈璁惧鏍囪瘑 O 0X00鎴?xFF宸ョ▼鏍峰搧 O 0x0D 13 Si7013 O 0x14 20 Si7020 O 0X15 21 S17021 渚?local sda, scl = 6, 5 i2c.setup(0, sda, scl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once si7021.setup() sna, snb = si7021.serial() print(string.format(鈥淪N:\t\t%X%X\nDevice:\tSi70%d鈥? sna, snb, bit.pshift(snb禄24) si7021.setting () 璁剧疆浼犳劅鍣ㄩ厤缃瘎瀛樺櫒鏉ヨ皟鏁存祴閲忓垎杈ㄧ巼锛岀墖涓婂姞鐑櫒鍜岃鍙栫數婧愮數鍘嬬姸鎬併€?鍙ユ硶 si7021.setting(RESOLUTION[J HEATER, HEATER_SETTING]) 鍙傛暟 銉?RESOLUTION o si7021.RH12_TEMP14 鐩稿婀垮害12浣?娓╁害14浣?榛樿) 0 si7021.RH08_TEMP12 鐩稿婀垮害8浣?娓╁害12浣?0 si7021.RH10_TEMP13 鐩稿婀垮害10浣?娓╁害13浣?0 si7021.RHll_TEMPll 鐩稿婀垮害11浣?娓╁害11浣?鈥?HEATER鍙€夌殑 0 si7021.HEATER_ENABLE鐗囦笂鍔犵儹鍣ㄥ惎鐢?o si7021.HEATER_DISABLE鐗囦笂鍔犵儹鍣ㄧ鐢?榛樿) 鈥?HEATER_SETTING 鍙€夌殑 o 0x00 - 0x0F 3.09 mA - 94.20 mA
杩斿洖 鈥?resolution 0 0 鐩稿婀垮害12浣?娓╁害14浣?0 1 鐩稿婀垮害8浣?娓╁害12浣?0 2 鐩稿婀垮害10浣?娓╁害13浣?0 3 鐩稿婀垮害11浣?娓╁害11浣?鈥?vdds o 0 VDD姝e父(1.9V-3.6V) o 1 VDD浣?1.8V-1.9V) 鈥eater 銆傘€傛畫 銆?鍚敤 鈥eater_setting o 0 - 15 local id, sda, scl = 0, 6, 5 i2c.setupCid, sda, scl, i2c.SLOW) 鈥?coLL i2c.setup() onLy once si7021.setup() resj vdds, heater, heater_set = s17021.setting(s17021.RH12_TEMP14) res, vdds, heater, heater_set = si7021.setting(si7021.RH12_TEMP14, si7021.HEATER si7021.setup () 鍦ㄥ浐瀹氱殑銆嶤鍣ㄤ欢鍦板潃(0x40)涓婂垵濮嬪寲鍣ㄤ欢銆?鍙ユ硶 si7021.setup() 鍙傛暟 娌℃湁 杩斿洖 nil local sda, scl = 6, 5 i2c.setup(0, sdascl, i2c.SLOW) 鈥?caLL i2c.setup() onLy once si7021.setup() Sigma-delta 妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?0鏃?浠spressif涓轰緥,ArnimLauger 闃垮凹濮嗏€㈡媺鏍?sigma_delta.c 璇ユā鍧楁彁渚涘sigma-delta缁勪欢鐨勮闂€傝繖鏄竴涓‖浠朵俊鍙峰彂鐢熷櫒锛屽彲浠ヨ繛鎺ュ埌闄ゅ紩鑴?涔嬪鐨?浠讳綍GPlOo
淇″彿鐨勪骇鐢熸槸鐢眘etprescale()鍜宻ettarget()鍔熻兘鎺у埗鐨勩€?-0銆堢洰鏍囷紲=128 1锛氶珮=(棰勫垎棰?1) /80寰 t鍛ㄦ湡=涓冮珮256/1鏍?-128銆堢洰鏍囷紲256 涓冧綆=(棰勫垎棰?1)/80寰 t鍛ㄦ椃浣庝綆256/ (256-鐩爣) 銉荤洰鏍?0 淇″彿鍋滃湪浣庝綅 鍦ㄣ€?12.5 kHz鐨勫浐瀹氶鐜嘝WM鍙互浣跨敤璇etpwmdutyO鍔熻兘銆?sigma_delta.close () 鍋滄淇″彿鐢熸垚锛屽苟鍦ㄦ寚瀹氱殑寮曡剼涓婇噸鏂板惎鐢℅PIO鍔熻兘銆?sigma_delta.setprescale () 璁剧疆棰勫垎棰戝€笺€?sigma_delta.setpwmduty () 浠ュ浐瀹氬熀棰戠殑PWM妯″紡鎿嶄綔sigma-del ta妯″潡= sigma_delta.settarget () 璁惧畾鐩爣鍊笺€?sigma_delta.setup () 鍋滄淇″彿鍙戠敓鍣ㄥ苟灏嗗叾璺敱鍒版寚瀹氱殑寮曡剼銆?/p>
sigma_delta.close () 鍋滄淇″彿鐢熸垚锛屽苟鍦ㄦ寚瀹氱殑寮曡剼涓婇噸鏂板惎鐢℅PIO鍔熻兘銆?鍙ユ硶 sigma_delta.close(pin) 鍙傛暟 pin 1銆?2, I銆傛寚鏁?杩斿洖 nil sigma_delta.setprescale () 璁剧疆棰勫垎棰戝€笺€?鍙ユ硶 'sigma_delta.setprescale (鍊? 鍙傛暟 value棰勫垎棰?鑷?55 杩斿洖 nil 涔熷彲浠ョ湅鐪?sigma_delta.settarget() sigma_delta.setpwmduty () 浠ュ浐瀹氬熀棰戠殑PWM妯″紡鎿嶄綔sigma-delta妯″潡銆?鍙ユ硶 sigma_delta.setpwmduty(ratio) 鍙傛暟 ratio 0鈥?55鐨勫崰绌烘瘮0鈥?00%,銆備娇淇″彿澶勪簬浣庣數骞?杩斿洖 nil 渚?鈥揳ttach generator to pin 2 sigma_delta.setup(2) 鈥搒et 50% duty cycle ratio (and impLicitLy start signaL) sigma_delta.setpwmduty(128) 鈥搒top sigma_delta.setpwmduty(0) 鈥搑esume with ~99.6% ratio sigma_delta , setpwmduty(255) 鈥搒top and detach generator from pin 2 sigma_delta.close(2) sigma_delta.settarget () 璁惧畾鏃ユ爣鍊笺€?鍙ユ硶 sigma_delta.settarget(value) 鍙傛暟 value鐩爣銆傚埌255 杩斿洖 nil 涔熷彲浠ョ湅鐪?sigma_delta.setprescale() sigma_delta.setup () 鍋滄淇″彿鍙戠敓鍣ㄥ苟灏嗗叾璺敱鍒版寚瀹氱殑寮曡剼銆?鍙ユ硶 sigma_delta.setup(pin) 鍙傛暟 pin 1銆?2, I銆傛寚鏁?杩斿洖 nil SJSON妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?鏃?鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?sjson
JSON鏀寔妯″潡銆傚厑璁稿JSON杩涜缂栫爜鍜岃В鐮併€?璇锋敞鎰忥紝宓屽琛ㄦ牸鍙兘闇€瑕佸ぇ閲忓唴瀛樻潵缂栫爜銆傝鍙戠幇鍐呭瓨涓嶈冻鐨勯敊璇紝璇蜂娇鐢╬call锛堬級 0 杩欐浠g爜浣跨敤娴佸紡json搴搄sonsl鏉ヨВ鏋愬瓧绗︿覆銆?杩欎釜妯″潡鍙互鐢ㄤ袱绉嶆柟寮忎娇鐢ㄣ€傛洿绠€鍗曠殑鏂规硶鏄娇鐢ㄥ畠浣滀负cjson鐨勭洿鎺ユ彃鍏ワ紙浣犲彲浠ヨ繖鏍?鍋歘G.cjson = sjson 锛夈€傛洿楂樼骇鐨勬柟娉曟槸浣跨敤娴佸紡鎺ュ彛銆傝繖鍏佽缂栫爜鍜岃В鐮佹樉鐫€鏇村ぇ鐨勫 璞°€?json null鐨勫鐞嗗涓嬶細 銉婚粯璁ゆ儏鍐典笅锛岃В鐮佸櫒浠h〃null浣滀负sjson.NULL 锛堣繖鏄竴涓猽serdata瀵硅薄锛夈€傝繖鏄痗json鐨勮 涓恒€?銉荤紪鐮佸櫒鎬绘槸灏嗕换浣晆serdata瀵硅薄杞崲涓簄ull銆?-鍙€夊湴锛屽彲浠ュ湪缂栫爜鍣ㄥ拰瑙g爜鍣ㄤ腑鎸囧畾鍗曚釜瀛楃涓层€傝瀛楃涓插皢鐢ㄤ簬缂栫爜/瑙g爜浠ヨ〃绀簀son 绌哄€笺€傝繖涓瓧绗︿覆涓嶅簲璇ュ湪鏁版嵁缁撴瀯鐨勫叾浠栧湴鏂逛娇鐢ㄣ€備竴涓悎閫傜殑浠峰€煎彲鑳芥槸0 褰撶紪鐮佷竴涓猯ua瀵硅薄鏃讹紝濡傛灉鎵惧埌涓€涓嚱鏁帮紝閭d箞瀹冭璋冪敤锛堟病鏈夊弬鏁帮級锛屽苟涓旓紙鍗曚釜锛夎繑鍥?鍊艰缂栫爜鍦ㄥ嚱鏁扮殑鍦版柟銆?sjson.encoder () 杩欏皢鍒涘缓涓€涓紪鐮佸櫒瀵硅薄锛屽彲浠ュ皢LUA瀵硅薄杞崲涓篔SON缂栫爜鐨勫瓧绗︿覆銆?sjson.encoder锛氶槄璇?杩欎細寰楀埌涓€澶у潡JSON缂栫爜鏁版嵁銆?sjson.encode () 灏哃ua琛ㄧ紪鐮佷负JSON瀛楃涓层€?sjson.decoder () 杩欎娇寰楄В鐮佸櫒瀵硅薄鍙互灏咼SON缂栫爜鐨勫瓧绗︿覆瑙f瀽涓簂ua瀵硅薄銆?sjson.decoder锛氬啓 杩欐彁渚涗簡鏇村鐨勬暟鎹鍒嗘瀽鍒發ua瀵硅薄涓€?sjson.decoder锛氱粨鏋?杩欏皢鑾峰緱瑙g爜鐨刲ua瀵硅薄锛屾垨鑰呭鏋滆В鐮佸皻鏈畬鎴愶紝鍒欎細寮曞彂閿欒銆?sjson.decode () 瑙g爜涓€涓狫SON瀛楃涓插埌涓€涓狶ua琛ㄣ€?甯搁噺 鏈変竴涓父鏁?sjson銆?/p>
sjson.encoder () 杩欏皢鍒涘缓涓€涓紪鐮佸櫒瀵硅薄锛屽彲浠ュ皢LUA瀵硅薄杞崲涓篔SON缂栫爜鐨勫瓧绗︿覆o 鍙ユ硶 sjson.encoder(table [, opts]) 鍙傛暟 銉籺able鏁版嵁杩涜缂栫爜 鈥?opts 涓€涓彲閫夌殑閫夐」琛ㄣ€傚彲鑳界殑鏉$洰鏄細 -depth缂栫爜琛ㄦ墍闇€鐨勬渶澶х紪鐮佹繁搴︺€傞粯璁ゅ€兼槸20,鍑犱箮閫傜敤浜庢墍鏈夋儏鍐点€?銉籲ull灏嗗瓧绗︿覆鍊艰涓簄ull銆?杩斿洖 涓€涓?sjson.encoder 瀵硅薄銆?sjson.encoder锛?闃呰 杩欎細寰楀埌涓€澶у潡JSON缂栫爜鏁版嵁銆?鍙ユ硶 encoder:read([size]) 鍙傛暟 銉籹ize 涓€涓彲閫夌殑杩斿洖瀛楄妭鏁板€笺€傞粯璁ゅ€兼槸1024銆?杩斿洖 鏈€澶氬彲鍖呭惈size瀛楄妭鐨勫瓧绗︿覆锛屾垨鑰卬il缂栫爜瀹屾垚涓旀墍鏈夋暟鎹凡琚繑鍥炪€?渚?浠ヤ笅绀轰緥鎵撳嵃鍑?浠?4瀛楄妭鍧椾负鍗曚綅)鍖呭惈鏂囦欢绯荤粺涓瘡涓枃浠剁殑鍓?k鐨凧SON缂栫爜鐨勫瓧绗?涓层€傛€诲瓧绗︿覆鍙互澶т簬NodeMCU涓婄殑鎬诲唴瀛橀噺銆?function files() result = () for k,v in palrs(file.list()) do result[k] = function() return file.open(k):read(4096) end end return result end local encoder = sjson.encoder(files()) while true do data = encoder:read(64) if not data then break end print(data) end sjson.encode () 灏哃ua琛ㄧ紪棣呬负JSON瀛楃鍗樸€傝繖鏄负浜嗗唻鍚庡吋瀹瑰彥鎻愪緵鏃充究鍒╀竾娉昪json銆?鍙ユ硶 sjson.encode(table [, opts]) 鍙傛暟 銉籺able鏁版嵁杩涜缂栫爜 鈥?opts 涓€涓彲閫夌殑閫夐」琛ㄣ€傚彲鑳界殑鏉$洰鏄細 銆俤epth缂栫爜琛ㄦ墍闇€鐨勬渶澶х紪鐮佹繁搴︺€傞粯璁ゅ€兼槸20,鍑犱箮閫傜敤浜庢墍鏈夋儏鍐点€?0 null灏嗗瓧绗︿覆鍊艰涓簄ull銆?杩斿洖 JSON瀛楃涓?渚?ok, json = pcall(sjson.encode, {key=鈥渧alue鈥潁) if ok then print(json) else print(鈥渇ailed to encode!鈥? end sjson.decoder () 杩欎娇寰楄В鐮佸櫒瀵硅薄鍙互灏咼SON缂栫爜鐨勫瓧绗︿覆瑙f瀽涓簂ua瀵硅薄銆傚彲浠ヤ负鎵€鏈夋柊鍒涘缓鐨刲ua琛ㄦ寚瀹?metatableo杩欏厑璁告偍鍦ㄦ彃鍏ュ埌姣忎釜琛ㄤ腑鏃跺鐞嗘瘡涓€?閫氳繃瀹炴柦璇?newindex鏂规硶)銆?鍙ユ硶 sjson.decoder([opts]) 鍙傛暟 鈥pts 涓€涓彲閫夌殑閫夐」琛ㄣ€傚彲鑳界殑鏉$洰鏄細 銆俤epth缂栫爜琛ㄦ墍闇€鐨勬渶澶х紪鐮佹繁搴︺€傞粯璁ゅ€兼槸20,鍑犱箮閫傜敤浜庢墍鏈夋儏鍐点€?0 null灏嗗瓧绗︿覆鍊艰涓簄ull銆?掳 metatable 涓€涓〃浣滀负杩斿洖瀵硅薄涓墍鏈夋柊琛ㄧ殑鍏冩暟鎹€?杩斿洖 涓€涓?sjson.decoder 瀵硅薄 鍏冭〃 鍦ㄥ厓琛ㄤ腑鏈変袱涓富瑕佺殑鏂规硶(濡傛灉瀛樺湪鐨勮瘽)銆?鈥?newindex杩欐槸鍒涘缓鏂拌〃鏍煎厓绱犳椂璋冪敤鐨勬爣鍑嗘柟娉曘€?-checkpath杩欒璋冪敤(濡傛灉瀹氫箟鐨勮瘽)锛屾瘡褰撳垱寤轰竴涓柊琛ㄣ€傚畠琚皟鐢ㄤ簡涓や釜鍙傛暟锛?掳 table杩欐槸鏂板垱寤虹殑琛ㄦ牸 O path杩欐槸浠庢牴鏃抽敭鏃冲垪琛ㄣ€倀rue濡傛灉浠荤妇鏋滀腑闇€瑕佽瀵瑰啟锛屽垯蹇呴』杩斿洖锛宖alse 鍚﹀垯杩斿洖銆?渚嬪锛岃В鐮佹椂{ 鈥渇oo鈥? [1, 2, []] },妫€鏌ヨ矾寰勫皢琚皟鐢ㄥ涓嬶細 鈥heckpath({}, {})鐨則able璇存硶鏄紝灏嗕笌JSON瀵硅薄鐨勫€兼墍瀵瑰簲鐨勫璞°€?-checkpath({}, {鈥渇oo鈥潁)鐨則able璇存硶鏄紝灏嗕笌澶朖SON鏁扮粍鐨勫€兼墍瀵瑰簲鐨勫璞°€?鈥heckpath({}, {鈥渇oo鈥? 3))鐨則able璇存硶鏄紝灏嗗搴斾簬绌虹殑鍐呴儴JSON闃靛垪鐨勫璞°€?褰揷heckpath璋冪敤璇ユ柟娉曟椂锛宮etatable宸茬粡涓庢柊琛ㄧ浉鍏宠仈銆傚洜姝heckpath ,濡傛灉闇€瑕侊紝 璇ユ柟娉曞彲浠ュ彇浠e畠銆備緥濡傦紝濡傛灉鎮ㄦ鍦ㄨВ 鐮侊紝{ 鈥渇oo鈥? { 鈥渂ar鈥? 鈥渃at鈥? [5] } }骞朵笖鐢变簬鏌愮鍘熷洜锛屾偍涓嶆兂鎹?鑾?bar"瀵嗛挜鐨勫€硷紝閭d箞鏈夊绉嶆柟娉曞彲浠ユ墽琛屾鎿嶄綔锛?鈥㈠湪 newindex metamethod涓紝鍙渶妫€鏌ュ瘑閽ョ殑鍊硷紝rawset濡傛灉瀵嗛挜鏄烦杩?bar" o 杩欏彧閫傜敤浜庡鏋滀綘鎯宠烦杩囨墍鏈夌殑"bar"閿€?鈥㈠湪璇heckpath鏂规硶涓紝濡傛灉璺緞鏄痆鈥渇oo鈥漖,鍒欒繑鍥瀎alse銆?鈥娇鐢ㄤ互涓嬪唴瀹筩heckpath : checkpat h=f unction (tab j path) tab[鈥?json_path鈥?] = path return true end 杩欏皢 淇濆瓨姣忎釜鏋勯€犲璞$殑璺緞銆傜幇鍦ㄨ鈥攏ewindex鎴库枲娉曞彲浠ユ墽琛屾洿澶嶆潅鐨勮繃婊ゃ€?鑳藉杩囨护鐨勫師鍥犳槸瀹冭兘澶熷湪鍐呭瓨鍙楅檺鐨勫钩鍙颁笂澶勭悊闈炲父澶х殑JSON鍝嶅簲銆傝澶欰PI浼氳繑鍥炲ぇ閲?鐨勪俊鎭紝杩欎簺淇℃伅浼氳秴鍑哄钩鍙扮殑鍐呭瓨棰勭畻銆備緥 濡傦紝 https://api.github.com/repos/nodemcu/nodemcu-firmware/contents 瓒呰繃 13kB,浣?鏄紝濡傛灉浣犲彧闇€瑕乨ownload_url閽ュ寵锛岄偅涔堟€诲ぇ灏忕害涓?00B銆傝繖鍙互鐢ㄤ竴涓畝鍗?鐨?newindex鏂规硶鏉ュ鐞嗐€?sjson.decoder锛氬啓 杩欐彁渚涗簡鏇村鐨勬暟鎹鍒嗘瀽鍒發ua瀵硅薄涓€?鍙ユ硶 decoder:write(string) 鍙傛暟 鈥tring涓嬩竴鍧桱SON缂栫爜鏁版嵁 杩斿洖 鏋勯€犵殑lua瀵硅薄鎴杗il瑙g爜灏氭湭瀹屾垚銆?閿欒 濡傛灉鍦ㄨВ鐮佽繃绋嬩腑鍑虹幇鍒嗘瀽閿欒锛屽垯浼氭姏鍑洪敊璇紝骞惰В鏋愬垎鏋愩€傝瀵硅薄涓嶈兘鍐嶆浣跨敤銆?sjson.decoder锛?缁撴灉 杩欏皢鑾峰緱瑙g爜鐨刲ua瀵硅薄锛屾垨鑰呭鏋滆В鐮佸皻鏈畬鎴愶紝鍒欎細寮曞彂閿欒銆傝繖鍙互琚娆¤皟鐢紝骞朵笖 姣忔閮戒細杩斿洖鐩稿悓鐨勫璞°€?decoder:result() 閿欒 濡傛灉瑙g爜娌℃湁瀹屾垚锛屽垯浼氭姏鍑洪敊璇€?渚?local decoder = sjson.decoder() decoder:write(鈥淸10, 1鈥? decoder:write(鈥淚鈥? decoder:write(鈥? \鈥漟oo\鈥漖鈥? for k,v in pairs(decoder:result()) do print (k, v) end 涓嬩竴涓ず渚嬫紨绀轰簡浣跨敤metatable鍙傛暟銆傚湪杩欑鎯呭喌涓嬶紝瀹冨彧鏄墦鍗版搷浣滐紝浣嗗鏋滈渶瑕侊紝瀹冨彲 浠ュ畬鍏ㄧ姝㈠垎閰嶃€?local decoder = sjson.decoder({metatable= { newindex=function(t,k,v) print(鈥淪etting '鈥?鈥?k 鈥?鈥溾€?= '鈥?鈥?tostrinj rawset(tkjV) end}}) decoder jwriteCtl, 2, {鈥渇oo鈥?: 鈥渂ar鈥潁]鈥? sjson.decode () 瑙g爜涓€涓狫SON瀛楃涓插埌涓€涓狶ua琛ㄣ€傝繖鏄负浜嗗悜鍚庡吋瀹硅€屾彁渚涚殑渚垮埄鏂规硶cjson銆?鍙ユ硶 sjson.decode(str[, opts]) 鍙傛暟 -str JSON瀛楃涓叉潵瑙g爜 鈥?opts 涓€涓彲閫夌殑閫夐」琛ㄣ€傚彲鑳界殑鏉$洰鏄細 O depth缂栫爜琛ㄦ墍闇€鐨勬渶澶х紪鐮佹繁搴︺€傞粯璁ゅ€兼槸20,鍑犱箮閫傜敤浜庢墍鏈夋儏鍐点€?o null灏嗗瓧绗︿覆鍊艰涓簄ull銆?銆俶etatable 涓€涓〃浣滀负杩斿洖瀵硅薄涓墍鏈夋柊琛ㄧ殑鍏冩暟鎹€傝鍙傞槄sjson.decoder銆備笂 闈㈢殑鎻忚堪涓殑metatable閮ㄥ垎銆?杩斿洖 JSON鏁版嵁鐨凩ua琛ㄦ牸琛ㄧず 閿欒 濡傛灉瀛楃涓蹭笉鏄湁鏁堢殑JSON,鍒欎細鎶涘嚭閿欒銆?渚?t = sjson.decode(鈥檣鈥渒ey鈥?鈥渧alue鈥潁') for k,v in pairs(t) do print(k鈥檝) end 甯搁噺 鏈変竴涓父閲?sjson.null鍦╨ua缁撴瀯涓敤浜庤〃绀哄瓨鍦↗SON nulL SNTP妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 浜岄浂涓€浜斿勾鍏湀涓夊崄闆舵棩 DiUS, Johny Mattsson Johny Mattsson sntp.c
SNTP妯″潡瀹炵幇绠€鍗曠殑缃戠粶鏃堕棿Procotol瀹㈡埛绔€傝繖鍖呮嫭瀵光€渁nycast" NTP妯″紡鐨勬敮鎸侊紝濡傛灉鎮?鐨勭綉缁滀腑鐨凬TP鏈嶅姟鍣ㄦ敮鎸侊紝鍒欎笉闇€瑕佺煡閬揘TP鏈嶅姟鍣ㄧ殑IP鍦板潃銆傞粯璁ゆ儏鍐典笅锛岃繖灏嗛€氳繃 3.nodemcu.pool.ntp.org浣跨敤鏈嶅姟鍣∣.nodemcu.pool.ntp.org銆傝繖浜涙湇鍔″櫒鍑犱箮閫傜敤浜庢墍鏈夌敤 閫斻€?褰撲笌rtctime妯″潡涓€璧风紪璇戞椂锛屽畠杩樻彁渚涗簡涓庡畠鐨勬棤缂濋泦鎴愶紝鍙兘浼氬噺灏戝湪sntp.sync()娌℃湁 浠讳綍鍙傛暟鐨勬儏鍐典笅鑾峰緱NTP鍚屾鐨勮繃绋嬨€?sntp.sync () 璇曞浘鑾峰緱鏃堕棿鍚屾銆?sntp.setoffset 璁剧疆rtc鏃堕挓鍜孨TP鏃堕棿涔嬮棿鐨勫亸绉婚噺銆?sntp.getoffset 鑾峰彇rtc鏃堕挓鍜孨TP鏃堕棿涔嬮棿鐨勫亸绉婚噺銆?/p>
sntp.sync () 璇曞浘鑾峰緱鏃堕棿鍚屾銆?涓鸿幏寰楁渶浣虫晥鏋滐紝鎮ㄥ彲鑳介渶瑕佸畾鏈熻皟鐢ㄦ鍑芥暟浠ヨˉ鍋垮唴閮ㄦ椂閽熸紓绉汇€傛濡傚湪rtctime妯″潡鏂囨。 涓墍杩帮紝寤鸿鍦ㄦ繁搴︾潯鐪犲悗鍚屾鏃堕棿锛屽苟涓斿湪妯″潡澶嶄綅鍚庨渶瑕佸悓姝?init.lua鍦╓iFi鍒濆 鍖栦箣鍚庢坊鍔?銆傝娉ㄦ剰锛屽彲浠ユ彁渚涘崟涓湇鍔″櫒浣滀负鍙傛暟(鍚嶇О鎴栧湴鍧€)锛屼篃鍙互鎻愪緵鏈嶅姟鍣?鍒楄〃(琛?銆?鍙ユ硶 sntp.sync([server_ip], [callback], [errcallback], [autorepeat]) sntp.sync(( serverl, server2j 鈥?}, [callback]s [errcallback]3 [autorepeat]) 鍙傛暟 銉籹erver_ip濡傛灉涓嶆槸nil ,鍒欎娇鐢ㄨ鏈嶅姟鍣ㄣ€傚鏋渘il ,鍒欎娇鐢ㄤ笂娆¤仈绯荤殑鏈嶅姟鍣ㄣ€傚 鏋滄病鏈変互鍓嶇殑鏈嶅姟鍣紝鍒欎娇鐢ㄦ睜ntp鏈嶅姟鍣ㄣ€傚鏋滀娇鐢ㄤ簡浠绘挱鏈嶅姟鍣紝鍒欑涓€涓搷搴旀湇鍔?鍣ㄥ皢琚繚瀛樸€?-serverl , server!杩欎簺鏄灏濊瘯鐨勪竴涓垨澶氫釜鏈嶅姟鍣ㄧ殑IP鍦板潃鎴朌NS鍚嶇О銆?銉籧allback濡傛灉鎻愪緵鐨勮瘽锛屽畠灏嗗湪鎴愬姛鐨勫悓姝ユ椂琚皟鐢紝鍏锋湁鍥涗釜鍙傛暟锛氱锛屽井绉掞紝鏈嶅姟 鍣ㄥ拰淇℃伅銆傝娉ㄦ剰锛屽綋rtctime妯″潡鍙敤鏃讹紝涓嶉渶瑕佹樉寮忚皟鐢╮tctime.set()-涓轰簡鑾峰緱鏈€ 浣崇殑绮剧‘搴︼紝姝ゆā鍧椾細鑷姩杩涜鍐呴儴澶勭悊銆俰nf銆傚弬鏁版槸涓€涓?鍗?鏈夎叮鍊肩殑琛ㄦ牸銆傝繖浜涘湪 涓嬮潰鎻忚堪銆?-errcallback鐗╀釜鍙傛暟澶辫触鍥炶皟銆傜涓€涓槸鎻忚堪閿欒绫诲瀷鐨勬暣鏁般€備换鏀惧純鍜屾姤鍛婇敊璇箣 鍓嶏紝妯″潡浼氳嚜鍔ㄦ墽琛屽娆¢噸璇曘€傜浜屼釜鏄寘鍚ˉ鍏呬俊鎭殑瀛楃涓诧紙濡傛灉鏈夌殑璇濓級銆傞敊璇唬 鐮侊細 銉?锛?DNS鏌ユ壘澶辫触锛堢浜屼釜鍙傛暟鏄け璐ョ殑DNS鍚嶇О锛?-2锛氬唴瀛樺垎閰嶅け璐?-3锛?UDP鍙戦€佸け璐?-4锛氳秴鏃讹紝娌℃湁鏀跺埌NTP鍝嶅簲 -autorepeat濡傛灉杩欎笉鏄浂锛岄偅涔堝悓姝ュ皢姣?000绉掑彂鐢熶竴娆★紝濡傛灉鍙兘鐨勮瘽灏濊瘯璋冩暣鏃?閽熴€傚洖璋冨皢鍦ㄦ瘡娆″悓姝ユ搷浣滃悗琚皟鐢ㄣ€?杩斿洖 淇℃伅琛?杩欎紶閫掔粰鎴愬姛鍥炶皟锛屽苟鍖呭惈鏈夊叧鍒氬畬鎴愮殑鏃堕棿鍚屾鐨勬湁鐢ㄤ俊鎭€傝琛ㄤ腑鐨勫叧閿瓧鏄細 銉籵ffset_s杩欐槸涓€涓彲閫夊瓧娈碉紝鍖呭惈鏃堕挓璋冩暣鐨勭鏁般€傝繖鍙€傜敤浜庡ぇ閲忥紙寰堝绉掞級鐨勮皟 鏁淬€傞€氬父鎯呭喌涓嬶紝杩欏彧鍦ㄥ垵濮嬪悓姝ヨ皟鐢ㄤ腑鍑虹幇銆?鈥?offset_us杩欐槸涓€涓彲閫夊瓧娈碉紙浣嗕箣涓€鈥?offset_s鍜宱ffset_us灏嗗缁堝瓨鍦級銆傝繖鍖呭惈 鏃堕挓璋冮﹢鐨勫井绉掓暟銆?-delay_us杩欐槸浠ュ井绉掍负鍗曚綅鍚戞湇鍔″櫒鐨勫線杩斿欢杩熴€備綘璁剧疆鐨勪笉纭畾鎬ф瘮杩欎釜鍊艰灏忎竴 浜涖€?銉籹tratum杩欐槸鏈嶅姟鍣ㄧ殑闃跺眰銆?銉籰eap杩欏寘鍚潵鑷狽TP鍗忚鐨勯棸浣嶃€?鎰忓懗鐫€娌℃湁闂扮姝e湪绛夊緟锛?鏄疷TC鏈堟湯鐨勬湭鍐抽棸 绉掞紝2鏄疷TC鏈堝簳鐨勬湭鍐抽棸绉掗櫎鍘汇€?鈥揢se the nodemeu specific pooL servers and keep the time synced forever (this 銆?sntp.sync(nilj nil, nil, 1)
鈥揝ingLe shot sync time with a server on the LocaL network. sntp.sync(,224.0.1.1,J function(sec, usee, server, info) print(1 sync 1, sec, usee, server) end, function() print('failed!1) end ) 涔熷彲浠ョ湅鐪?rtetime.set() sntp.setoffset 璁剧疆rtc鏃堕挓鍜孨TP鏃堕棿涔嬮棿鐨勫亸绉婚噺銆傝娉ㄦ剰锛孨TP鏃堕棿鏈夐棸绉掞紝鍥犳鎻掑叆闂扮鏃惰繍琛岀紦 鎱€傝繖涓猻etoffset璋冪敤浣挎槑纭殑闂扮璺熻釜锛屽苟瀵艰嚧rtc鏃堕挓鏇村潎鍖€鍦版墦鍕?浣嗗畠涓庡涓婃椂閽?鐨勬椂闂翠笉涓€鑷淬€傜鏁版槸鍋忕Щ閲忋€?sntp.setoffset([offset]) 鍙傛暟 -offset NTP鏃堕棿鍜宺tc鏃堕棿涔嬮棿鐨勫亸绉婚噺銆傝繖鍙互鐪佺暐锛岄粯璁や负闆躲€傛璋冪敤鍚敤鍋忕Щ閲忚窡 韪€?杩斿洖 闆?sntp.getoffset 鑾峰彇rtc鏃堕挓鍜孨TP鏃堕棿涔嬮棿鐨勫亸绉婚噺銆傚簲璇ヤ粠rtc鏃堕棿涓噺鍘绘鍊间互鑾峰緱NTP鏃堕棿-杩欏搴斾簬 鎸傞挓鏃堕棿銆傚鏋滆繑鍥炵殑鍋忕Щ閲忓繁缁忎粠鍏堝墠鐨勫懠鍙敼鍙樹簡锛岄偅涔堝湪杩欎箣闂村氨鏈変簡涓€涓棸绉掋€?鍙ユ硶 offset = sntp.getoffset() 杩斿洖 褰撳墠鎶垫秷銆?鏂囨。銆嬭嫳璇€濇ā鍧椼€嬪皻椋?Somfy妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?9 鏈?27 鏃?vsky279 vsky279 somfy.c 璇ユā鍧楁彁渚涗簡涓€涓畝鍗曠殑鐣岄潰锛岄€氳繃RF鍙戝皠鍣?433.42 MHz)鎺у埗Somfy鐧惧彾绐椼€傚畠鍩轰簬 Nickduino Somfy 杩滅▼ Arduino skectho 鎵€浣跨敤鐨勭‖浠舵槸鏍囧噯鐨?33 MHz灏勯鍙戝皠鍣ㄣ€備笉骞哥殑鏄紝杩欎簺鑺墖閫氬父浠?33.92MHz鐨勯鐜?浼犺緭锛屾墍浠ユ櫠浣撹皭鎸櫒搴旇鐢?33.42MHz鐨勮皭鎸櫒鏉ユ浛浠o紝灏界涓€浜涗汉鎶ュ憡璇寸敋鑷冲湪鍘熷鏅?浣撶殑鎯呭喌涓嬩篃鑳藉伐浣溿€?瑕佷簡瑙omfy鍗忚鐨勮缁嗕俊鎭紝璇峰弬闃匰omfyRTS鍗忚浠ュ強杩欓噷鐨勮璁恒€?璇ユā鍧椾娇鐢ㄧ‖浠惰鏃跺櫒锛屽洜姝ゅ畠涓嶈兘鍦ㄥ悓涓€鏃堕棿浣跨敤鎵€杩扮‖浠惰鏃跺櫒鍏朵粬NodeMCU妯″潡锛屽嵆 鍙互浣跨敤 sigma delta 锛?pcm , perf ,鎴?pwm 妯″潡銆?somfy.sendcommand () 鏋勫缓鐢盨omfy鍗忚瀹氫箟鐨勫抚骞跺皢鍏跺彂閫佸埌RF鍙戝皠鍣ㄣ€?somfy.sendcommand () 鏋勫缓鐢盨omfy鍗忚瀹氫箟鐨勫抚骞跺皢鍏跺彂閫佸埌RF鍙戝皠鍣ㄣ€?鍙ユ硶 somfy.sendcommand(pin, remote_address, command, rolling_codej repeat_count, call_back) 鍙傛暟 -pin灏哛F鍙戝皠鍣ㄨ繛鎺ュ埌GPI銆傚紩鑴氥€?-remote_address閬ユ帶鍣ㄧ殑鍦板潃銆傝鎺у埗鐨勮澶囦娇鐢ㄥ畠搴旇鍚殑閬ユ帶鍣ㄧ殑鍦板潃杩涜缂栫▼銆?鈥ommand鍛戒护琚紶閫併€傚彲浠ユ槸涓€ 涓?somfy.SOMFY_UP , somfy.S0MFY_D0WN , somfy.S0MFY_PR0G , somfy.S0MFY_ST0P 銉籸olling_code鎬绘寜涓€娆℃寜閽紝婊氭垚浠g爜灏变細澧炲姞銆傚鏋滅法浠g爜楂樹簬鏈€鍚庢敹鍒扮殑浠g爜锛?骞朵笖涓嶅湪鏈€鍚庢敹鍒扮殑浠g爜涔嬪墠锛屾帴鏀跺櫒鍙帴鍙楀懡浠ゃ€傝繖涓獥鍙f槸涓€涓?00澶х殑椤哄簭銆傞渶瑕?灏嗘粴鍔ㄤ唬鐮佸瓨鍌ㄥ湪EEPROM (鍗虫枃浠剁郴缁?涓互淇濆瓨ESP8266澶嶄綅銆?鈥epeat_count鍛戒护閲嶅浜嗗灏戞 銉籧allback鍦ㄥ彂閫佸懡浠や箣鍚庤皟鐢ㄧ殑鍑芥暟銆傚厑璁搁摼鎺ュ懡浠ゅ皢鐧惧彾绐楄缃埌涓€涓畾涔夌殑浣?缃€?鎴戝師鏉ョ殑閬ユ帶鍣ㄦ槸TELIS4 MODULIS RTS銆傝繖涓仴鎺у櫒姝e湪澶勭悊闄勫姞淇℃伅-闄勫姞鏁版嵁鍚庨潰鐨?6 浣?缂╃煭甯ч棿闂撮殧)銆備技涔庤繕娌℃湁閫忛湶鍑鸿繖涓憞鎽嗕笉瀹氱殑鍔ㄥ姏銆?褰撴垜鍙戦€乻omfy.DOWN鍛戒护锛岄噸澶嶉】鐗╂(杩欎技鍗婃槸涓€涓煭鎺堥挳鏃虫爣璋?锛?鍗硆epeat_count绛変簬2,鐧惧彾绐楀彧璧?姝ャ€傝繖瀵瑰簲浜庡師濮嬮仴鎺у櫒涓婄殑杞瓙鐨勭Щ鍔ㄣ€傚師濮嬮仴鎺?鍣ㄤ笂鐨勫悜*鎸夐挳涔熷彂閫乻omfy.DOWN鍛戒护锛屼絾闄勫姞淇℃伅鏄笉鍚岀殑锛岃繖浣垮緱鐧惧彾绐楀畬鍏ㄦ斁涓嬨€?骞歌繍鐨勬槸锛岄噸澶嶈甯?6娆′娇寰楃櫨鍙剁獥瀹屽叏鏀句笅銆?杩斿洖 闆?渚?瑕佸紑濮嬫帶鍒朵綘鐨凷omfy鐧惧彾绐楋紝浣犻渶瑕侊細 銉婚€夋嫨涓€涓换鎰忕殑杩滅▼鍦板潃(涓庣幇鏈夌殑杩滅▼鍦板潃涓嶅悓)-123鍦ㄦ湰渚嬩腑 銉婚€夋嫨婊氬姩浠g爜鐨勮捣鐐广€備换浣晆nsigned inti浣滐紝1鏄竴涓ソ鐨勫紑濮?-闀块┚鐜版湁閬ユ帶鍣ㄤ笂鐨勭▼搴忔寜閽紝鐩村埌鐩蹭汉杞诲井涓婁笅 鈥㈡墽琛?somfy. sendcommand(4j 123, somfy.PROG, 1, 2)-鐧惧彾绐椾細鍝嶅簲锛屾偍鐨凟SP8266閬?骞存毃鐜板湪宸茬粡娉ㄥ唽 鈥㈣繍琛?somfy. sendcommand(4j 123, somfy.DOWN, 2, 16)-瀹屽叏鍏抽棴鐧惧彾绐?鏇磋缁嗙殑渚嬪瓙璇峰弬鑰僺omfy.lua銆?SPI妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?6鏃?鏄撳崪鎷夋鈥㈤樋鍗滃痉鈥㈠焹灏斿崱寰?闃垮凹濮嗏€㈡媺鏍?spi.c 鎵€鏈夌殑鍙戦€佸拰鎺ユ敹浜嬪姟閮芥槸鏈€閲嶈鐨勶紝鏈€鍚庝竴涓篃鏄渶涓嶉噸瑕佺殑銆傛湁鍏冲簳灞傜‖浠剁殑鎶€鏈粏鑺傦紝璇峰弬 闃?metalphreak 鐨?ESP8266 HSPI 鏂囩珷銆?銆傛敞鎰?ESP纭欢鎻愪緵涓や釜SPI鎬荤嚎锛孖D涓恒€傚拰1,鏄犲皠鍒颁竴鑸爣涓篠P鍥癏SP鍟插紩鑴氥€傚鏋滄偍浣跨敤浠讳綍涓€绉?鎻愪緵闂瓨鐨勫紑鍙戞澘锛岄偅涔堟€荤嚎IDO (SPI)鍑犱箮鑲畾鐢ㄤ簬涓庨棯瀛樿姱鐗囪繘琛岄€氫俊銆傛偍鍙兘瑕佷负鎮ㄧ殑 閫氫俊閫夋嫨鍏氦杞D1 (HSPI),鍥犱负鎮ㄥ皢鏃犳剰涓娇鐢ㄥ畠銆?HSPI淇″彿鍥哄畾鍦ㄤ互涓婭銆傜储寮曞拰GPI銆傚紩鑴氫笂: 淇″彿 IO绱㈠紩 ESP8266寮曡剼 HSPI鏃堕挓 浜?GPIO14 HSPI/CS 8 GPIO15 HSPI MOSI 7 GPIO13 HSPI MISO 6 GPIO12
鍙﹁鍙傞槄spi.setup ()銆?楂樼骇鍔熻兘 楂樼骇鍔熻兘鎻愪緵鍗婂弻宸ュ拰鍏ㄥ弻宸ユā寮忕殑鍙戦€佸拰鎺ユ敹API銆?spi.recv () 浠嶴PI鎺ユ敹鏁版嵁銆?spi.send () 浠ュ崐鍙屽伐妯″紡閫氳繃SPI鍙戦€佹暟鎹€?spi.setup () 璁剧疆SPI閰嶇疆銆?浣庣骇纭欢鍔熻兘 浣庣骇鍑芥暟涓洪渶瑕佺粌涔犳洿澶嶆潅SPI浜嬪姟鐨勫簲鐢ㄥ満鏅彁渚涗互纭欢涓轰腑蹇冪殑API銆?spi.get_miso () 鍦╯pi涔嬪悗浠嶮IS銆傜紦鍐插尯鎻愬彇鏁版嵁椤广€?spi.set_mosi () 灏嗘暟鎹」鎻掑叆鍒皊pi鐨凪OSI缂撳啿鍖轰腑銆?spi.transaction ()
鍜肩骇鍔熻兘 楂樼骇鍔熻兘鎻愪緵鍗婂弻宸ュ拰鍏ㄥ弻宸ユā寮忕殑鍙戦€佸拰鎺ユ敹API銆傚彂閫佸拰鎺ユ敹鐨勬暟鎹」闄愬埗涓?-32浣嶉暱锛屾瘡涓?鏁版嵁椤硅(H) SPICS鏃犳晥鍖呭洿銆?spi.recv () 浠巗pi鎺ユ敹鏁版嵁銆?spi.recv(idj size], default_data]) 鍙傛暟 鈥d SPUD鍙凤細SPI涓?, HSPI涓?1 銉籹ize瑕佽鍙栫殑鏁版嵁椤圭殑鏁伴噺 鈥efault_data鍦∕OSI涓婂彂閫侀粯璁ゆ暟鎹?鍏?,濡傛灉鐪佺暐) 杩斿洖 鍖呭惈浠嶴PI璇诲彇鐨勫瓧鑺傜殑瀛楃涓层€?涔熷彲浠ョ湅鐪?spi.send () spi.send () 浠ュ崐鍙屽伐妯″紡閫氳繃spi鍙戦€佹暟鎹€備互鍏ㄥ弻宸ユā寮忓彂閫佸拰鎺ユ敹鏁版嵁銆?鍙ユ硶 鍗婂弻宸ワ細 wrote = spi.send(idj datalfj data2[,銉?銉?datan]]) 鍏ㄥ弻宸ワ細 wrote[4 rdatal[, .鈥兓, rdatan]] = spi.send(idj datal[data2[,.銉?鍙傛暟 鈥d SPUD鍙?SPI涓?, HSPI涓?1 鈥ata鏁版嵁鍙互鏄瓧绗︿覆锛岃〃鏍兼垨鏁存暟銆?姣忎釜鏁版嵁椤归兘琚涓篸atabits鏄綅鏁般€?杩斿洖 鈥rote鍐欏叆鐨勫瓧鑺傛暟 鈥data鎺ユ敹鐨勬暟鎹厤缃负spi. FULLDUPLEX 涓庣浉搴旂殑鏁版嵁鍙傛暟鐩稿悓鐨勬暟鎹被鍨嬨€?渚?=spi.send(lJ 04 255, 255, 255) 4 255 192 32 0 x = {spi.sendCl, 255, 255, 255)} =x[l] 4 =X[2] 255 =x[3] 192 =X[4] 32 =x[5] 0 =x[6] nil =#x 5 x = spi.send(l3 0, {255, 255, 255}) =x[l] 192 =x[2] 32 =X[3] 0 涔熷彲浠ョ湅鐪?鈥plsetup () 鈥pi.recv () spi.setup () 璁剧疆spi閰嶇疆銆傛湁鍏虫椂閽熸瀬鎬у拰鐩镐綅瀹氫箟鐨勮缁嗕俊鎭紝璇峰弬鑰冧覆琛屽璁炬帴鍙f€荤嚎銆?鍛煎彨spi.setup()浼氬皢HSPI淇″彿璺敱鍒扮浉鍏冲紩鑴氾紝瑕嗙洊涔嬪墠鐨刧pio妯″潡閰嶇疆鍜屾帶鍒躲€傚鏋滀笉闇€ 瑕佸畠鐨凥SPI鍔熻兘锛屽彲浠ュ皢浠讳綍寮曡剼鎭㈠鍒癵pi銆傛帶鍒讹紝鍙渶璁剧疆gpio.mode()瀹冦€傚鏋淪PI浠庤澶囬€?鎷╂槸鐢变笉鍚岀殑寮曡剼椹卞姩鐨勶紝gpio.write銆係PI寮曟搸灏嗕細鍒囨崲寮曡剼8,鍚﹀垯锛屽缓璁娇鐢ㄦ鍔熻兘銆?鍙ユ硶 spi.setup(idj mode, cpolj cpha, databits^ clock_div[duplex_mode]) 鍙傛暟 鈥d SPUD鍙?SPI涓?, HSPI涓?1 鈥ode閫夋嫨涓绘ā寮忔垨浠庢ā寮?o spi.MASTER 銆俿pi.SLAVE -鐩墠涓嶆敮鎸?鈥pol鏃堕挓鏋佹€ч€夋嫨 o spi.CPOL_LOW o spi.CPOL_HIGH 鈥pha鏃堕挓鐩镐綅閫夋嫨 銆?spi.CPHA_LOW 銆?spi.CPHA_HIGH 鈥atabits姣忎釜鏁版嵁椤圭殑浣嶆暟1-32 鈥lock_div SPI鏃堕挓鍒嗛鍣紝f (SPI) = 80MHz/ clock div , 1鈥 (0榛樿涓哄垎棰戝櫒8) 鈥uplex_mode鍙屽伐妯″紡 銆俿pi.HALFDUPLEX (鐪佺暐鏃堕粯璁? o spi.FULLDUPLEX 杩斿洖 1鍙?渚?spi.setupClj spi.MASTER, spi.CPOL_LOW, spi銉籆PHA_LOW, 8, 8) 鈥搘e won鈥檛 be using the HSPI /CS Linej so disabLe it again gpio.mode(8j gpio.INPUT, gpio.PULLUP) 浣庣骇纭欢鍔熻兘 浣庣骇鍑芥暟涓洪渶瑕佺粌涔犳洿澶嶆潅SPI浜嬪姟鐨勫簲鐢ㄥ満鏅彁渚涗互纭欢涓轰腑蹇冪殑API銆傜紪绋嬫ā鍨嬫槸鍥寸粫纭欢鍙戦€?鍜屾帴鏀剁紦鍐插尯寤虹珛鐨勶紝SPI浜嬪姟鏄湪纭欢鐗规€у畬鍏ㄦ帶鍒剁殑鎯呭喌涓嬪惎鍔ㄧ殑銆?spi.get_miso () 涔嬪悗浠嶮ISO缂撳啿鍖轰腑鎻愬彇鏁版嵁椤箂pi.transaction()銆?鍙ユ硶 datal[j data2[.銉汇兓, datan]] = spi.get_miso(idj offsetj bitlen^ num) string = spi銉籫et_miso(id, num) 鍙傛暟 鈥d 5PI ID涓擄細bHIZJU, HbPIZJl 銉籵ffset绗竴涓暟鎹」鐨凪ISO缂撳啿鍖虹殑浣嶅亸绉婚噺 鈥itlen鍗曚釜鏁版嵁椤圭殑浣嶉暱搴?-num瑕佹绱㈢殑鏁版嵁椤圭殑鏁伴噺 杩斿洖 num鏁版嵁椤规垨string 涔熷彲浠ョ湅鐪?spi.transaction () spi.set_mosi () 灏嗘暟鎹」鎻掑叆鍒癕OSI缂撳啿鍖轰腑spi.transaction()銆?鍙ユ硶 spi銉籹et_mosi(id, offsetj bitlen4 datal[data2[4 datan]]) spi銉籹et_mosi(id, string) 鍙傛暟 鈥d SPUD鍙凤細SPI涓?, HSPI涓?1 銉籵ffset鐢ㄤ簬鎻掑叆datal鍜屽悗缁」鐩殑MOSI缂撳啿鍖?鈥itlen datal, data2, 鈥︾殑闀垮害 鈥ata bitlen鍦ㄤ氦鏄撲腑鑰冭檻浣嶆暟鐨勬暟鎹」銆?銉籹tring灏嗘暟鎹彂閫佸埌鍋忕Щ閲忎负0,浣嶉暱涓?鐨凪OSI缂撳啿鍖轰腑 杩斿洖 nil 涔熷彲浠ョ湅鐪?spi.transaction () spi.transaction () 寮€濮嬩竴涓猄PI浜ゆ槗锛屾渶澶氱敱5涓樁娈电粍鎴? 1.鍛戒护 2.鍦板潃 3.MOSI 4.鍋?5.鍛冲檶 鍙ユ硶 spi.transaction(id? cmd_bitlen, cmd_data, addr_bitlen4 addr_dataj mosi_bitlenj dummy_bitlen4 miso_l 鍙傛暟 鈥d SPUD鍙凤細SPI涓?, HSPI涓?1 鈥md_bitlen鍛戒护闃舵鐨勪綅闀垮害(0 - 16) 鈥md_data鏁版嵁涓哄懡浠ら樁娈?鈥ddr_bitlen 鍦板潃鐩镐綅(0- 32) 鈥ddr_data鏁版嵁涓哄懡浠ら樁娈?鈥osi_bitlen MOSI鐩哥殑浣嶉暱搴?0-512) 鈥ummy_bitlen浼浉浣嶇殑浣嶉暱搴?0-256) 鈥iso_bitlen MI5U闃舵鏃充綅绠曞害(U-31Z)鏂瑰崐鍙屼竸銆?鍏ㄥ弻宸ユā寮忚婵€娲讳负璐熷€笺€?杩斿洖 nil 涔熷彲浠ョ湅鐪?鈥pi.set_mosi () 鈥pi.get_miso () 鏂囨。銆嬭嫳璇€濇ā鍧椼€嬬粨鏋?缁撴瀯妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?13 鏃?Roberto lerusalimschy, Philip Gladstone 鑿插埄鏅€㈡牸鑾辨柉椤?structc 杩欎釜妯″潡鎻愪緵浜嗗皢Lua鍊艰浆鎹㈡垚C缁撴瀯鍜屼粠C缁撴瀯杞崲鐨勫熀鏈姛鑳姐€傚畠鐨勪富瑕佸姛鑳?鏄痵truct.pack灏嗗涓狶ua鍊兼墦鍖呮垚绫讳技缁撴瀯鐨勫瓧绗︿覆;骞朵笖struct.unpack浠庣粰瀹氱殑绫讳技 缁撴瀯鐨勫瓧绗︿覆涓В鍘嬬缉澶氫釜Lua鍊笺€?杩欎袱涓嚱鏁扮殑绗竴涓弬鏁版槸鏍煎紡瀛楃涓诧紝瀹冩弿杩颁簡缁撴瀯鐨勫竷灞€銆傛牸寮忓瓧绗︿覆鏄竴绯诲垪杞崲鍏?绱狅紝瀹冧滑閬靛惊褰撳墠鐨勫瓧鑺傞『搴忓拰褰撳墠鐨勫榻愯姹傘€傛渶鍒濓紝褰撳墠鐨勭鐐规槸鏈哄櫒鐨勬湰鍦版帓搴忥紝褰?鍓嶇殑瀵归綈瑕佹眰鏄?锛堟剰鎬濇槸鏍规湰涓嶅榻愶級銆傛偍鍙互浣跨敤鏍煎紡瀛楃涓蹭腑鐨勯€傚綋鎸囦护鏇存敼杩欎簺璁?缃€?璇锋敞鎰忥紝float鍜宒ouble杞崲浠呴€傜敤浜庢诞鐐筃odeMCU鏋勫缓銆?鏍煎紡瀛楃涓?鏍煎紡瀛楃涓蹭腑鐨勫厓绱犲涓嬫墍绀猴細 .鈥溾€滐紙绌虹櫧绌洪棿锛夎蹇界暐銆?銉烩€滐紒n"鏍囧織灏嗗綋鍓嶇殑瀵归綈瑕佹眰璁剧疆涓簄 锛堝繀鐒舵槸2鐨勫箷锛夛紱缂哄腑n鎰忓懗鐫€鏈哄櫒鐨勬湰鍦板榻愩€?-鈥?鈥滄爣蹇楀皢妯″紡璁剧疆涓哄ぇ绔€?-鏍囧織灏嗘ā寮忚缃负灏忕銆?-鈥淴"濉厖闆跺瓧鑺傦紝娌℃湁瀵瑰簲鐨凩ua鍊笺€?,锛屼竷鈥?涓€涓鍚峜har銆?,鈥淏鈥?鈥斾釜鏃犵鍙风殑char銆?銉诲皬鈥?涓€涓鍚峴hort 锛堟湰鍦板ぇ灏忥級銆?鈥⑩€淗鈥?涓€涓棤绗﹀彿short 锛堟湰鍦板ぇ灏忥級銆?銉烩€渓鈥?涓€涓鍚峫ong 锛堟湰鍦板ぇ灏忥級銆?鈥⑩€淟鈥?涓€涓棤绗﹀彿long 锛堟湰鍦板ぇ灏忥級銆?,鈥淭鈥?涓€涓猻ize_t 锛堟湰鏈哄昂瀵革級銆?銉烩€渋n鈥?涓€涓湁n涓瓧鑺傜殑鏈夌鍙锋暣鏁般€備竴涓己甯殑n琛ㄧず涓€涓湰鍦扮殑澶у皬int o 銉烩€淚n"鍠滄"in"浣嗘病鏈夌鍚嶃€?,%鈥?涓€涓猲oat 锛堟湰鏈哄昂瀵革級銆?銉烩€渄鈥?涓€涓猟ouble 锛堟湰鏈哄昂瀵革級銆?鈥⑩€渟"浠ラ浂缁撳熬鐨勫瓧绗︿覆銆?-鈥渃n鈥?涓€涓叉濂藉搴斾簬涓€涓狶ua瀛楃涓茬殑n涓瓧绗︺€傜己甯璶鎰忓懗鐫€1.鎵撳寘鏃讹紝缁欏畾鐨勫瓧绗︿覆 蹇呴』鑷冲皯鏈塶涓瓧绗︼紙澶氫綑鐨勫瓧绗﹁涓㈠純锛夈€?-杩欏氨鍍忔槸鈥渃n鈥滐紝闄や簡n鏄敱鍏朵粬鏂瑰紡缁欎簣锛氬綋鍖呰锛宯鏄粰瀹氱殑瀛楃涓茬殑闀垮害;褰?瑙e寘鏃讹紝n鏄墠涓€涓В鍘嬪€硷紙蹇呴』鏄暟瀛楋級鐨勫€笺€傚湪杩欑鎯呭喌涓嬶紝浠ュ墠鐨勫€间笉浼氳杩斿洖銆?渚嬪瓙 struct Str { char b; int i[4]; }; 浣犲彲浠ヤ娇鐢ㄥ瓧绗︿覆鈥?!4biiii鈥濄€?瑕佹墦鍖呭叾闀垮害缂栫爜鍦ㄥ叾绗竴涓瓧鑺備腑鐨勫瓧绗︿覆锛岃浣跨敤浠ヤ笅浠g爜锛?x = struct.packC鈥橞cO鈥? string.1011(5), s) 瑕佽В鍘嬮偅涓瓧绗︿覆锛岃鎸夊涓嬫搷浣滐細 s = struct.unpack(鈥淏cO鈥? x) 璇锋敞鎰忥紝闀垮害(鐢卞厓绱犺鍙?B")涓嶈繑鍥炪€?鑻ヨ鍦ㄧ敤绌烘牸濉厖鐨?0涓瓧绗︾殑鍥哄畾瀹藉害瀛楁涓墦鍖呭瓧绗︿覆锛岃鎵ц浠ヤ笅鎿嶄綔: x = struct.packC鈥檆lO", s 鈥?string.rep(" 10)) structpack () 杩斿洖鍖呭惈鍊糳l, d2绛夌殑瀛楃涓?structunpack () 鏍规嵁鏍煎紡瀛楃涓瞗mt杩斿洖瀛楃涓瞫涓墦鍖呯殑鍊笺€?structsize () 杩斿洖鏍规嵁鏍煎紡瀛楃涓瞗mt鏍煎紡鍖栫殑瀛楃涓茬殑澶у皬銆?/p>
struct.pack () 杩斿洖鍖呭惈鐨勫€肩殑瀛楃涓瞕l , d2绛夈€傛牴鎹牸寮忓瓧绗︿覆鎵撳寘fmt o 鍙ユ硶 struct.pack (fmt, dl, d2,鈥? 鍙傛暟 鈥?fmt涓婅堪鏍煎紡鐨勬牸寮忓瓧绗︿覆 -dl绗竴涓暟鎹」琚墦鍖?銉籨2绗簩涓鎵撳寘鐨勬暟鎹」 杩斿洖 鍖呰鐨勫瓧绗︿覆銆?渚?S = struct.packCl鈥?^ 0x41424344) print(s) struct.unpack () S鏍规嵁鏍煎紡瀛愮鍗樿繑鍥炴巿瀛楃鐢虫墦鍖呮棾鍊糵mt銆備竴涓彲閫夋棾i鏍囪锛屼换鍝噷s鍗囧闃呰 (榛樿鏄?)銆傚湪璇诲彇鍊间箣鍚庯紝璇ュ嚱鏁拌繕浼氳繑鍥瀞鍋滄璇诲彇鐨勪綅缃鐨勭储寮曪紝杩欎篃鏄偍搴旇 寮€濮嬭鍙栧瓧绗︿覆鍏朵綑閮ㄥ垎鐨勪綅缃€?鍙ユ硶 struct.unpack (fmt, s[, offset]) 鍙傛暟 鈥mt涓婅堪鏍煎紡鐨勬牸寮忓瓧绗︿覆 -s淇濆瓨瑕佽В鍘嬬殑鏁版嵁鐨勫瓧绗︿覆 -offset鍦ㄥ瓧绗︿覆涓紑濮嬬殑浣嶇疆(榛樿涓?) 杩斿洖 鎵€鏈夌殑瑙e帇鏁版嵁銆?渚?鍋囪鎴戜滑蹇呴』瑙g爜涓€涓猻鏈煡鏁扮殑鍙岀簿搴︾殑瀛楃涓?缁撳熬鏍囨湁涓€涓浂鍊笺€傛垜浠彲浠ヤ娇鐢ㄤ笅闈?鐨勪唬鐮侊細 local a = {) local i = 1 鈥?index where to read while true do local d d, i = struct.unpack("d"j s, i) if d == 0 then break end a[#a + 1] = d end struct.size () 杩斿洖鏍规嵁鏍煎紡瀛楃涓叉牸寮忓寲鐨勫瓧绗︿覆鐨勫ぇ灏廸mt o鏍煎紡瀛楃涓插簲璇ユ棦涓嶅寘鍚€夐」s涔熶笉鍖?鍚€夐」C0 O 鍙ユ硶 struct.size (fmt) 鍙傛暟 鈥mt涓婅堪鏍煎紡鐨勬牸寮忓瓧绗︿覆 杩斿洖 灏嗕娇鐢ㄦ鏍煎紡瀛楃涓插湪鍖呮搷浣滀腑杈撳嚭鐨勫瓧绗︿覆鐨勫ぇ灏忋€?渚?print(struct.size(鈥渋鈥?) 杩欏皢鎵撳嵃鏈湴鏁存暟绫诲瀷鐨勫ぇ灏忋€?鎵х収 杩欎釜杞欢鍖呮槸鏍规嵁MIT璁稿彲璇佸垎鍙戠殑銆傝鍙傞槄鏂囦欢鏈熬鐨勭増鏉冨0鏄巗truct.c銆?Switec妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?6鏃?鑿插埄鏅€㈡牸鑾辨柉椤?鑿插埄鏅€㈡牸鑾辨柉椤?switec.c 璇ユā鍧楁帶鍒朵竴鍙癝witecX.27 锛堟垨鍏煎锛変华鍣ㄦ杩涚數鏈恒€傝繖浜涙槸鐢ㄤ簬鐜颁唬姹借溅浠〃缁勭殑姝ヨ繘鐢?鏈恒€備粬浠槸闈炲父渚垮疁锛屽彲浠ュ湪浣犳渶鍠滄鐨勬媿鍗栫綉绔欐垨涓浗璐墿缃戠珯鎵惧埌銆傛湁鍙岃酱鐨勫搧绉?鍗虫湁 涓や釜姝ヨ繘鐢垫満椹卞姩涓や釜鍚屽績杞达紝鎵€浠ヤ綘鍙互浠庡悓涓€杞村畨瑁呬袱涓拡銆?杩欎簺鐢垫満杩愯5V 锛堟湁浜涘彲鑳藉伐浣滃湪3.3V锛?o瀹冧滑鐨勭數娴佷綆浜?0mA,璁捐涓虹洿鎺ヤ粠MCU寮曡剼 椹卞姩銆傜敱浜巒odemeu杩愯鍦?.3V,鎵€浠ラ渶瑕佷竴涓數骞宠浆鎹㈠櫒銆傚儚74WC4245A杩欐牱鐨勫叓杩涘埗杞?鎹㈠櫒鍙互鎵ц杩欎釜缈昏瘧銆傚畠杩樺寘鎷墍鏈夐渶瑕佺殑淇濇姢浜屾瀬绠°€?杩欎簺鐢垫満鍙互椹遍櫎涓変釜绠¤剼锛屼笌pin2鍜宲in3鏄浉鍚岀殑GPIO寮曡剼銆傚鏋滅數鏈虹洿鎺ヨ繛鎺ュ埌 MCU,鍒欑數娴佽礋杞戒細缈诲€嶏紝骞跺彲鑳借秴杩囨渶澶ч瀹氬€笺€備絾鏄紝濡傛灉姝e湪浣跨敤椹卞姩鍣ㄨ姱鐗囷紝鍒?MCU涓婄殑璐熻浇鍙互蹇界暐涓嶈锛屽悓涓€涓狹CU寮曡剼鍙互杩炴帴鍒颁袱涓┍鍔ㄥ櫒寮曡剼銆備负浜嗗仛鍒拌繖涓€ 鐐癸紝鍙渶鎸囧畾pin2鍜宲in3銆?杩欎簺鐢垫満娌℃湁缁濆鐨勫畾浣嶏紝浣嗗湪鑼冨洿鐨勪袱绔仠姝€傚惎鍔ㄧ▼搴忔槸閫嗘椂閽堥┍鍔ㄧ數鏈猴紝鐩村埌纭繚閽?鍦ㄥ彴闃朵笂銆傞偅涔堣繖涓偣鍙互璁剧疆涓洪浂銆傚湪姝e父杩愯鏈熼棿锛屼笉瑕佽鐢垫満杩涘叆鍒版渶缁堜綅缃槸寰堥噸 瑕佺殑锛屽洜涓鸿繖浼氫娇鎸囧悜涓嶅噯纭€傝妯″潡涓嶆墽琛屼换浣曡寖鍥撮檺鍒躲€?鉂堕噸瑕?璇ユā鍧椾娇鐢ㄧ‖浠跺畾鏃跺櫒涓柇锛屽洜姝や笉鑳戒笌PWM妯″潡鍚屾椂浣跨敤銆傝繖涓や釜妯″潡閮藉彲浠ョ紪璇戞垚 鐩稿悓鐨勫浐浠堕暅鍍忥紝浣嗗簲鐢ㄧ▼搴忓彧鑳戒娇鐢ㄤ竴涓€傛湁鍙兘浣垮簲鐢ㄧ▼搴忎箣闂翠氦鏇縮witec 鍜宲wm ,浣嗗繀椤诲皬蹇冦€?switec.setup () 鍒濆鍖杗odemeu浠ヤ笌switec X杩涜閫氫俊銆?switec.moveto () 鍚姩閽堢Щ鍔ㄥ埌鎸囧畾鐨勪綅缃€?switec.reset () 杩欏皢閽堢殑褰撳墠浣嶇疆璁剧疆涓洪浂銆?switec.getpos () 鑾峰彇閽堢殑褰撳墠浣嶇疆浠ュ強鏄惁姝e湪绉诲姩銆?switec.close () 閲婃斁涓庢杩涘櫒鐩稿叧鐨勮祫婧愩€?鏍″噯 涓轰簡姝g‘璁剧疆闆剁偣锛屽簲璇ラ€嗘椂閽堥┍鍔ㄩ拡澶达紝鐩村埌杩涘叆鏈€缁堟鍔ㄤ綅缃€?/p>
switec.setup 锛堬級 鍒濆鍖杗odemeu浠ヤ笌switec X.27鎴栧吋瀹圭殑浠櫒姝ヨ繘鐢垫満瀵硅瘽銆傞粯璁よ浆鎹㈤€熺巼璁剧疆涓洪€傜敤浜庡ぇ 澶氭暟鐢垫満銆傛湁浜涚數鏈哄彲浠ユ瘡绉掕繍琛?00娆°€?switec.setup(channel, pinl4 pin2, pin3, pin4 [, maxDegPerSec]) 鍙傛暟
maxDegPerSec (鍙€?杩欏彲浠ヨ缃负闄愬埗鏈€澶ф憜鐜囥€傞粯璁ゅ€兼槸姣忕400搴︺€?杩斿洖 娌℃湁銆傚鏋滃弬鏁伴敊璇紝鎴栬€呮搷浣滄棤娉曞畬鎴愶紝鍒欎細鎶涘嚭閿欒銆?娉ㄦ剰 涓€鏃﹁缃簡閫氶亾锛屽湪閽堝仠姝㈢Щ鍔ㄤ箣鍓嶏紝涓嶈兘閲嶆柊璁剧疆閫氶亾銆?switec.setup(0j 5銆?銆?, 8) switec.moveto () 鍚姩閽堢Щ鍔ㄥ埌鎸囧畾鐨勪綅缃€傚鏋滈拡宸茬粡绉诲姩锛屽垯褰撳墠鍔ㄤ綔琚彇娑堬紝閽堢Щ鍔ㄥ埌鏂扮殑浣嶇疆銆傚綋閽?鍋滄绉诲姩鏃讹紝鍙互寰楀埌鍥炶皟銆傝繖閫氬父鏄笉闇€瑕佺殑锛屽洜涓簃oveto鍙互杩炵画鍙戝嚭澶氫釜鎿嶄綔銆傚湪 鍒濆鏍″噯鏈熼棿锛岃繖寰堥噸瑕併€傝娉ㄦ剰锛屽洖璋冧笉鑳戒繚璇佽璋冪敤-鍦ㄥ彟涓€涓猰oveto鎿嶄綔琚Е鍙戜箣 鍓嶏紝閽堝彲鑳戒笉浼氬仠鍦ㄧ洰鏍囦綅缃€?鍙ユ硶 switec.moveto(channel, positionstoppedCallback) 鍙傛暟 銉籧hannel switec妯″潡鏀寔涓変釜姝ヨ繘鐢垫満銆傞€氶亾鏄?,1鎴?銆?鈥osition绉诲姩閽堢殑浣嶇疆(椤烘椂閽堢殑姝ユ暟)銆備竴鑸湪0鍒?000宸﹀彸銆?鈥toppedCallback (鍙€?鍥炶皟鍦ㄩ拡鍋滄绉诲姩鏃惰璋冪敤銆?閿欒 閫氶亾蹇呴』宸茬粡璁剧疆锛屽惁鍒欎細寮曞彂閿欒銆?switec.moveto(04 1000^ function () switec.moveto(0j 0) end) switec.reset () 杩欏皢閽堢殑褰撳墠浣嶇疆璁剧疆涓洪浂銆傞拡澶村繀椤婚潤姝€?鍙ユ硶 switec 銉?reset(channel) 鍙傛暟 鈥hannel switec妯″潡鏀寔涓変釜姝ヨ繘鐢垫満銆傞€氶亾鏄?,1鎴?銆?閿欒 閫氶亾蹇呴』璁剧疆濂斤紝閽堝ご涓嶈兘绉诲姩锛屽惁鍒欎細鍑虹幇閿欒銆?switec.getpos () 鑾峰彇閽堢殑褰撳墠浣嶇疆浠ュ強鏄惁姝e湪绉诲姩銆?鍙ユ硶 switec.getpos(channel) 鍙傛暟 銉籧hannel switec妯″潡鏀寔涓変釜姝ヨ繘鐢垫満銆傞€氶亾鏄?,1鎴?銆?杩斿洖 鈥osition閽堢殑褰撳墠浣嶇疆 銉籱oving濡傛灉閽堥潤姝紝鍒欎负0銆?涓洪『鏃堕拡锛?1涓洪€嗘椂閽堛€?switec.close () 閲婃斁涓庢杩涘櫒鐩稿叧鐨勮祫婧愩€?鍙ユ硶 switec . close(channel) 鍙傛暟 銉籧hannel Switec妯″潡鏀寔涓変釜姝ヨ繘鐢垫満銆傞€氶亾鏄?,1鎴?銆?閿欒 閽堝ご涓€瀹氫笉鑳界Щ鍔紝鍚﹀垯浼氬嚭鐜伴敊璇€?鏍″噯 涓?姝㈢‘璁剧疆闆剁偣锛屽簲璇ラ€嗘椂閽堥┍鍒濋拤澶达紝鐩村埌杩涗汉鏈€缁堟鍒濅綅瀹c€傜劧鍚庡彲浠ヨ缃浂鐐广€備究 鐢ㄧ殑鍊间负-1000,鍥犱负瀹冨ぇ浜庣數鏈虹殑鑼冨洿锛屽嵆瀹冨湪鏁翠釜鑼冨洿鍐呴€嗘椂閽堟柟鍚戦┍鍔ㄥ苟鍒拌揪缁堢偣鎸?鍧椼€?switec.setup(0j 5,6,7,8) calibration = true switec.moveto(0j -1000, function() switec , reset(0) calibration = false end) 鍏朵粬moveto鎿嶄綔涓嶅簲璇ュ湪calibration璁剧疆鏃舵墽琛屻€?TCS34725妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?鏃?tjhowse tjhowse tcs34725.c
璇ユā鍧椾负TCS34725褰╄壊/鍏夌嚎浼犳劅鍣?Adafruit)鎻愪緵浜嗕竴涓畝鍗曠殑鐣岄潰銆?璇锋敞鎰忥紝鎮ㄥ繀椤诲厛鎵撶數璇濓紝setup銆傜劧鍚庢墠鑳藉紑濮嬭鍙栧€硷紒 tcs34725.setup () setupializes 妯″潡銆?tcs34725.enable (鍑芥暟()) 鍚敤浼犳劅鍣ㄣ€?tcs34725.disable () 绂佺敤浼犳劅鍣ㄣ€?tcs34725.raw () 璇诲彇浼犳劅鍣ㄧ殑娓呮櫚锛岀孩鑹诧紝缁胯壊鍜岃摑鑹插€笺€?tcs34725.setGain () 璁剧疆浼犳劅鍣ㄧ殑澧炵泭銆?tcs34725.setlntegrationTime () 璁剧疆浼犳劅鍣ㄧ殑绉垎鏃堕棿銆?/p>
tcs34725.setup () setupializes妯″潡銆傚湪璇诲彇鍊间箣鍓嶏紝setupialization鏄繀闇€鐨勩€?鍙ユ硶 tcs34725.setup() 杩斿洖 0濡傛灉瀹夎澶辫触(娌℃湁浼犳劅鍣ㄨ繛鎺ワ紵 ) , 1濡傛灉浼犳劅鍣ㄦ槸TCS34725 渚?tcs34725 銉?setup() tcs34725.enable(function() print(鈥淭CS34275 Enabled鈥? clear,redgreenblue=tcs34725 銉?raw() end) tcs34725.enable (鍑芥暟()) 鍚敤浼犳劅鍣ㄣ€傜鐢ㄥ悗鍙互鐢ㄦ潵鍞ら啋銆?tcs34725.enable(function() print(nTCS34275 Enabled") clearred,greenblue=tcs34725.raw() end) 鍙傛暟 浼犳劅鍣ㄥ畬鎴愬垵濮嬪寲鏃惰皟鐢ㄧ殑鍑芥暟銆?杩斿洖 0 tcs34725.disable () 绂佺敤浼犳劅鍣ㄣ€傚惎鐢ㄤ綆鍔熻€楃潯鐪犳ā寮忋€?鍙ユ硶 tcs34725.disable() 杩斿洖 0 tcs34725.raw () 璇诲彇浼犳劅鍣ㄧ殑娓呮櫚锛岀孩鑹诧紝缁胯壊鍜岃摑鑹插€笺€?鍙ユ硶 clearj redjgreen,blue=tcs34725.raw() 杩斿洖 娓呮櫚锛岀孩鑹诧紝缁胯壊锛岃摑鑹插湪uintl6_to tcs34725.setGain () 璁剧疆浼犳劅鍣ㄧ殑澧炵泭銆備紶鎰熷櫒鍚敤鍚庡繀椤昏皟鐢ㄣ€?鍙ユ硶 tcs34725.setGain(gain) 鍙傛暟 鑾峰緱 鑾峰緱 涓?x00 TCS34725 GAIN IX 鑾峰緱 鑾峰緱 0x01 TCS34725_GAIN_4X 0x02 TCS34725_GAIN_16X x03 TCS34725 GAIN 60X
杩斿洖 0 tcs34725.setIntegrationTime () 璁剧疆浼犳劅鍣ㄧ殑绉垎鏃堕棿銆備紶鎰熷櫒鍚敤鍚庡繀椤昏皟鐢ㄣ€?鍙ユ硶 tcs34725 . setlntegrationTime(time) 鍙傛暟 鏃堕棿 鑾峰緱 涓?OxFF TCS34725_INTEGRATIONTIME_2_4MS 0xF6 TCS34725_INTEGRATIONTIME_24MS 0xD5 TCS34725_INTEGRATIONTIME_101MS 灏?OxCO TCS34725_INTEGRATIONTIME_154MS 涓?0x00 TCS34725_INTEGRATIONTIME_700MS
杩斿洖
鏂囨。銆嬭嫳璇€濇ā鍧椼€婽LS TLS妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 浜孫鈥斿叚骞村崄浜屾湀鍗佷簲鏃?鍑ゅ嚢 鍑ゅ嚢 tls.c
SSL/TLS 鏀寔 銆傛敞鎰?TLS妯″潡渚濊禆浜庣綉缁滄ā鍧楋紝杩欐槸鎵€闇€鐨勪緷璧栧叧绯汇€?NodeMCU鍖呭惈mbedTLS搴撶殑寮€婧愮増鏈€傞€氳繃NodeMCU鐨勯粯璁ら厤缃紝瀹冩敮鎸乀LS1.O/1.1/ 1.2鍜屾渶甯哥敤鐨勫瘑鐮佸浠讹紝鍖呮嫭DH/ECDH銆傚熀浜嶦CDSA鐨勫瘑鐮佸浠堕粯璁ゆ槸绂佺敤鐨勩€?銆傚皬璐?瀹屾暣鐨勯厤缃瓨鍌ㄥ湪user_mbedtls.h涓€傚鏋滄偍鏋勫缓鑷繁鐨勫浐浠跺苟瑕佹洿鏀筸bedTLS琛屼负锛屽垯 杩欐槸瑕佺紪杈戠殑鏂囦欢銆?鏈夊叧鍔熻兘鍒楄〃锛岃鐪媘bedTLS鍔熻兘椤甸潰銆?褰揝SL/TLS姝e湪浣跨敤鏃讹紝璇ユā鍧楀鐞嗚瘉涔﹂獙璇併€?tls.createConnection () 鍒涘缓TLS杩炴帴銆?tls.socket锛氬叧闂紙锛?鍏抽棴濂楁帴瀛椼€?tls.socket锛?connect () 鐨?杩炴帴鍒拌繙绋嬫湇鍔″櫒銆?tls.socket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 tls.socket锛?getPeer () 宸?妫€绱㈠绛夌鍙e拰ip銆?tls.socket锛氫繚鎸?) 閫氳繃鍙戝嚭闃绘TCP鎺ユ敹鍔熻兘鐨勮姹傛潵闄愬埗鏁版嵁鎺ユ敹銆?tls.socket锛?涓?) 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?tls.socket锛氬彂閫?) 灏嗘暟鎹彂閫佸埌杩滅▼瀵圭瓑銆?tls.socket锛氬彇娑堜繚鐣欙紙锛?閫氳繃鎾ら攢鍏堝墠鐨勪繚鎸侊紙锛夋潵瑙i櫎瀵筎CP鎺ユ敹鏁版嵁鐨勯樆姝€?tls.certverify () 鎺у埗Nodemeu寤虹珛瀹夊叏杩炴帴鏃剁殑楠岃瘉杩囩▼銆?/p>
tls.createConnection () 鍒涘缓TLS杩炴銆?鍙ユ硶 tls.cneateConnection() 鍙傛暟 娌℃湁 杩斿洖 tls.socket 瀛愭ā鍧?渚?tls.createConnection() tls.socket 妯″潡 tls.socket锛氬叧闂?) 鍏抽棴濂楁帴瀛椼€?鍙ユ硶 close() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?tls.cneateConnection() tls.socket锛?connect ()鐨?杩炴帴鍒拌繙绋嬫湇鍔″櫒銆?鍙ユ硶 connect(port, ip|domain) 鍙傛暟 鈥ort 绔彛鍙?鈥p IP鍦板潃鎴栧煙鍚嶅瓧绗︿覆 杩斿洖 nil 涔熷彲浠ョ湅鐪?tls . socket:on() tls.socket锛?DNS () 涓轰富鏈哄悕鎻愪緵DNS瑙f瀽 鍙ユ硶 dns(domainj function(tls銉籹ocketip)) 鍙傛暟 鈥omain 鍩熷悕 鈥unction(tls.socket, ip)鍥炶皟鍑芥暟銆傜涓€涓弬鏁版槸濂楁帴瀛楋紝绗簩涓弬鏁版槸IP鍦板潃浣滀负 瀛楃涓层€?杩斿洖 nil 渚?sk = tls.cneateConnection() sk:dns(鈥済oogle.com"j function(conn, ip) print(ip) end) sk = nil tls.socket锛?getPeer () S 妫€绱㈠绛夌鍙e拰ip銆?鍙ユ硶 getpeer() 鍙傛暟 娌℃湁 杩斿洖 鈥p鐨勫悓琛?鈥ort鐨勫悓琛?tls.socket锛氫繚鎸?) 閫氳繃鍙戝嚭闃绘TCP鎺ユ敹鍔熻兘鏃宠姹傜背闄愬埗鏁浉鎺ユ敹:銆傛璇锋眰灏忕珛鍗崇敓鏁堬紝Espressif寤鸿浠讳繚鐣?5 * 1460瀛楄妭鐨勫唴瀛樻椂璋冪敤瀹冦€?鍙ユ硶 hold() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?tls.socket:unhold() tls.socket锛氫笂() 娉ㄥ唽鐗瑰畾浜嬩欢鐨勫洖璋冨嚱鏁般€?鍙ユ硶 on(event, function()) 鍙傛暟 -event瀛楃涓诧紝鍙互鏄€滆繛鎺モ€濓紝鈥滈噸鏂拌繛鎺モ€濓紝鈥滄柇寮€"锛屸€滄帴鏀?鎴栤€滃彂閫佲€?-function(tls.socket], string])鍥炶皟鍑芥暟銆傜涓€涓弬鏁版槸濂楁帴瀛椼€傚鏋滀簨浠舵槸鈥滄帴 鏀垛€濓紝鍒欑浜屼釜鍙傛暟鏄互瀛楃涓插舰寮忔帴鏀剁殑鏁版嵁銆傚鏋滀簨浠舵槸鈥滈噸鏂拌繛鎺モ€濓紝鍒欑浜屼釜鍙傛暟鏄?杩炴帴閿欒(瀛楃涓?鐨勫師鍥犮€?杩斿洖 nil 渚?srv = tls.createConnection() srvzonCreceive", function(sck, c) print漏 end) srv:on(鈥渃onnection鈥? function(sck, c) 鈥揥ait for connection before sending. sck:send("GET / HTTP/1.l\r\nHost: google.com\r\nConnection: keep-alive\r\nAcce| end) spv:connect(443,鈥済oogle.com鈥? 鉂舵敞鎰?璇eceive浜嬩欢琚Е鍙戞瘡涓綉缁滃抚锛佸湪netsocket锛?on ()涓婃煡鐪嬬粏鑺傘€?涔熷彲浠ョ湅鐪?鈥ls.createConnection() 鈥ls.socket:hold() tls.socket锛氬彂閫?) 灏嗘暟鎹彂閫佸埌杩滅▼瀵圭瓑銆?鍙ユ硶 send(string) 鍙傛暟 銉籹tring瀛楃涓蹭腑鐨勬暟鎹皢琚彂閫佸埌鏈嶅姟鍣?杩斿洖 nil 娉ㄦ剰 send()鐢变簬SDK灏嗙綉缁滆姹傝涓哄崟鐙殑浠诲姟锛屽洜姝や笉鑳戒繚璇佽繛缁娆¤皟鐢?閫氬父涓嶄細)銆?鐩稿弽锛岃璁㈤槄濂楁帴瀛椾笂鐨勨€滃彂閫佲€濅簨浠讹紝骞跺湪璇ュ洖璋冧腑鍙戦€佸叾浠栨暟鎹?鎴栧叧闂?銆傝鎯呰鍙傞槄# 730o 涔熷彲浠ョ湅鐪?tls.socket:on() tls.socket锛氬彇娑堜繚鐣?) 閫氳繃鎾ら攢鍓嶉潰鐨勬柟娉曟潵瑙i櫎瀵筎CP鎺ユ敹鏁版嵁鐨勯樆姝oid() o 鍙ユ硶 unhold() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?tls.socket:hold() tls.cert 妯?鍧?tls.cert.verify () 鎺у埗Nodemeu寤虹珛瀹夊叏杩炴帴鏃剁殑楠岃瘉杩囩▼銆?鍙ユ硶 tls.cert.verify(enable) tls 銉?cert.verify(pemdata) 鍙傛暟 鈥nable鎸囩ず鏄惁鍚敤楠岃瘉鐨勫竷灏斿€笺€傚惎鍔ㄦ椂鐨勯粯璁ゅ€兼槸false銆?鈥emdata鍖呭惈鐢ㄤ簬楠岃瘉鐨凜A璇佷功鐨勫瓧绗︿覆銆?杩斿洖 true濡傛灉瀹冨伐浣溿€?濡傛灉鎻愪緵浜嗘棤鏁堢殑鏁版嵁锛屽彲浠ユ姏鍑轰竴浜涢敊璇€?渚?寤虹珛瀹夊叏鐨刪ttps杩炴帴骞堕獙璇佽瘉涔﹂摼鏄惁鏈夋晥銆?tls.cert.verify(true) http.get(鈥渉ttps://example.com/info鈥? nil, function (code, resp) print(code^ resp 灏嗚瘉涔﹀姞杞藉埌闂瓨鑺墖骞跺彂鍑鸿姹傘€傝繖鏄痵tartssl鏍硅瘉涔︺€備粬浠彁渚涘厤璐硅瘉涔︺€?tls.cert.verify([[ BEGIN CERTIFICATE MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW MBQGAlUEChMNU3RhcnRDb20gTHRkLjErMCkGAlUECxMiU2VjdXJlIERpZ210YWwg Q2VydGlmaWNhdGUgU21nbmluZzEpMCcGAlUEAxMgU3RhcnRDb20gQ2VydGlmaWNh dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 MQswCQYDVQQGEwJJTDEWMBQGAlUEChMNU3RhcnRDb20gTHRkLjErMCkGAlUECxMi U2VjdXJlIERpZ210YWwgQ2VydGlmaWNhdGUgU21nbmluZzEpMCcGAlUEAxMgU3Rh cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXulM5DycmLWwTYgIiRezul38kMKogZk pMyONvg45iPwbm2xPNlyo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf OQVSWff0G0ZDpNKFhdLDcfNlYjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT Kqi5pquDSR318u/d5AG0GAqPYlMWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN60qce+Zu9ydmDBpI125C4z/eIT574Qlw +2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ Gkhpi8KWTRoSsmkXwQqQlvp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 Zzrd/qqc8NSLf 3Iizsaf 17b4r4qgEKjZ+xjGtrVclljyJthkqcwEKDw0zEmDyei+B 26Nu/yYwl/WL3YlXtq09s68rxbd2AvClliuahhQqcvbjM4xdCUsT37uMdBNSSwID AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGAlUdHwRdMFswLKAqoCiGJmh0dHA6Ly9j ZXD0LnN0YXJ0Y29tLm9yZy9zZnNjYSljcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js LnN0YX锛?Y29tLm9yZy9zZnNjYSljcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM BgsrBgEEAYGlNwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMw3xYgU3Rh cnQgQ29tbWVyY21hbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqB10xpbW10ZWQgTGlh YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaWlpdGF0aW9ucyogb2Yg dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT TCBDZX锛?aWZpY2F0aW9uIEFldGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ 9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 jhvh3TaHK0u7aNM5Zj2gDsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVDloNBl ny+v8OqCQ5j4aZy3ecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu L61whceWD3yJZfWOQlQOq921gDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtL3L4YSjCMJwRuC O3NJo2pXh5TllnjFmUNj403gdy3hZZlyaQQaRwnmDwFW3Psfvw55qVguucQ3AX6V um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh N0sF/5oirpt9P/FlUQqmlvIGqz9IgcgA38corogl4= END CERTIFICATE ]]) http.get(,https://pskreporter.info/gen404"nil, function (code, resp) print(codi 绗旇 楠岃瘉鎵€闇€鐨勮瘉涔﹀瓨鍌ㄥ湪闂瓨鑺墖涓€傝tls.cert.verify鍛煎彨true鍙互浣跨敤瀛樺偍鍦ㄩ棯瀛樹腑 鐨勫€艰繘琛岄獙璇併€?璇佷功鍙互閫氳繃涓ょ鏂瑰紡鍔犺浇鍒伴棯瀛樿姱鐗?涓€涓槸鍥轰欢鐗堟湰锛屽彟涓€涓槸鍥轰欢鍒濆寮曞銆備负浜嗗湪鏋?寤烘椂鍔犺浇璇佷功锛屽彧闇€灏嗗寘鍚獵A璇佷功锛堜互PEM鏍煎紡锛夌殑鏂囦欢鏀剧疆server-ca.crt鍦╪odemcu- firmware鏋勫缓鏍戠殑鏍圭洰褰曚笅銆傛瀯寤鸿剼鏈皢鎶婂畠缁撳悎鍒扮敓鎴愮殑鍥轰欢闀滃儚涓€?鍙︿竴绉嶄竾娉曟瘮杈冨鏄撳崌鍙嬶紝閭e氨鏄皢PEM鏁版嵁浣滀负瀛楃鐢插€兼彁渚泃ls.cert.verify銆傝繖浼?灏嗚瘉涔﹀瓨鍌ㄥ湪闂瓨鑺墖涓紝骞舵墦寮€璇ヨ瘉涔︾殑楠岃瘉銆傞殢鍚庯紝nodemeu鐨勫紩瀵煎彲浠ヤ娇 鐢╰ls. cert, verify (true)骞朵娇鐢ㄥ瓨鍌ㄧ殑璇佷功銆?鏂囨。銆嬭嫳璇?妯″潡禄tml829 TM1829妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2016骞?鏈?5鏃?濉炲反鏂拏瀹夆€㈠搱鏂?濉炲反鏂拏瀹夆€㈠搱鏂?tm!829.c tml829鏄竴涓娇鐢═itan Micro tml829 led鎺у埗鍣ㄥ鐞唋ed鐏潯鐨勫簱銆?璇ュ簱浣跨敤浠讳綍GPI銆傚led鎺у埗鍛戒护杩涜姣旂壒娴併€?tml829.write () 浣跨敤鍘熺敓鑺墖鏍煎紡灏嗘暟鎹彂閫佸埌LED鐏甫銆?tml829.write () 浣跨敤鍘熺敓鑺墖鏍煎紡灏嗘暟鎹彂閫佸埌LED鐏甫銆?鍙ユ硶 tml829.write(string) 鍙傛暟 -string鏈夋晥杞借嵎琚彂閫佸埌涓€涓垨澶氫釜TM1829LED銆?杩斿洖 tml829.write(5, string.char(255,0,0,25500)) 鈥?turn the two first RGB Leds to i 瀹氭椂鍣ㄦā鍧?浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2014-12-12 Zeroday dnc40085 tmr.c
tmr妯″潡鍏佽璁块棶绠€鍗曠殑瀹氭椂鍣紝绯荤粺璁℃暟鍣ㄥ拰姝e父杩愯鏃堕棿銆?瀹冪殑鐩殑鏄缓绔嬪畾鏈熷彂鐢熺殑浠诲姟锛岃秴鏃惰繍琛岋紝骞舵彁渚涗綆鍒嗚鲸鐜囩殑澧為噺銆?tmr妯″潡涓嶆槸浠€涔堬紝鏄竴涓鏃舵ā鍧椼€傝櫧鐒跺ぇ澶氭暟瓒呮椂鏃堕棿浠ユ绉掓垨鐢氳嚦寰涓哄崟浣嶏紝浣嗗噯纭?搴︽槸鏈夐檺鐨勶紝澶嶅悎璇樊浼氬鑷寸浉褰撲笉鍑嗙‘鐨勬椂闂翠繚鎸併€傝€冭檻灏唕tctime妯″潡鐢ㄤ簬鈥滄寕閽熲€濇椂闂淬€?NodeMCU鎻愪緵7涓潤鎬佸畾鏃跺櫒锛岀紪鍙蜂负0-6,鍔ㄦ€佸畾鏃跺櫒鍒涘缓鍔熻兘tmr.create銆傘€?銆傛敞鎰?闈欐€佸畾鏃跺櫒宸茶寮冪敤锛岀◢鍚庡皢琚垹闄ゃ€備娇鐢ㄣ€侽API鍚姩tmr.createO銆?tmr.alarm () 杩欐槸涓€涓粨鍚坱mr鐨勪究鍒╁姛鑳姐€?tmr.create () 鍒涘缓涓€涓姩鎬佽鏃跺櫒瀵硅薄銆?tmr.delay () 浣垮鐞嗗櫒蹇欑鎸囧畾鐨勫井绉掓暟銆?tmr.interval () 鏇存敼宸叉敞鍐岀殑璁℃椂鍣ㄧ殑鍒版湡鏃堕棿闂撮殧銆?tmr.now () 杩斿洖绯荤粺璁℃暟鍣紝浠ュ井绉掕銆?tmr.register () 閰嶇疆涓€涓畾鏃跺櫒骞舵敞鍐屽洖璋冨嚱鏁颁互渚垮湪璋冪敤杩囨湡鏃朵娇鐢?tmr.resume () 鎭㈠涓汉璁℃椂鍣ㄣ€?tmr.resume_all () 鎭㈠鎵€鏈夎鏃跺櫒銆?tmr.softwd () 鎻愪緵涓€涓畝鍗曠殑杞欢鐪嬮棬鐙楋紝闇€瑕佸湪鍒版湡鍓嶉噸鏂拌缃垨绂佺敤锛屽惁鍒欑郴缁熷皢 閲嶆柊鍚姩銆?tmr.start () 鍚姩鎴栭噸鏂板惎鍔ㄥ厛鍓嶉厤缃殑璁℃椂鍣ㄣ€?tmr.state () 妫€鏌ュ畾鏃跺櫒鐨勭姸鎬併€?tmr.stop () 鍋滄姝e湪杩愯鐨勮鏃跺櫒锛屼絾涓嶅彇娑堟敞鍐屻€?tmr.suspend () 鎸傝捣涓€涓瑁呰鏃跺櫒銆?tmr.suspend_all () 鎸傝捣鎵€鏈夌洰鍓嶇殑姝﹁璁℃椂鍣ㄣ€?/p>
tmr.unregister () 鍋滄瀹氭椂鍣?濡傛灉姝e湪杩愯)骞跺彇娑堟敞鍐岀浉鍏崇殑鍥炶皟銆?tmr.wdclr () 閫佸叆绯荤粺鐪嬮棬鐙椼€?tmr.alarm () 杩欐槸涓€涓柟渚跨殑鍔熻兘鐩哥粨鍚坱mr. register(),骞秚mr.start()鎴愪竴涓崟涓€鐨勭數璇濄€?浣跨敤姝よ鏃跺櫒閲婃斁璧勬簮鏃讹紝璇疯皟鐢╰mr.unregisterO瀹冦€傚浜庝竴娆℃€у畾鏃跺櫒锛岃繖鏄病鏈夊繀 瑕佺殑锛岄櫎闈炲畠浠湪澶辨晥涔嬪墠鍋滄銆?鍙ユ硶 tmr.alarm([id/ref], interval_mSj mode, func()) 鍙傛暟 鈥d / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (鈥?tmr.create())宸茶繃鏃?鈥nterval.ms瀹氭椂鍣ㄩ棿闅?浠ユ绉掍负鍗曚綅)銆傛渶澶у€兼槸6870947 (1锛?54锛?30.947)銆?鈥ode瀹氭椂鍣ㄦā寮忥細 0 tmr. ALARM_SINGLE 鈥旀鎬ф姤璀?涓嶉渶瑕佹墦鐢佃瘽 tmr. unregister()) 銆倀mr.ALARM_SEMI鎵嬪姩閲嶅鎶ヨ(璋冪敤tmr.start()閲嶅惎) O tmr.ALARM_AUTO鑷姩閲嶅鎶ヨ 鈥unc(timer)鐢ㄥ畾鏃跺櫒瀵硅薄浣滀负鍙傛暟璋冪敤鐨勫洖璋冨嚱鏁?杩斿洖 true濡傛灉瀹氭椂鍣ㄥ惎鍔紝false閿欒 渚?if not tmr.create():alarm(5000j tmr.ALARM_SINGLE3 function() print(鈥渉ey there鈥? end) then print(鈥渨hoopsie鈥? end 涔熷彲浠ョ湅鐪?鈥mr.create() 鈥mr.register() 鈥mr.start() 鈥mr.unregister() tmr.create () 鍒涘缓涓€涓姩鎬佽鏃跺櫒瀵硅薄銆?鍔ㄦ€佽鏃跺櫒鍙互鐢ㄦ潵浠f浛鎺у埗鍔熻兘涓殑鏁板瓧ID銆備篃鍙互浠ラ潰鍚戝璞$殑鏂瑰紡杩涜鎺у埗銆?瀹氭椂鍣ㄥ瀹舵敮鎸佹棾鍔熻兘: 鈥:alarm() 鈥:interval() 鈥:register() 鈥:resume() 鈥:start() 鈥: state() 鈥:stop() 鈥 :suspend() 鈥:unregister() 鍙傛暟 娌℃湁 杩斿洖 timer鐩殑 渚?local mytimer = tmr.create() 鈥搊o calling mytimer:register(5000j tmr.ALARM_SINGLE, function (t) print(鈥渆xpired鈥?; t:unregi: mytimer:start() 鈥?with seLf parameter tmr.register(mytimerj 5000, tmr.ALARM_SINGLE3 function (t) printCexpired"); tmr tmr.start(mytimer) tmr.delay () 浣垮鐞嗗櫒蹇欑鎸囧畾鐨勫井绉掓暟銆?杩欓€氬父鏄竴涓潖涓绘剰锛屽洜涓烘病鏈夊埆鐨勪笢瑗垮彲浠ヨ繍琛岋紝缃戠粶鍫嗘爤(浠ュ強鍏朵粬涓滆タ)鍙兘浼氬洜姝?鑰屽穿婧冦€傚敮涓€ tmr.delay銆傚彲鑳介€傚悎浣跨敤鐨勬槸濡傛灉澶勭悊闇€瑕?闈炲父)鐭殏鐨勫懡浠や箣闂寸殑寤惰繜 鐨勫鍥磋澶囷紝鎴栫被浼肩殑銆傝皑鎱庝娇鐢紒 杩樿娉ㄦ剰锛屽疄闄呭欢杩熺殑鏃堕棿閲忓彲鑳芥槑鏄炬洿澶э紝杩欐槸鐢变簬瀹氭椂涓嶅噯纭互鍙婂湪姝ゆ湡闂村彲鑳借繍琛岀殑 涓柇閫犳垚鐨勩€?鍙ユ硶 tmr.delay(us) 鍙傛暟 us 寰鍒癰usyloop nil tmr.delay(100) tmr.interval () 鏇存敼宸叉敞鍐岀殑璁℃椂鍣ㄧ殑鍒版湡鏃堕棿闂撮殧銆?鍙ユ硶 tmr.interval([id/ref], interval_ms) 鍙傛暟 鈥d / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (鈥?tmr.create())宸茶繃鏃?鈥nterval.ms鏂扮殑瀹氭椂鍣ㄩ棿闅旓紝浠ユ绉掍负鍗曚綅銆傛渶澶у€兼槸6870947 (1锛?54锛?30.947)銆?杩斿洖 nil 渚?mytimer = tmr.create() mytimer:register(10000j tmr.ALARM_AUTO, function() print(鈥渉ey there鈥? end) mytimer:interval(3000) 鈥?actually, 3 seconds is better! mytimer:start() tmr.now () 杩斿洖绯荤粺璁℃暟鍣紝浠ュ井绉掕銆傞檺浜?1浣嶏紝涔嬪悗瀹冨洖缁曞埌闆躲€傚鏋滀娇鐢ㄦ鍔熻兘娑堥櫎鎴栨姂鍒禛PIO 杈撳叆锛岄偅涔堣繖鏄潪甯搁噸瑕佺殑銆?鍙ユ硶 tmr.now() 鍙傛暟 娌℃湁 杩斿洖 绯荤粺璁℃暟鍣ㄧ殑褰撳墠鍊?print(tmr,now()) print(tmr.now()) tmr.register () 閰嶇疆涓€涓畾鏃跺櫒骞舵敞鍐屽洖璋冨嚱鏁颁互渚垮湪璋冪敤杩囨湡鏃朵娇鐢ㄣ€?浣跨敤姝よ鏃跺櫒閲婃斁璧勬簮鏃讹紝璇疯皟鐢╰mr.unregister()瀹冦€傚浜庝竴娆℃€у畾鏃跺櫒锛岃繖鏄病鏈夊繀 瑕佺殑锛岄櫎闈炲畠浠湪澶辨晥涔嬪墠鍋滄銆?鍙ユ硶 tmr. register ([id/ref], intervales, mode, func()) 鍙傛暟 鈥d / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (鈥?tmr.create())宸茶繃鏃?-interval_ms瀹氭椂鍣ㄩ棿闅?浠ユ绉掍负鍗曚綅)銆傛渶澶у€兼槸6870947 (1锛?54锛?30.947)銆?鈥ode瀹氭椂鍣ㄦā寮忥細 銆倀mr.ALARM_SINGLE 鈥旀鎬ф姤璀?涓嶉渶瑕佹墦鐢佃瘽 tmr.unregister()) 0 tmr.ALARM_SEMI鎵嬪姩閲嶅鎶ヨ(璋冪敤tmr.start()閲嶅惎) o tmr.ALARM_AUTO鑷姩閲嶅鎶ヨ -func(timer)鐢ㄥ畾鏃跺櫒瀵硅薄浣滀负鍙傛暟璋冪敤鐨勫洖璋冨嚱鏁?璇锋敞鎰忥紝鐧昏锛屽苟娌℃湁鍚姩鎶ヨ銆?杩斿洖 nil 渚?mytimer = tmr.create() mytimer:register(5000j tmr.ALARM_SINGLE, function銆?print(鈥渉ey there鈥? end) mytimer:start() 涔熷彲浠ョ湅鐪?鈥mr.create() 鈥mr.alarm() tmr.resume () 鎭㈠涓汉璁℃椂鍣ㄣ€?鎭㈠鍏堝墠宸茬粡鏆傚仠鎴栬€呮槸璁℃椂鍣╰mr.suspend鎴杢mr.suspend_all 鍙ユ硶 tmr.resume(id/ref) 鍙傛暟 id/ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (t tmr.create())宸茶繃鏃?true濡傛灉瀹氭椂鍣ㄦ仮澶嶆垚鍔?鈥搑esume timer mytimer mytimer:resume() 鈥揳Lternate metod tmr.resume(mytimer) 涔熷彲浠ョ湅鐪?鈥mr.suspend() 鈥mr.suspend_all() 鈥mr.resume_all() tmr.resume_all () 鎭㈠鎵€鏈夎鏃跺櫒銆?鎭㈠鎵€鏈夊畾鏃跺櫒锛屽寘鎷偅浜涗互鍓嶈涓鐨則mr.suspend鎴栬€卼mr.suspend_all 鍙ユ硶 tmr.resume_all() 鍙傛暟 娌℃湁 杩斿洖 true濡傛灉瀹氭椂鍣ㄦ仮澶嶆垚鍔?鈥搑esume aLL previousLy suspended timers tmr.resume_all() 涔熷彲浠ョ湅鐪?鈥mr.suspend() 鈥mr.suspend_all() 鈥mr.resume() tmr.softwd () 鎻愪緵涓€涓畝鍗曠殑杞欢鐪嬮棬鐙楋紝闇€瑕佸湪鍒版湡鍓嶉噸鏂拌缃垨绂佺敤锛屽惁鍒欑郴缁熷皢閲嶆柊鍚姩銆?鍙ユ硶 tmr.softwd(timeout_s) 鍙傛暟 timeout_s鐪嬮棬鐙楄秴鏃讹紝浠ョ涓哄崟浣嶃€傝绂佺敤鐪嬮棬鐙楋紝璇蜂娇鐢?1 (鎴栦换浣曞叾浠栬礋鍊?銆?杩斿洖 nil 渚?function on_success_callback() tmr.softwd(-1) print(鈥淐omplex task done, soft watchdog disabled!鈥? end tmr.softwd(5) 鈥揼o off and attempt to do whatever might need a restart to recover from complex_stuff_which_might_never_call_the_callback(on_success_callback) tmr.start () 鍚姩鎴栭噸鏂板惎鍔ㄥ厛鍓嶉厤缃殑璁℃椂鍣ㄣ€?鍙ユ硶 tmr.start([id/ref]) 鍙傛暟 id / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (鈥?tmr.create())宸辫繃鏃?杩斿洖 true濡傛灉瀹氭椂鍣ㄥ惎鍔紝false閿欒 渚?mytimer = tmr.create() mytimer:register(5000tmr.ALARM_SINGLE, function() print(鈥渉ey there鈥? end) if not mytimer:start() then print(鈥渦h oh鈥? end 涔熷彲浠ョ湅鐪?鈥mr.create() 鈥mr.register() 鈥mr.stop() 鈥mr.unregister() tmr.state () 妫€鏌诲畾鏃跺櫒鐨勭姸鎬併€?鍙ユ硶 tmr.state([id/ref]) 鍙傛暟 id / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (t tmr.create())宸茶繃鏃?杩斿洖 (bool, int)鎴栬€?nil 濡傛灉鎸囧畾鐨勮鏃跺櫒宸辨敞鍐岋紝鍒欒繑鍥炲綋鍓嶆槸鍚﹀惎鍔ㄥ強鍏舵ā寮忋€傚鏋滃畾鏃跺櫒鏈娉ㄥ唽锛宯il鍒欒繑 鍥炪€?渚?mytimer = tmr.create() print(mytimer:state()) 鈥?nil mytimer:register(5000j tmr.ALARM_SINGLE, function() print(鈥渉ey there鈥? end) running, mode = mytimer:state() print(鈥渞unning: " 鈥?tostring(running)銉汇兓鈥? mode:"銉汇兓 mode) 鈥?running: false, tmr.stop () 鍋滄姝e湪杩愯鐨勮鏃跺櫒锛屼絾骞舵病鏈夊彇娑堟敞鍐屻€傚仠姝㈢殑瀹氭椂鍣ㄥ彲浠ラ噸鏂板惎鍔╰mr.startO銆?鍙ユ硶 tmr.stop([id/ref]) 鍙傛暟 id / ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝OOAPI (t tmr.create())宸茶繃鏃?杩斿洖 true濡傛灉瀹氭椂鍣ㄨ鍋滄锛宖alse閿欒 渚?mytimer = tmr.create() if not mytimer:stop() then print(鈥渢imer not stopped, not registered?鈥? end 涔熷彲浠ョ湅鐪?鈥mr.register() 鈥mr.stop() 鈥mr.unregister() tmr.suspend () 鑽忚捣涓€涓瑁呰鏃跺櫒銆?-瀹氭椂鍣ㄥ湪姝﹁鍚庡彲浠ラ殢鏃舵殏鍋溿€?鈥㈠鏋滃畾鏃跺櫒閲嶆柊鍚姩锛宼mr.start鎴杢mr.alarm浠讳綍鍖归厤鐨勬殏鍋滃畾鏃跺櫒灏嗚涓㈠純銆?鍙ユ硶 tmr.suspend(id/ref) 鍙傛暟 id/ref 瀹氭椂鍣↖D (0-6)鎴栧璞★紝00API (涓€ tmr,create())宸茶繃鏃?杩斿洖 true濡傛灉瀹氭椂鍣ㄦ仮澶嶆垚鍔?渚?鈥搒uspend timer mytimer mytimer:suspend() 鈥揳lternate metod tmr.suspend(mytimer) 涔熷彲浠ョ湅鐪?鈥mr.suspend_all() 鈥mr.resume() 鈥mr.resume_all() tmr.suspend_all () 鎸傝捣鎵€鏈夌洰鍓嶇殑姝﹁璁℃椂鍣ㄣ€?銆傝鍛?璇ュ姛鑳芥殏鍋滄墍鏈夋椿鍔ㄥ畾鏃跺櫒锛屽寘鎷敱NodeMCU瀛愮郴缁熸垨鍏朵粬妯″潡鍚姩鐨勪换浣曟椿鍔ㄥ畾鏃?鍣ㄣ€傝繖鍙兘浼氬鑷撮儴鍒嗙▼搴忓仠姝㈡甯歌繍琛屻€備娇鐢ㄦ鍔熻兘闇€鑷媴椋庨櫓锛?鍙ユ硶 tmr.suspend_all() 鍙傛暟 娌℃湁 杩斿洖 true濡傛灉瀹氭椂鍣ㄨ鎴愬姛鏆傚仠 鏂囨。銆嬭嫳璇€濇ā鍧椔籘SL2561 TSL2561妯″潡
2015骞?鏈?2鏃?杩堝厠灏斿崲鍗℃柉 杩堝厠灏斿崲鍗℃柉 tsl2561.c
tsl2561.getrawchannels () 璇诲彇璁惧鐨?涓紶鎰熷櫒骞惰繑鍥炲叾鍊笺€?/p>
tsl2561.getlux () 浠庤澶囪鍙栦紶鎰熷櫒鍊煎苟杩斿洖璁$畻鐨勫嫆鍏嬫柉鍊笺€?鍙ユ硶 tsl2561.getlux() 鍙傛暟 娌℃湁 杩斿洖 -1UX浠ュ嫆鍏嬫柉璁$畻鐨勭収搴?IX) -status鎸囩ず鎴愬姛鎴栧け璐ョ殑鍊煎涓嬫墍杩? O tsl2561.TSL2561_0K o tsl2561.TSL2561_ERR0R_I2CINIT 涓嶈兘鍒濆鍖栥€嶤 鎬荤嚎 o tsl2561.TSL2561_ERR0R_I2CBUSY銆嶤 鎬荤嚎绻佸繖 o tsl2561.TSL2561_ERR0R_N0INIT鍦ㄨ皟鐢ㄥ嚱鏁颁箣鍓嶅垵濮嬪寲銆嶤鎬荤嚎 o tsl2561.TSL2561_ERR0R_LAST status = tsl2561.init(5, 6, tsl2561.ADDRESS_FL0AT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then lux = tsl2561.getlux() print(鈥淚lluminance: .lux.lx鈥? tsl2561.getrawchannels () 璇诲彇璁惧鐨?涓紶鎰熷櫒骞惰繑鍥炲叾鍊笺€?鍙ユ硶 tS12561.getrawchannels() 鍙傛暟 娌℃湁 杩斿洖 -Ch0骞胯氨浼犳劅鍣ㄧ殑浠峰€?鈥?chi绾㈠浼犳劅鍣ㄧ殑浠峰€?-status鎸囩ず鎴愬姛鎴栧け璐ョ殑鍊煎涓嬫墍杩帮細 0 tsl2561.TSL2561_0K 0 tsl2561.TSL2561_ERR0R_I2CINIT 涓嶈兘鍒濆鍖栥€嶤 鎬荤嚎 0 tsl2561.TSL2561_ERR0R_I2CBUSY銆嶤 鎬荤嚎绻佸繖 o tsl2561.TSL2561_ERR0R_N0INIT鍦ㄨ皟鐢ㄥ嚱鏁颁箣鍓嶅垵濮嬪寲銆嶤鎬荤嚎 o tsl2561.TSL2561_ERR0R_LAST 渚?status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then ch0, chi = ts12561.getrawchannels() print(鈥淩aw values:鈥濃€h0, chi) lux = tsl2561.getlux() print(nIlluminance: n鈥ux.lx") end tsl2561.init () 鍦ㄥ紩鑴歴d鍙﹊n&sclpin涓婂垵濮嬪寲鍣ㄤ欢銆傝繕鍙互閫夋嫨閰嶇疆璁惧鍦板潃鍜屽寘瑁呫€傞粯璁わ細鍦板潃寮曡剼鎮┖ (0x39)鍜孎N灏佽銆?鍙ユ硶 tsl2561.init(sdapin, sclpinfaddress], package]]) 鍙傛暟 鈥dapin鍣ㄤ欢l2Csda杩炴帴鐨勫紩鑴氬彿 鈥clpin鍣ㄤ欢銆嶤scl杩炴帴鐨勫紩鑴氬彿 鈥ddress銆嶤鎬荤嚎涓婂櫒浠剁殑鍙€夊湴鍧€ O tsl2561.ADDRESS_GND O tsl2561.ADDRESS_FL0AT (鐪佺暐鏃堕粯璁? O tsl2561.ADDRESS_VDD 銉籶ackage鍙€夎澶囧眾瑁呯被鍨?鍕掑厠鏂绠楃暐鏈夊樊寮? o tsl2561.PACKAGE CS O tsl2561. PACKAGE_T_FN_CL (鏇剧暐鏃堕粯璁? 杩斿洖 status鎸囩ず鎴愬姛鎴栧け璐ョ殑鍊煎涓嬫墍杩帮細 銉籺sl2561.TSL2561_0K 銉籺sl2561.TSL2561_ERR0R_I2CINIT 涓嶈兘鍒濆鍖栥€嶤 鎬荤嚎 銉籺sl2561.TSL2561_ERR0R_I2CBUSY銆嶤 鎬荤嚎绻佸繖 銉籺sl2561.TSL2561_ERR0R_N0INIT鍦ㄨ皟鐢ㄥ嚱鏁颁箣鍓嶅垵濮嬪寲1骞绘€荤嚎 銉籺sl2561.TSL2561_ERR0R_LAST 渚?status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == ts12561.TSL2561_0K then lux = tsl2561.getlux() print(鈥淚lluminance: 鈥溾€ux鈥︹€?lx鈥? end tsl2561.settiming () 璁剧疆璁惧鐨勭Н鍒嗘椂闂村拰澧炵泭璁剧疆銆備綍鏃秚ls2561.init()琚皟鐢紝杩欎簺鍊奸粯璁や负402姣锛屾病 鏈夊鐩娿€?鍙ユ硶 tsl2561.settiming(integralionj gain) 鍙傛暟 銉籭ntegration璁剧疆璁惧鐨勭Н鍒嗘椂闂淬€傛湁鏁堢殑閫夐」鏄細 O tsl2561.INTEGRATIONTIME_13MS o tsl2561.INTEGRATIONTIME_101MS o tsl2561. INTEGRATIONTIME_402MS (鐪佺暐鏃堕粯璁? -gain璁剧疆璁惧鐨勫鐩娿€傛湁鏁堝墠閫夐」鏄細 O tsl2561.GAIN_lX (鐪佺暐鏃堕粯璁? o tsl2561.GAIN_16X 杩斿洖 status鎸囩ず鎴愬姛鎴栧け璐ョ殑鍊煎涓嬫墍杩帮細 銉籺sl2561.TSL2561_0K 銉籺sl2561.TSL2561_ERR0R_I2CINIT 涓嶈兘鍒濆鍖栥€嶤 鎬荤嚎 銉籺sl2561.TSL2561_ERR0R_I2CBUSY銆嶤 鎬荤嚎绻佸繖 銉籺sl2561.TSL2561_ERR0R_N0INIT鍦ㄨ皟鐢ㄥ嚱鏁颁箣鍓嶅垵濮嬪寲銆嶤鎬荤嚎 銉籺sl2561.TSL2561_ERR0R_LAST status = tsl2561.init(5, 6, tsl2561.ADDRESS_FLOAT, tsl2561.PACKAGE_T_FN_CL) if status == tsl2561.TSL2561_0K then status = tsl2561.settiming(tsl2561.INTEGRATIONTIME_101MS, tsl2561.GAIN_16X) end if status == tsl2561.TSL2561_0K then lux = tsl2561.getlux() print(鈥淚lluminance: 鈥溾€ux鈥︹€?lx鈥? end 鏂囨。銆嬭嫳璇?妯″潡銆媢8g u8g妯″潡 浠ユ潵 璧锋簮璐ㄧ尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?0鏃?Oli Kraus, ArnimLauger 闃垮凹濮嗏€㈡媺鏍?u8glib
U8glib鏄湪olikraus/u8glib寮€鍙戠殑涓€涓浘褰㈠簱锛屾敮鎸佽澶氫笉鍚岀殑鏄剧ず銆侼odeMCU鍥轰欢鏀寔杩欎簺鐨勪竴 涓瓙闆嗐€?銆嶤鍜孲PI妯″紡锛?鈥hll06_128x64 鈥sdl306-128x32,128x64鍜?4x48鍙樹綋 鈥sd1309_128x64 鈥sdl327_96x96^gr 鈥C1611 - dogm240鍜?dogxl240鍙樼 浠?SPI锛?鈻爈d7032_60x32 鈥cd8544_84x48 鈥cf8812,6x65 鈥sdl322_nhd31oled - bw 鍜?gr鍙樼 鈥sdl325_nhd27oled - bw 鍜?gr鍙樼 鈥sdl351_128xl28-gh 鍜?hicolor 鍙樹綋 鈥㈠彉浣?4128n, dogml28/132, lm6059/lm6063, C12832/C12864 鈥cl601_cl28032 鈻燯C1608 - 240x128鍜?40x64鍙樼 鈥cl610_dogxll60 - bw 鍜?gr 鍙樼 鈥cl611 - dogm240鍜?dogxl240鍙樼 鈥C1701 - dogsl02 鍜?minil2864鍙樼 璇ラ泦鎴愬熀浜巚l.19.1銆?/p>
FC鏄剧ず椐嗗姩鍣?閫氳繃FC鍒濆鍖栨樉绀恒€?SPI鏄剧ず椹卞姩鍣?閫氳繃纭欢SPI鍒濆鍖栨樉绀恒€?u8g.fb_rle 鍒濆鍖栦竴涓櫄鎷熸樉绀猴紝鎻愪緵杩愯闀垮害缂栫爜甯х紦鍐插尯鍐呭鍒颁竴涓?Lua鍥炶皟銆?甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?u8g.disp锛氬紑濮嬶紙锛?璇峰弬闃卽8glib begin ()銆?u8g.disp锛?drawBitmap () 鍦ㄦ寚瀹氱殑x/y浣嶇疆锛堜綅鍥剧殑宸︿笂瑙掞級缁樺埗浣嶅浘銆?u8g.disp锛?drawBox () 璇峰弬闃卽8glib drawBox ()銆?u8g.disp锛氱敾鍦嗭紙锛?璇峰弬闃卽8glibdrawCircle ()銆?u8g.disp锛?drawDisc () 璇峰弬闃卽8glibdrawDisc ()銆?u8g.disp锛?drawEllipse () 璇峰弬闃卽8glibdrawEllipse ()銆?u8g.disp锛?drawFilledEllipse () 璇峰弬闃?u8glib drawFilledEllipse銆?u8g.disp锛氬苟鏉℃満锛堬級 璇峰弬闃卽8glibdrawFrame ()銆?/p>
浠?gdsp鈥?drawHLine o 浠?gdsp 鈥渟drawune o 浠?gdsp鈥?drawpixe-() 浠?gdsp鈥?drawRBox o 浠?gdsp鈥?drawRFrame o 浠?gdsp鈥?drawStr () U8gdsp鈥?drawsrso () U8gdsp鈥?drawSt:rl80 o 浠?8gdsp鈥?draws=r270 o 浠?gdsp鈥?drawwang-e o 浠?gdsp鈥?drawVLine () U8gdsp鈥?drawXBM o U8gdsp鈥?鍣?lao 浠?8gdsp " gscoor-ndex () U8g.disp 鈥?gsFontAscenfo 浠?gdsp" gaFOa-Descenf o 浠?gdsp" gaFonpmespacing () u8gdsp 鈥渟gs-HQghf o 椹熷洸 U8g= 椹熷洸 U8g= 椹熸矓 U8g= ssKlu8g= ssKlu8g= ss鍥?U8g= ss*鍥?U8g= 芦鏂峰洸 U8g= bdrawHUne ()銆?bdrawUne ()銆?bdrawpixe-()銆?bdrawRBox ()銆?bdrawRFrame ()銆?bdrawSfr ()銆?bdrawswo銆?bdrawsf銆?80 ()銆?b draws=r270 ()銆?鐬倯u8g=bdrawTriang-e ()銆?芦鏂峰洸 U8g=bdrawvune ()0 Ba鈥擳XBM^K銆?ss鐕冨渾 U8g= *#鍥砋8g= *#鍥砋8g= *椹熷洸 U8g= *椹熷洸 U8g= bzhrsrpage ()銆?bgsco-or-ndex ()銆?b gsFontAscent: () o b gffi-FOMDescea-() o b gffi-FontL-nespac-ng ()銆?/p>
瑭犻鍥睻8g= bgftHQghf ()銆?/p>
u8g.disp锛?setFontRefHeightExtendedlext () 璇峰弬闃卽8glibsetFontRefHeightExtendedTert ()銆?u8g.disp锛?setFontRefHeightText () 璇峰弬闃卽8glibsetFontRefHeightlext ()銆?u8g.disp锛?setRot90 () 璇峰弬闃卽8glibsetRot90 ()銆?u8g.disp锛?setRotl80 () 璇峰弬闃卽8glibsetRotl80 ()銆?u8g.disp锛?setRot270 () 璇峰弬闃卽8glibsetRot270 ()銆?u8g.disp锛?setScale2x2 () 璇峰弬闃卽8glibsetScale2x2 ()銆?u8g.disp锛?sleepOn () 璇峰弬闃卽8glibsleepOn ()銆?u8g.disp锛?sleepOff () 璇峰弬闃卽8glibsleepOff ()銆?u8g.disp锛?undoRotation () 璇峰弬闃卽8glibundoRotation ()銆?u8g.disp锛?undoScale () 璇峰弬闃卽8glibundoScale ()銆?/p>
鏈疄鐜扮殑鍑芥暟 姒傝 PC杩炴帴 灏哠DA鍜孲CL杩炴帴鍒颁换浣曠┖闂茬殑GPlOo 渚嬪銆倁8g^graphics_test.lua棰勮SDA = 5 (GPIO14)鍜孲CL =6 (GPIO12) 0璁块棶鏄剧ず鍣ㄤ箣鍓嶏紝瀹冧滑鐢ㄤ簬璁剧疆nodemeu鐨勩€嶤椹卞姩绋嬪簭锛?sda = 5 scl = 6 i2c.setup(0j sda, scl, i2c.SLOW) SPI杩炴帴 浣跨敤HSPI妯″潡(鏇村淇℃伅)锛屾墍浠ユ煇浜涘紩鑴氭槸鍥哄畾鐨勶細 鈥SPICLK = GPIO14 鈥SPIMOSI=GPIO13 鈥SPIMISO = GPIO12 (鏈娇鐢? 鎵€鏈夊叾浠栧紩鑴氬彲浠ュ垎閰嶇粰浠讳綍鍙敤鐨凣PIO锛?鈥S 鈥/C 鈥ES (鏌愪簺鏄剧ず鍣ㄥ彲閫? 鍙﹁鍙傞槄u8g_graphics_test.lua涓殑鍒濆鍖栧簭鍒? spi.setup(l4 spi.MASTER, spi銉籆POL_LOW, spi.CPHA_LOW, 8, 8) 搴撲娇鐢ㄦ儏鍐?杩欎釜搴撶殑Lua缁戝畾绱ц窡鐫€u8glib鐨勯潰鍚戝璞$殑C ++API銆傚熀浜巙8g绫伙紝鎮ㄥ彲浠ヤ负鎮ㄧ殑鏄剧ず绫诲瀷鍒涘缓涓€ 涓璞°€?SSD1306閫氳繃 FC锛?sla = 0x3c disp = u8g.ssdl306_128x64_i2c(sla) SSD1306閫氳繃 SPI锛?cs = 8 鈥?GPIOlSj puLL-down 10k to GND de = 4 鈥?GPI02 res = 0 鈥?GPI016J RES is optionaL YMMV disp = u8g.ssdl306_128x64_hw_spi(csj de, res) 杩欎釜瀵硅薄鎻愪緵浜嗘墍鏈夌殑u8glib鐨勬柟娉曟潵鎺у埗鏄剧ず銆傚啀娆★紝璇峰弬鑰僽Sg-^graphicS-testlua鏉ヤ簡瑙ua浠g爜 濡備綍瀹炵幇杩欎竴鐐广€傝闂畊8glib涓婚〉鑾峰彇鎶€鏈粏鑺傘€?鏄剧ず鍣?鍙互鍚敤鏀寔u8glib鐨凢C鍜孒WSPIfi绀恒€傝璁块棶鐩稿簲鐨勬瀯閫犲嚱鏁帮紝鍙皢鎵€闇€鐨勬潯鐩坊鍔犲埌app/ include/u8g_config.h 涓殑 FC 鎴?SPI 鏄剧ず琛ㄤ腑锛?#define U8G_DISPLAY_TABLE_12C U8G_DISPLAY_TABLE_ENTRY(ssdl306_128x64_i2c) #define U8G_DISPLAY_TABLE_SPI U8G_DISPLAY_TABLE_ENTRY(ssdl306_128x64_hw_spi) \ U8G_DISPLAY_TABLE_ENTRY(pcd8544_84x48_hw_spi) \ U8G_DISPLAY_TABLE_ENTRY(pcf8812_96x65_hw_spi) 瀛椾綋 u8glib涓哄皬鍨嬫樉绀哄櫒鎻愪緵浜嗗箍娉涚殑瀛椾綋銆傜敱浜庨渶瑕佸皢鍏剁紪璇戝埌鍥轰欢鏄犲儚涓紝鍥犳鎮ㄩ渶瑕佸皢瀹冧滑鍖呭惈 鍦╝pp/ include/u8g_config.h涓苟閲嶆柊缂栬瘧銆傚彧闇€灏嗘墍闇€鐨勫瓧浣撴坊鍔犲埌瀛椾綋琛ㄤ腑锛?#define U8G_F0NT_TABLE U8G_FONT_TABLE_ENTRY(font_6xl0) U8G_F0NT_TABLE_ENTRY(font_Chikita) 浠栦滑浼氬儚u8g.
鍙傛暟
鈥s GHIU5I鑴氱敤浜?Q> 鈥e GPIO寮曡剼鐢ㄤ簬DC 鈥es /RES鐨凣PIO寮曡剼锛岀渷鐣ユ椂鏃?鈥se_delay 1鈥欙細鍦╥nit搴忓垪涓娇鐢ㄥ欢杩?濡傛灉鐪佺暐锛屽垯浣跨敤銆?杩斿洖 u8g鏄剧ず瀵硅薄 渚?spi.set鍙?1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8) cs = 8 鈥?GPIOlSj pull-down 10k to GND de = 4 鈥?GPIO2 res = 0 鈥?GPI016, RES is optionaL YMMV disp = u8g.ssdl306_128x64_hw_spi(csj de, res) 涔熷彲浠ョ湅鐪?FC鏄剧ず椹卞姩鍣?u8g.fb_rle 鍒濆鍖栦竴涓櫄鎷熸樉绀猴紝鎻愪緵杩愯闀垮害缂栫爜甯х紦鍐插尯鍐呭鍒颁竴涓狶ua鍥炶皟銆?鍥炶皟鍑芥暟鍙互鐢ㄦ潵閫愯澶勭悊framebuffer銆傚畠琚玭il绉颁负鍙傛暟锛岀敤浜庢寚绀烘柊甯х殑寮€濮嬶紝鎴栬€呯敤鍖呭惈 鍏锋湁杩愯闀垮害缂栫爜鐨勫抚缂撳啿鍖虹殑琛岀殑瀛楃涓层€傚瓧绗︿覆涓殑绗竴涓瓧鑺傛寚瀹氫簡澶氬皯瀵?x, len),鑰?姣忓瀹氫箟浜嗕竴绯诲垪浜偣鍍忕礌鐨勫紑濮?鏈€宸﹁竟鐨剎鍧愭爣)鍜岄暱搴︺€傝琛屼腑鐨勬墍鏈夊叾浠栧儚绱犻兘鏄粦鑹茬殑銆?n = struct.unpack(鈥淏"J rle_line) print(n鈥︹€?pairs") for i = 0^n-1 do print(string.format(" x: %d len: %d", struct.unpack(鈥淏B鈥? rle_linej 1+1 + i2))) end 鍙ユ硶 u8g.fb_rle(cb_frij width, height) 鍙傛暟 鈥b_fn([rle_line])鍥炶皟鍑芥暟銆俽le_line鏄竴涓寘鍚繍琛岄暱搴︾紪鐮佺殑甯х紦鍐茶鐨勫瓧绗︿覆锛屾垨 鑰卬il鎸囩ず甯х殑寮€濮嬨€?銉粀idth鐨勬樉绀恒€傚繀椤绘槸8鐨勫€嶆暟锛屽皬浜庢垨绛変簬248銆?鈥eight鐨勬樉绀恒€傚繀椤绘槸8鐨勫€嶆暟锛屽皬浜庢垨绛変簬248銆?杩斿洖 u8g鏄剧ず瀵硅薄 甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?u8g.DRAW_UPPER_RIGHT , u8g.DRAW_UPPER_LEFT , u8g.DRAW_LOWER_RIGHT , u8g.DRAW_LOWER_LEFT , u8g.M0DE_BW , u8g.M0DE_GRAY2BIT u8g.font_6xl0 ,鈥?u8g.disp瀛愭ā鍧?u8g.disp锛?drawBitmap () 鍦ㄦ寚瀹氱殑x/y浣嶇疆(浣嶅浘鐨勫乏涓婅)缁樺埗浣嶅浘銆備綅鍥剧殑涓€閮ㄥ垎鍙兘鍦ㄦ樉绀鸿竟鐣屼箣澶栥€備綅鍥剧敱鏁扮粍浣?鍥炬寚瀹氥€傛竻闄ょ殑浣嶈〃绀猴細涓嶈缁樺埗鍍忕礌銆傛暟缁勫唴鐨勪竴涓綅琛ㄧず锛氱敤褰撳墠棰滆壊绱㈠紩鍐欏叆鍍忕礌銆傚浜庡崟 鑹叉樉绀猴紝棰滆壊绱㈠紩0閫氬父浼氭竻闄や竴涓儚绱狅紝棰滆壊绱㈠紩1灏嗚缃竴涓儚绱犮€?鍙ユ硶 disp:drawBitmap(X, y, ent, h, bitmap) 鍙傛暟 銉籜 X浣嶇疆(浣嶅浘鐨勫乏杈逛綅缃? 銉粂 Y浣嶇疆(浣嶅浘鐨勪笂閮ㄤ綅缃? 銉籩nt浣嶅浘鍦ㄦ按骞虫柟鍚戜笂鐨勫瓧鑺傛暟銆備綅鍥剧殑瀹藉害鏄痚nt8銆?-h浣嶅浘鐨勯珮搴?銉籦itmap浣嶅浘鏁版嵁浠ュ瓧绗︿覆褰㈠紡鎻愪緵 杩斿洖 nil 涔熷彲浠ョ湅鐪?鈥8glibdrawBitmap () 鈥ua_examples / u8glib / u8g_bitmaps.lua 鈥8g.disp锛?drawXBM () uSg.disp锛?drawBox () 璇峰弬闃卽8glibdrawBox ()銆?u8g.disp锛氱敾鍦?) 璇峰弬闃卽8glibdrawCircle ()銆?u8g.disp锛?drawDisc () 璇峰弬闃卽8glibdrawDisc ()銆?u8g.disp锛?drawEllipse () 璇峰弬闃卽8glibdrawEllipse ()銆?u8g.disp锛?drawFilledEllipse () 璇峰弬闃?u8glib drawFilledEllipseo u8g.disp锛氬苟鏉℃満() 璇峰弬闃卽8glibdrawFrame ()銆?u8g.disp锛?drawHLine () 璇峰弬闃卽8glib drawHLine ()銆?u8g.disp锛?鐨?drawLine () 璇峰弬闃卽8glibdrawLine ()銆?u8g.disp锛?drawPixel () 璇峰弬闃卽8glibdrawPixel ()銆?uSg.disp锛?drawRBox () 璇峰弬闃卽8glibdrawRBox ()銆?u8g.disp锛?drawRFrame () 璇峰弬闃卽8glib drawRFrame ()銆?u8g.disp锛?drawStr () 璇峰弬闃卽8glibdrawStr ()銆?u8g.disp锛?drawStr90 () 璇峰弬闃?u8glib drawStr90o u8g.disp锛?drawStrl80 () 璇峰弬闃卽8glibdrawStrl8O ()銆?u8g.disp锛?drawStr270 () 璇峰弬闃卽8glibdrawStr270 ()銆?u8g.disp锛?drawTriangle () 鍙傝u8glibdrawTriangle ()銆?u8g.disp锛?drawVLine () 璇峰弬闃卽8glibdrawVLine ()銆?uSg.disp锛?drawXBM () 缁樺埗涓€涓猉BM浣嶅浘銆備綅缃?x, y)鏄綅鍥剧殑宸︿笂瑙掋€俋BM鍖呭惈鍗曡壊鐨?浣嶄綅鍥俱€傛杩囩▼浠呯粯鍒跺儚绱?鍊?.褰撳墠棰滆壊绱㈠紩鐢ㄤ簬缁樺埗(璇峰弬闃卻etColorlndex)銆傚€间负0鐨勫儚绱犱笉缁樺埗(閫忔槑)銆?浣嶅浘鍜孹BM浠ュ瓧绗︿覆褰㈠紡鎻愪緵缁檇rawBitmap()鍜宒rawXBM銆傘€傝繖灏嗗嵏杞戒粠u8g妯″潡鍒颁簩杩涘埗鏂囦欢 鐨勯€氱敤鏂规硶鐨勬墍鏈夋暟鎹鐞嗐€備笌鍩轰簬婧愪唬鐮佺殑XBM鍖呭惈鍦╱8glib涓浉姣旓紝瀹冮渶瑕佹彁渚涢缂栬瘧鐨勪簩杩?鍒舵枃浠躲€傝繖鍙互浣跨敤Online-Utility鐨勫浘鍍忚浆鎹㈠櫒鍦ㄧ嚎鎵ц锛氫粠XBM杞崲涓篗ONO鏍煎紡锛屽苟浣?鐢?nodemcu-uploader.py 鎴?ESPIorer涓婁紶浜岃繘鍒剁粨鏋溿€?鍙ユ硶 disp:drawXBM(x, y, w, h, bitmap) 鍙傛暟 銉籜 X浣嶇疆(浣嶅浘鐨勫乏杈逛綅缃? 銉粂 涓綅缃?浣嶅浘鐨勪笂閮ㄤ綅缃? 銉粀浣嶅浘鐨勫搴?鈥浣嗗€掓棾鍜煎害 鈥itmap XBM鏁版嵁浠ュ瓧绗︿覆褰㈠紡鎻愪緵 杩斿洖 nil 涔熷彲浠ョ湅鐪?鈥8glibdrawXBM () 鈥ua_examples / u8glib / u8g_bitmaps.lua 鈥8g.disp锛?drawBitmap () u8g.disp锛氱涓€椤?) 璇峰弬闃卽8glibfirstPage ()銆?uSg.disp锛?getColorlndex () 璇峰弬闃卽8glibgetColorlndex ()銆?u8g.disp锛?getFontAscent () 璇峰弬闃卽8glibgetFontAscent () o u8g.disp锛?getFontDescent () 璇峰弬闃卽8glibgetFontDescent ()銆?u8g.disp锛?getFontLineSpacing () 璇峰弬闃?u8glib get Font LineSpacing ()銆?u8g.disp锛氱殑 getHeight () 璇峰弬闃卽8glibgetHeight ()銆?u8g.disp锛氳幏鍙栨ā寮?) 璇峰弬闃卽8glibgetMode ()銆?u8g.disp锛氱殑 getWidth () 璇峰弬闃卽8glibgetWidth ()銆?u8g.disp锛?getStrWidth () 璇峰弬闃?u8glib getStrWidth o u8g.disp锛氫笅涓€椤?) 璇峰弬闃卽8glib nextPage ()銆?u8g.disp锛?setColorlndex () 璇峰弬闃卽8glibsetColorlndex ()銆?uSa.disn锛?setcontrast () WllubgHDsetcontrast o 銆?u8g.disp锛?setDefaultBackgroundColor () 璇峰弬闃卽8glibsetDefaultBackgroundColor ()銆?uSg.disp锛?setDefaultForegroundColor () 璇峰弬闃卽8glibsetDefaultForegroundColor ()銆?u8g.disp锛?setfont绋嬪簭() u8glib涓哄皬鍨嬫樉绀哄櫒鎻愪緵浜嗗箍娉涚殑瀛椾綋銆傜敱浜庨渶瑕佸皢瀹冧滑缂栬瘧鍒板浐浠舵槧鍍忎腑锛屾墍浠ラ渶瑕佸皢瀹冧滑鍖呭惈 杩涙潵app/include/u8g_config.h骞堕噸鏂扮紪璇戙€傚彧闇€灏嗘墍闇€鐨勫瓧浣撴坊鍔犲埌瀛椾綋琛ㄤ腑锛?#define U8G_F0NT_TABLE U8G_FONT_TABLE_ENTRY(font_6xl0) U8G_FONT_TABLE_ENTRY(font_chikita) 浠栦滑浼氬儚u8g.
鐨刄ART 锛堥€氱敤寮傛鎺ユ敹鍣?鍙戦€佸櫒锛夋ā鍧楀厑璁稿UART涓茶绔彛鐨勯厤缃拰閫氫俊銆?uart鐨勯粯璁よ缃敱鏋勫缓鏃堕棿璁剧疆鎺у埗銆傞粯璁ゅ€兼槸115,200bpso姝ゅ锛屽湪骞冲彴鍚姩鍚庣殑鍓嶄袱鍒嗛挓锛岃嚜 鍔ㄦ尝鐗圭巼妫€娴嬪姛鑳藉皢鍚敤銆備竴鏃︽敹鍒板嚑涓瓧绗︼紝杩欏皢瀵艰嚧鍒囨崲鍒版纭殑娉㈢壒鐜囥€傝嚜鍔ㄦ尝鐗圭巼妫€娴?鍦╱art.setup琚皟鐢ㄦ椂琚鐢ㄣ€?鉂堕噸瑕?灏界NodeMCU鏈変袱涓猆ART 锛?鍜?锛?浣哢ART 1涓嶈兘鎺ユ敹鏁版嵁锛屽洜姝ゅ彧鑳戒紶杈撱€?uartalt () 鏇存敼UART寮曡剼鍒嗛厤銆?uarton () 璁剧疆鍥炶皟鍑芥暟鏉ュ鐞哢ART浜嬩欢銆?uartsetup () 锛堥噸鏂帮級閰嶇疆UART鐨勯€氫俊鍙傛暟銆?uartgetconfig () 杩斿洖UART鐨勫綋鍓嶉厤缃弬鏁般€?uart.write () 灏嗗瓧绗︿覆鎴栧瓧鑺傚啓鍏ART銆?/p>
uart.alt 锛堬級 鏇存敼UART寮曡剼鍒嗛厤銆?鍙ユ硶 uart.alt(on) 鍙傛暟 銉?涓烘爣鍑嗗紩鑴?-1浣跨敤澶囩敤寮曡剼GPIO13鍜孏PIO15 杩斿洖 nil uart.on 锛堬級 璁剧疆鍥炶皟鍑芥暟鏉ュ鐞哢ART浜嬩欢銆?鐩墠鍙敮鎸佲€滄暟鎹?浜嬩欢銆?鉂舵敞鎰?鐢变簬ESP8266鐨勯檺鍒讹紝鍙湁UART0鎵嶈兘鎺ユ敹鏁版嵁銆?uart.on(method4 [number/end_char]4 [function], [run_input]) 鍙傛暟 銉籱ethod 鈥滄暟鎹€濓紝鏁版嵁宸茬粡鍦║ART涓婃帴鏀跺埌 鈥umber/end_char 銆傚鏋渘 = 0,灏嗘帴鏀剁紦鍐插尯涓殑姣忎釜瀛楃 o濡傛灉n<255,鍒欏湪鎺ユ敹鍒皀涓瓧绗︽椂璋冪敤鍥炶皟 銆傚鏋滀竴涓瓧绗︹€渃鈥濓紝鍒欏湪閬囧埌V鏃跺皢璋冪敤璇ュ洖璋冿紝鎴栬€呮渶澶ф帴鏀秐 = 255 鈥unction鍥炶皟鍑芥暟锛屼簨浠垛€滄暟鎹€濇湁杩欐牱涓€涓洖璋冿細function(data) end 鈥un_input銆傛垨1.濡傛灉0,浠嶶ART杈撳叆涓嶄細杩涘叆Lua瑙i噴鍣紝鍙互鎺ュ彈浜岃繘鍒舵暟鎹€傚鏋?,浠?UA2杈撳叆灏嗚繘鍏ua瑙i噴鍣紝鐒跺悗杩愯銆?瑕佹敞閿€鍥炶皟锛屽彧鎻愪緵鈥滄暟鎹€濆弬鏁般€?杩斿洖 nil 渚?鈥搘hen 4 chars is received. uart.on(鈥渄ata鈥? 4, function(data) print(鈥渞eceive from uart:鈥? data) if data==鈥渜uit鈥?then uart.on(鈥渄ata鈥? 鈥?unregister callback function end end, 0) 鈥搘hen 鈥榎r鈥?is received, uart.on("data\ 鈥?function(data) print(鈥渞eceive from uart:鈥? data) if data==鈥渜uit\r鈥?then uart.on(鈥渄ata鈥? 鈥?unregister catLback function end end, 0) uart.setup () (閲嶆柊)閰嶇疆UART鐨勯€氫俊鍙傛暟銆?鉂舵敞鎰?濡傛灉姝ゅ姛鑳藉湪鎺ユ敹杩囩▼涓噸鏂伴厤缃甎ART,鍒欏彂閫佸埌UART鐨勫瓧鑺傚彲鑳戒細涓㈠け銆?鍙ユ硶 uart.setup(id4 baud, databits, parity, stopbits[4 echo]) 鍙傛暟 鈥d UARTID (0鎴?1) o 鈥aud 300,600,1200,2400,4800,9600,19200,31250,38400,57600,74880,115200,230400,256000,460800,921600,18432 涓殑涓€涓?鈥atabits 5, 6, 7, 8涔嬩竴 鈥arity uart.PARITY_NONE , uart.PARITY_0DD 鎴?uart.PARITY_EVEN 鈥topbits uart.STOPBITS_l , uart.ST0PBITS_l_5 鎴?uart.ST0PBITS_2 -echo濡傛灉涓?,鍒欑鐢ㄥ洖澹帮紝鍚﹀垯鍚敤鍥炲0(濡傛灉鐪佺暐鍒欓粯璁? 杩斿洖 閰嶇疆鐨勬尝鐗圭巼(鏁伴噺) 渚?鈥揷onfigure for 9600, 8N1, with echo uart.setup(0, 96銆傘€傦紝 8, uart.PARITY_NONE, uart.STOPBITS_1, 1) uart.getconfig () 杩斿洖UART鐨勫綋鍓嶉厤缃弬鏁般€?鍙ユ硶 uart.getconfig(id) 鍙傛暟 鈥d UARTID (銆傛垨 1)銆?杩斿洖 鍥涗釜鍊煎涓嬶細 鈥aud 300,600,1200,2400,4800,9600,19200,38400,57600,74880,115200,230400,256000,460800,921600,1843200,368< 涓殑涓€涓?鈥atabits 5, 6, 7, 8涔嬩竴 鈥arity uart.PARITY_NONE , uart.PARITY_ODD 鎴?uart.PARITY_EVEN 鈥topbits uart.STOPBITS_l , uart.ST0PBITS_l_5 鎴?uart.STOPBITS_2 渚?print (uart.getconfig(0)) 鈥損rints 9600 801 for 96銆傘€? 8N1 uart.write () 灏嗗瓧绗︿覆鎴栧瓧鑺傚啓鍏ART銆?鍙ユ硶 uart.write(idj datal [, data24 鈥) 鍙傛暟 銉?id UARTID (0鎴?1) o 銉籨atal瀛楃涓叉垨瀛楄妭閫氳繃UART鍙戦€?杩斿洖 nil uart.write(0, 鈥淗ello, world\n鈥? 鏂囨。銆嬭嫳璇€濇ā鍧椼€婾CG ucg妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?Oli Kraus, ArnimLauger 闃垮凹濮嗏€㈡媺鏍?ucglib
Ucglib鏄湪olikraus/ucglib寮€鍙戠殑鍥惧舰搴擄紝鏀寔褰╄壊TFT鏄剧ず銆侼odeMCU鍥轰欢鏀寔浠ヤ笅閮?鍒嗭細 -ILI9163 -ILI9341 -PCF8833 -SEPS225 -SSD1331 -SSD1351 -ST7735 杩欎釜鏁村悎鍩轰簬vl.3.3銆? 姒傝 鏄剧ず椹卞姩 閫氳繃纭欢SPI鍒濆鍖栨樉绀恒€?甯搁噺 鍚勭鍔熻兘鐨勫父閲忋€?ucg.disp锛氬紑濮?) 璇峰弬闃卽cglibbegin ()銆?ucg.disp锛?clearScreen () 璇峰弬闃卽cglibclearScreen ()銆?ucg.disp锛?draw90Line () 鍙傝ucglibdraw90Line ()銆?ucg.disp锛?drawBox () 鍙傝ucglibdrawBox ()銆?ucg.disp锛氱敾鍦?) 鍙傝ucglibdrawCircle ()銆?ucg.disp锛?drawDisc () 鍙傝ucglib鐨刣rawDisc ()銆?ucg.disp锛氬苟鏉℃満() 璇峰弬闃卽cglibdrawFrame ()銆?ucg.disp锛?drawGlyph () 鍙傝ucglibdrawGlyph ()銆?ucg.disp锛?drawGradientBox () 鍙傝ucglibdrawGradientBox ()銆?ucg.disp锛?drawGradientLine () 鍙傝ucglibdrawGradientLine ()銆?ucg.disp锛?drawHLine () 鍙傝ucglibdrawHLine ()銆?ucg.disp锛氱殑drawLine () 鍙傝ucglibdrawLine ()銆?/p>
ucg.disp锛?drawPixel () 璇峰弬闃卽cglibdrawPixel ()銆?ucg.disp锛?drawRBox () 鍙傝ucglibdrawRBox ()銆?ucg.disp锛?drawRFrame () 鍙傝ucglibdrawRFrame ()銆?ucg.disp锛?drawString涔?() 璇峰弬闃卽cglibdrawString ()銆?ucg.disp锛?drawfetragon () 鍙傝ucglibdrawRtragon ()銆?ucg.disp锛?drawTriangle () 鍙傝ucglibdrawTriangle ()銆?ucg.disp锛?drawVLine () 鍙傝ucglibdrawVIine ()銆?ucg.disp锛?getFontAscent () 璇峰弬闃卽cglibgetFontAscent ()銆?ucg.disp锛?getFontDescent () 璇峰弬闃卽cglibgetFontDescent ()銆?ucg.disp锛?鐨刧etHeight () 璇峰弬闃卽cglibgetHeight () o ucg.disp锛?getStrWidth () 璇峰弬闃卽cglibgetStrWidth ()銆?ucg.disp锛氱殑getWidth () 璇峰弬闃卽cglibgetWidth ()銆?ucg.disp锛氭墦鍗?) 璇峰弬闃卽cglibprint ()銆?ucg.disp锛?setClipRange () 璇峰弬闃卽cglibsetClipRange ()銆?ucg.disp锛氱殑setColor () 璇峰弬闃卽cglibsetColor ()銆?ucg.disp锛?setfont绋嬪簭() ucglib涓哄皬鍨嬫樉绀哄櫒鎻愪緵浜嗗箍娉涚殑瀛椾綋銆?ucg.disp锛?setFontMode () 璇峰弬闃卽cglibsetFontMode ()銆?ucg.disp锛?setFontPosBaseline () 璇峰弬闃卽cglibsetFontPosBaseline ()銆?ucg.disp锛?setFontPosBottom () 璇峰弬闃卽cglibsetFontPosBottom () 鈻?ucg.disp锛?setFontPosCenter () 璇峰弬闃卽cglibsetFontPosCenter ()銆?ucg.disp锛?setFontPoslbp () 璇峰弬闃卽cglibsetFontPoslbp ()銆?ucg.disp锛?setMaxClipRange () 璇峰弬闃卽cglibsetMaxClipRange ()銆?ucg.disp锛?setPrintDir () 璇峰弬闃卽cglibsetPrintDir ()銆?ucg.disp锛?setPrintPos () 璇峰弬闃卽cglibsetPrintPos ()銆?ucg.disp锛?setRotate90 () 璇峰弬闃卽cglibsetRotate90 ()銆?ucg.disp锛?setRotatel80 () 璇峰弬闃卽cglibsetRotate!80 ()銆?ucg.disp锛?setRotate270 () 璇峰弬闃卽cglibsetRotate270 ()銆?ucg.disp锛?setScale2x2 () 璇峰弬闃卽cglibsetScale2x2 ()銆?/p>
ucg.disp锛?undoClipRange () 璇峰弬闃卽cglibundoClipRange ()銆?/p>
姒傝 SPI杩炴帴 浣跨敤HSPI妯″潡锛堟洿澶氫俊鎭級锛屾墍浠ユ煇浜涘紩鑴氭槸鍥哄畾鐨? 鈥SPICLK = GPIO14 鈥SPI MOSI=GPIO13 -HSPI MISO = GPIO12 (鏈娇鐢? 鎵€鏈夊叾浠栧紩鑴氬彲浠ュ垎閰嶇粰浠讳綍鍙敤鐨凣PIO锛?-cs -d/C -RES 锛堟煇浜涙樉绀哄櫒鍙€夛級 涔熻鍙傝€冧緥濡傚湪GraphicslestJua涓殑鍒濆鍖栭『搴? spi.setup(l, spi.MASTER, spi銉籆POL_LO铏?spi銉籆PHA_LO铏?8, 8) 搴撲娇鐢ㄦ儏鍐?Lua缁戝畾杩欎釜搴撶揣璺熺潃ucglib闈㈠悜瀵硅薄鐨凜++APIo鏍规嵁ucg绫伙紝涓烘偍鐨勬樉绀虹被鍨嬪垱寤轰竴涓 閫氳繃 SPI 鐨?ILI9341锛?cs = 8 鈥?GPIOlSj puLL-down 10k to GND de = 4 鈥?GPI02 res = 0 鈥?GPIOlGj RES is optionaL YMMV disp = ucg.ili9341_18x240x320_hw_spi(cs, de, res) 杩欎釜瀵硅薄鎻愪緵浜嗘墍鏈夌殑ucglib鏂规硶鏉ユ帶鍒舵樉绀恒€傚啀娆″弬鑰僄raphicslestlua鏉ヨ幏寰椾竴涓嵃璞″浣?鐢↙ua浠g爜瀹炵幇銆傝闂畊cglib涓婚〉鑾峰彇鎶€鏈粏鑺傘€?鏄剧ず鍣?瑕佽闂樉绀烘瀯閫犲嚱鏁帮紝灏嗘墍闇€鐨勬潯鐩坊鍔犲埌app / include/ ucg_config.h涓殑鏄剧ず琛ㄤ腑: #define UCG_DISPLAY_TABLE UCG_DISPLAY_TABLE_ENTRY(ili9341_18x240x320_hw_spi, ucg_dev_ili9341_18x240x32l UCG_DISPLAY_TABLE_ENTRY(st7735_18xl28xl60_hw_spiJ ucg_dev_st7735_18xl28xl60, 瀛椾綋
ucglib涓哄皬鍨嬫樉绀哄櫒鎻愪緵涓佸巶娉涙棾瀛愪綋銆傜敱鍗侀渶瑕佸皢鍏剁紪璇﹀埌鍥轰欢鏄犲偄涓紝鍥犳鎮ㄩ渶瑕佸皢瀹冧滑 鍖呭惈鍦╝pp / include / ucg_config.h涓苟閲嶆柊缂栬瘧銆傚彧闇€灏嗘墍闇€鐨勫瓧浣撴坊鍔犲埌瀛椾綋琛ㄤ腑锛?/p>
浠栦滑浼氬儚ucg.
浠栦滑浼氬儚ucg. 璇ュ疄鐜版敮鎸佺鐗囨秷鎭紝鑷姩鍝嶅簲ping璇锋眰锛屽苟瀹氭湡ping濡傛灉鏈嶅姟鍣ㄤ笉閫氫俊銆?SSL/TLS 鏀寔 娉ㄦ剰缃戠粶妯″潡涓褰曠殑绾︽潫鏉′欢銆?websocket.createC 1 ient () 鍒涘缓涓€涓柊鐨剋ebsocket瀹㈡埛绔€?websocket.client锛氬叧闂?) 鍏抽棴websocket杩炴帴銆?websocketclient锛氶厤缃?(PARAMS) 閰嶇疆websocket瀹㈡埛绔疄渚嬨€?websocket.client锛?connect ()鐨?灏濊瘯寤虹珛涓€涓獁ebsocket杩炴帴鑷?|缁欏畾鐨刄 RL銆?websocketclient锛?涓?) 娉ㄥ唽鍥炶皟鍑芥暟鏉ュ鐞唚ebsockets浜嬩欢(姣忎釜浜嬩欢绫诲瀷鍙兘娉ㄥ唽_ 涓鐞嗗嚱鏁?銆?websocketxlient锛氬彂閫?) 閫氳繃websocket杩炴帴鍙戦€佹秷鎭€?/p> websocket.createClient () 鍒涘缓涓€涓柊鐨剋ebsocket瀹㈡埛绔€傝繖涓鎴风搴旇瀛樺偍鍦ㄤ竴涓彉閲忎腑锛屽苟鎻愪緵鎵€鏈夌殑鍔熻兘鏉ュ 鐞嗚繛鎺ャ€?褰撹繛鎺ュ叧闂椂锛屽悓涓€涓鎴风浠嶇劧鍙互琚噸鐢?鍥炶皟鍑芥暟琚繚鐣?浣犲彲浠ュ啀娆¤繛鎺ュ埌浠讳綍鏈嶅姟 鍣ㄣ€?鍦ㄥ鐞嗗鎴蜂箣鍓嶏紝涓€瀹氳鎵撶數璇漺s:close() o 鍙ユ硶 websocket.createClient() 鍙傛暟 娌℃湁 杩斿洖 websocketclient local ws = websocket.cneateClient() ws:close() ws = nil websocket.client: 鍏抽棴() 鍏抽棴websocket杩炴帴銆傚鎴风鍙戝嚭涓€涓叧闂殑妗嗘灦锛屽苟璇曞浘浼橀泤鍦板叧闂璚ebSocket銆傚鏋滄湇鍔?鍣ㄦ病鏈夊洖澶嶏紝杩炴帴浼氬湪涓€涓皬瓒呮椂鍚庣粓姝€?鍗充娇WebSocket娌℃湁杩炴帴锛屼篃鍙互璋冪敤璇ュ嚱鏁般€?鍦ㄥ鐞嗗websocket瀹㈡埛绔殑寮曠敤涔嬪墠锛屽繀椤诲缁堣皟鐢ㄦ鍑芥暟銆?鍙ユ硶 websocket:close() 鍙傛暟 娌℃湁 杩斿洖 nil ws = websocket.createClient() ws:close() ws:close() 鈥?nothing wiLL happen ws = nil 鈥?fuLLy dispose the cLient as Lua wiLL now gc it websocket.client:閰嶇疆(PARAMS) 閰嶇疆websocket瀹㈡埛绔疄渚嬨€?鍙ユ硶 websocket:config(params) 鍙傛暟 鈥?params琛ㄩ厤缃弬鏁般€備互涓嬮敭琚瘑鍒細 銉籬eaders褰卞搷姣忎釜璇锋眰鐨勯澶栬姹傛爣澶磋〃 杩斿洖 nil 渚?ws = websocket. created ient() ws:config({headers=([鈥楿ser-Agent鈥橾=鈥楴odeMCU鈥檥}) websocket.client: connect ()鐨?灏濊瘯寤虹珛涓€涓獁ebsocket杩炴帴鍒扮粰瀹氱殑U RL銆?鍙ユ硶 websocket:connect(url) 鍙傛暟 銉?url websocket鐨刄RL銆?杩斿洖 nil 渚?ws = websocket. created ient() ws:connect(鈥榳s://echo.websocket.org鈥? 濡傛灉澶辫触锛岄敊璇皢閫氳繃 websocket:on(鈥渃lose鈥? handler)銆?websocket.client:涓?) 娉ㄥ唽鍥炶皟鍑芥暟鏉ュSwebsockets浜嬩欢(姣忎釜浜嬩欢绫诲瀷鍙兘娉ㄥ唽涓€涓鐞嗗嚱鏁?銆?鍙ユ硶 websocket:on(eventName, function(ws,銉汇兓銉?) 鍙傛暟 -eventName websocket浜嬩欢鐨勭被鍨嬫潵娉ㄥ唽鍥炶皟鍑芥暟銆傝繖浜涗簨浠?鏄細 connection , receive 鍜?close 銆?銉籪unction(ws, 鈥?鍥炶皟鍑芥暟銆傚嚱鏁扮殑绗竴涓弬鏁板缁堟槸websocketclient銆傚叾浠栧弬鏁版槸 蹇呴渶鐨勶紝鍏蜂綋鍙栧喅浜庝簨浠剁被鍨嬨€傜湅鍒版洿澶氱殑缁嗚妭鐨勪緥瀛愩€傚鏋渘il浠ュ墠閰嶇疆鐨勫洖璋冩湭娉?rm zKl銆?local ws = websocket.createdient() ws:on(鈥渃onnection鈥? function(ws) print(鈥榞ot ws connection鈥? end) ws:on("receive"4 function(, msg, opcode) print('got message: 'msg, opcode) 鈥?opcode is 1 for text message, 2 for binai end) ws:on(鈥渃lose鈥? function(> status) print(鈥榗onnection closed鈥? status) ws = nil 鈥?required to Lua gc the websocket cLient end) ws:connect(鈥榳s://echo.websocket.org鈥? 璇锋敞鎰忥紝濡傛灉鍙戠敓浠讳綍閿欒锛屼篃浼氳Е鍙戝叧闂洖璋冦€?鍏抽棴鐨勭姸鎬佺爜锛屽鏋滀笉鏄?,鍒欒〃绀洪敊璇紝濡備笅琛ㄦ墍杩般€?鐘舵€佺爜 璇存槑 0 鐢ㄦ埛璇锋眰鍏抽棴鎴栬繛鎺ュ凡姝e父缁堟 -1 鏃犳硶浠嶶RL涓彁鍙栧崗璁?-2 涓绘満鍚嶅お澶э紙>256涓瓧绗︼級 -3 鏃犳晥鐨勭鍙e彿锛堝繀椤汇€?M<= 65535锛?-4 鏃犳硶鎻愬彇涓绘満鍚?-5 DNS鏃犳硶鏌绘壘涓绘満鍚?-6 鏈嶅姟鍣ㄨ姹傜粓姝?-7 鏈嶅姟鍣ㄥ彂閫佹棤鏁堢殑鎻℃墜HTTP鍝嶅簲锛堝嵆鏈嶅姟鍣ㄥ彂閫佷簡涓€涓敊璇殑瀵嗛挜锛?-8 鍒?14 鏃犳硶鍒嗛厤鍐呭瓨鏉ユ帴鏀舵秷鎭?-15 鏈嶅姟鍣ㄦ病鏈夋纭湴閬靛惊FIN浣嶅崗璁?-16 鏃犳硶鍒嗛厤鍐呭瓨鏉ュ彂閫佹秷鎭?-17 鏈嶅姟鍣ㄤ笉鍒囨崲鍗忚 -18 杩炴帴瓒呮椂 -19 鏈嶅姟鍣ㄤ笉鍝嶅簲鍋ュ悍妫€鏌ユ垨閫氫俊 -99 鍒?999 閭d箞涓嶅ソ鐨勪簨鍙戠敓浜?/p> websocket.client:鍙戦€?) 閫氳繃websocket杩炴帴鍙戦€佹秷鎭€?websocket:send(message, opcode) 鍙傛暟 鈥essage瑕佸彂閫佺殑鏁版嵁銆?鈥pcode鍙€夊湴璁剧疆鎿嶄綔鐮?榛樿锛?,鐭俊) 杩斿洖 nil鎴栬€呭鏋滃鎺ュ瓧鏈繛鎺ワ紝鍒欏彂鐢熼敊璇?渚?ws = websocket. created ient() ws:on(鈥渃onnection鈥? function() ws:send(鈥榟ello!鈥? end) ws:connect('ws://echo.websocket.org1) 鏂囨。銆嬭嫳璇€濇ā鍧椼€嬫棤绾夸笂缃?WiFi妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015 骞?5 鏈?12 H Zeroday dnc40085 wifi.c 銆傞噸瑕?/p> WiFi瀛愮郴缁熺敱蹇呴』瀹氭湡杩愯鐨勫悗鍙颁换鍔$淮鎶ゃ€備换浣曡姳璐硅秴杩?5姣锛堟绉掞級鐨勫姛鑳芥垨浠诲姟 閮藉彲鑳藉鑷碬iFi瀛愮郴缁熷穿婧冦€備负浜嗛伩鍏嶈繖浜涙綔鍦ㄧ殑宕╂簝锛屽缓璁甒iFi瀛愮郴缁熷湪鎵ц瓒呰繃 15ms鎸囧崡鐨勪换浣曚换鍔℃垨鍔熻兘涔嬪墠锛屼娇鐢╳ifi.suspend 锛堬級鎸傝捣銆?NodeMCU WiFi鎺у埗鍒嗗竷鍦ㄥ涓〃涓細 -Wifi鐢ㄤ簬鏁翠綋WiFi閰嶇疆 鈥ifi.sta鐢ㄤ簬鐢靛彴妯″紡鍔熻兘 -wifi.ap鐢ㄤ簬鏃犵嚎鎺ュ叆鐐癸紙WAP鎴栫畝绉癆P锛夊姛鑳?鈥ifi.ap.dhcp鐢ㄤ簬DHCP鏈嶅姟鍣ㄦ帶鍒?鈥ifi.eventmon涓簑ifi浜嬩欢鐩戣鍣?wifi.getchannel () 鑾峰彇褰撳墠鐨刉iFi棰戦亾銆?wifi.getdefauItmode () 鑾峰彇榛樿鐨刉iF鑷婁綔妯″紡銆?wifi.getmode () 鑾峰彇WiFi鎿嶄綔妯″紡銆?wifi.getphymode () 鑾峰彇WiFi鐗╃悊妯″紡銆?wifi.nullmodesleep () 閰嶇疆WiFi鏄惁鑷姩杩涘叆NULL_MODE鐫$湢鐘舵€併€?wifi.resume () 浠庢寕璧风姸鎬佸敜閱扺i Fi鎴栧彇娑堟寕璧风殑Wi Fi鎸傝捣銆?wifi.setmode () 閰嶇疆WiFi妯″紡浣跨敤銆?wifi.setphymode () 璁剧疆WiFi鐗╃悊妯″紡銆?wifi.startsmart () 寮€濮嬭嚜鍔ㄩ厤缃紝濡傛灉鎴愬姛鑷姩璁剧疆SSID鍜屽瘑鐮併€?wifi.stopsmart () 鍋滄鏅鸿兘閰嶇疆杩囩▼銆?wifi.suspend () 鎸傝捣Wifi浠ュ噺灏戠數娴佹秷鑰椼€?wifi.sta.autoconnect () 鑷姩浠ョ珯妯″紡杩炴帴鍒癆P銆?wifi.sta.changeap () 浠巜ifi杩斿洖鍒楄〃涓€夋嫨鎺ュ叆鐐广€?/p> wifi.sta.clearconfig () 娓呴櫎褰撳墠淇濆瓨鐨刉iFi绔欑偣閰嶇疆锛屼粠闂瓨涓竻闄ゃ€?wifi.sta.config () 璁剧疆WiFi绔欑偣閰嶇疆銆?wifi.sta.connect () 杩炴帴鍒扮珯妯″紡涓嬮厤缃殑AP銆?wifi.sta.disconnect () 鍦ㄥ伐浣滅珯妯″紡涓嬩笌AP鏂紑杩炴帴銆?wifi.sta.getap () 灏咥P鍒楄〃浣滀负Lua琛ㄦ壂鎻忓洖璋冨嚱鏁般€?wifi.sta.getapindex () 鑾峰彇瀛樺偍鍦ˋP缂撳瓨涓殑褰撳墠鎺ュ叆鐐圭殑绱㈠紩銆?wifi.sta.getapinfo () 鑾峰彇ESP8266绔欑偣缂撳瓨鐨凙P淇℃伅銆?wifi.sta.getbroadcast () 鑾峰彇绔欐ā寮忎笅鐨勫箍鎾湴鍧€銆?wifi.sta.getconfig () 鑾峰彇WiFi绔欑偣閰嶇疆銆?wifi.sta.getdefaultconfig () 鑾峰彇瀛樺偍鍦ㄩ棯瀛樹腑鐨勯粯璁iFi绔欑偣閰嶇疆銆?wifi.sta.gethostname () 鑾峰彇褰撳墠鐨勭珯鐐逛富鏈哄悕銆?wifi.sta.getip () 鑾峰彇绔欐ā寮忎笅鐨処P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧鍦板潃銆?wifi.sta.getmac () 鑾峰彇绔欐ā寮忎笅鐨凪AC鍦板潃銆?wifi.sta.getrssi () 鑾峰彇ESP8266鎵€杩炴帴鐨勬帴鍏ョ偣鐨凴SSI 锛堟帴鏀朵俊鍙峰己搴︽寚绀虹锛夈€?wifi.sta.setaplimit () 璁剧疆瀛樺偍鍦ㄩ棯瀛樹腑鐨勬渶澶ф帴鍏ョ偣鏁伴噺銆?wifi.sta.sethostname () 璁剧疆绔欑偣涓绘満鍚嶃€?wifi.sta.setip () 鍦ㄥ伐浣滅珯妯″紡涓嬭缃甀P鍦板潃锛岀綉缁滄帺鐮侊紝缃戝叧鍦板潃銆?wifi.sta.setmac () 鍦ㄥ伐浣滅珯妯″紡涓嬭缃甅AC鍦板潃銆?wifi.sta.sleeptype () 鍦ㄨ繛鎺ュ埌鎺ュ叆鐐规椂閰嶇疆瑕佷娇鐢ㄧ殑WiFi璋冨埗瑙h皟鍣ㄧ殑鐫$湢绫诲瀷銆?wifi.sta.status () 鑾峰彇宸ヤ綔绔欐ā寮忎笅鐨勫綋鍓嶇姸鎬併€?wifi.ap.config () 鍦ˋP妯″紡涓嬭缃甋SID鍜屽瘑鐮併€?wifi.ap.deauth () 閫氳繃鍙戦€佺浉搴旂殑IEEE802,浠嶦SP鎺ュ叆鐐逛腑鍒犻櫎锛堝己鍒跺垹闄わ級瀹㈡埛 绔€?wifi.ap.getbroadcast () 鑾峰彇AP妯″紡涓嬬殑骞挎挱鍦板潃銆?wifi.ap.getclient () 鑾峰彇浠P妯″紡杩炴帴鍒拌澶囩殑瀹㈡埛绔〃銆?wifi.ap.getconfig () 鑾峰彇褰撳墠鐨凷oftAP閰嶇疆銆?wifi.ap.getdefaultconfig () 鑾峰彇瀛樺偍鍦ㄩ棯瀛樹腑鐨勯粯璁oftAP閰嶇疆銆?wifi.ap.getip () 鍦ˋP妯″紡涓嬭幏鍙朓P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧銆?wifi.ap.getmac () 鍦ˋP妯″紡涓嬭幏鍙朚AC鍦板潃銆?/p> wifi.ap.setip () 鍦ˋP妯″紡涓嬭缃甀P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧鍦板潃銆?wifi.ap.setmac () 鍦ˋP妯″紡涓嬭缃甅AC鍦板潃銆?wifi.ap.dhcp.config () 閰嶇疆DHCP鏈嶅姟銆?wifi.ap.dhcp.start () 鍚姩DHCP鏈嶅姟銆?wifi.ap.dhcp.stop () 鍋滄DHCP鏈嶅姟銆?wifi.eventmon.register () 娉ㄥ唽寤婃秷娉ㄥ唽Wi Fi浜嬩欢鐩戣鍣ㄧ殑鍥炶皟銆?wifi.eventmon.unregister () 鍙栨秷娉ㄥ唽WiFi浜嬩欢鐩戣鍣ㄧ殑鍥炶皟銆?wifi.eventmon. reason 鍖呭惈鏂紑鍘熷洜鐨勮〃銆?/p> wifi.getchannel () 鑾峰彇褰撳墠鐨刉iFi棰戦亾銆?鍙ユ硶 wifi.getchannel() 鍙傛暟 nil 杩斿洖 鐩墠鐨刉iFi棰戦亾 wifi.getdefaultmode () 鑾峰彇榛樿鐨刉iFi鎿嶄綔妯″紡銆?鍙ユ硶 wifi.getdefaultmode() 鍙傛暟 nil 杩斿洖 鍦╓iFi妯″紡锛屼负涓€浣?wifi.STATION , wifi.SOFTAP , wifi.STATIONAP 鎴?wifi.NULLMODE 甯告暟銆?涔熷彲浠ョ湅鐪?wifi . getmode() wifi.setmode() wifi.getmode () 鑾峰彇WiFi鎿嶄綔妯″紡銆?鍙ユ硶 wifi.getmode() 鍙傛暟 nil 杩斿洖 鍦?WiFi妯″紡锛屼负涓€浣?wifi. STATION , wifi.SOFTAP , wif i . STATIONAP 鎴?wifi . NULLMODE 甯告暟銆?涔熷彲浠ョ湅鐪?wifi , getdefaultmode() wifi.setmode() wifi.getphymode () 鑾峰彇WiFi鐗╃悊妯″紡銆?鍙ユ硶 wifi.getphymode() 鍙傛暟 娌℃湁 杩斿洖 褰撳墠鐨勭墿鐞嗘ā寮忎负鍏朵腑涔嬩竴 wifi. PHYMODE_B , wifi. PHYMODE_G 鎴栬€?wifi. PHYMODE_N銆?涔熷彲浠ョ湅鐪?wifi , setphymode() wifi.nullmodesleep () 閰嶇疆WiFi鏄惁鑷姩杩涘叆NU LL_MODE鐫$湢鐘舵€併€傞粯璁ゅ惎鐢ㄣ€?銆傛敞鎰?濡傛灉涓嶉渶瑕佸湪NULL.MODE涓嚜鍔ㄤ紤鐪狅紝鍒欒鍑芥暟涓嶄細灏嗗叾瀛樺偍鍦ㄩ棯瀛?涓紝wifi, nullmodesleep (false)蹇呴』鍦ㄤ笂鐢碉紝閲嶆柊鍚姩鎴栦粠娣卞害浼戠湢涓敜閱掑悗璋冪敤璇?鍑芥暟銆?wifi鈥ullmodesleep([enable]) 鍙傛暟 鈥nable -true鍦∟U LL.M ODE涓惎鐢╓iFi鑷姩鐫$湢銆?榛樿璁剧疆) -false鍦∟ULL.MODE涓鐢╓iFi鑷姩鐫$湢銆?杩斿洖 -sleep_enabled褰撳墠/鏂扮殑NULL.MODE鐫$湢璁剧疆 銆傚鏋渨ifi.nullmodesleep()涓嶅甫鍙傛暟璋冪敤锛屽垯杩斿洖褰撳墠璁剧疆銆?銆傚鏋渨ifi.nullmodesleep()鐢╡nable鍙傛暟璋冪敤锛屽垯杩斿洖鏂拌缃殑纭銆?wifi.resume () 浠庢寕璧风姸鎬佸敜閱扺iFi鎴栧彇娑堟寕璧风殑WiFi鎸傝捣銆?鉂舵敞鎰?Wifi鎭㈠寮傛鍙戠敓锛岃繖鎰忓懗鐫€鎭㈠璇锋眰灏嗗彧鍦ㄥ鐞嗗櫒鐨勬帶鍒舵潈浼犻€掑洖 SDK (MyResumeFunction ()瀹屾垚鍚?鎵嶈澶勭悊銆傛仮澶嶅洖璋冧篃鏄紓姝ユ墽琛岀殑锛屽彧鏈夊湪 WiFi鎭㈠姝e父杩愯鍚庢墠浼氭墽琛屻€?鍙ユ硶 wifi鈥esume([resume_cb]) 鍙傛暟 -resume_cb褰揥iFi浠庢殏鍋滅姸鎬佸敜閱掓椂鎵ц鍥炲彨銆傦紒娉ㄦ剰鈥滄敞鎰忥細鈥?浠讳綍浠ュ墠鎻愪緵鐨勫洖璋冨皢琚浛鎹紒 杩斿洖 nil 渚?鈥揜esume wifi from timed or indefinite sLeep wifi.resume() 鈥揜esume wifi from timed or indefinite sLeep w/ resume caLLback wifi.resume(function() print(鈥淲iFi resume鈥? end) 涔熷彲浠ョ湅鐪?鈥ifi.suspend() 鈥ode.sleep() 鈥ode.dsleep() wifi.setmode () 閰嶇疆WiFi妯″紡浣跨敤銆侼odeMCU鍙互浠ュ洓绉峎iFi妯″紡涔嬩竴杩愯锛?-绔欐ā寮忥紝NodeMCU璁惧鍔犲叆鐜版湁缃戠粶 -鎺ュ叆鐐?AP)妯″紡锛屽湪閭i噷鍒涘缓鑷繁鐨勭綉缁滐紝鍏朵粬浜哄彲浠ュ姞鍏?-Station+AP妯″紡锛屽湪姝ゆā寮忎笅锛屽畠鏃㈠垱寤鸿嚜宸辩殑缃戠粶锛屽悓鏃跺張杩炴帴鍒板彟涓€涓幇鏈夌殑缃戠粶 -WiFi鍏抽棴 褰撲娇鐢ㄧ粍鍚堢數鍙?AP妯″紡鏃讹紝涓や釜缃戠粶灏嗕娇鐢ㄧ浉鍚岀殑棰戦亾锛屽洜涓烘棤绾跨數鍙兘鍦ㄥ崟涓閬撲笂鏀?鍚€?鉂舵敞鎰?鍗充娇璁惧鍏抽棴锛學iFi閰嶇疆涔熶細淇濈暀锛岀洿鍒版洿鏀逛负姝€?鍙ユ硶 wifi,setmode(mode[, save]) 鍙傛暟 -mode浠峰€煎簲璇ユ槸鍏朵腑涔嬩竴 0 wifi.STATION褰撹澶囪繛鎺ュ埌WiFi璺敱鍣ㄦ椂銆傝繖閫氬父鏄负浜嗚璁惧璁块棶浜掕仈缃戙€?銆倃ifi.SOFTAP鍥犱负褰撹澶囧彧浣滀负涓€涓帴鍏ョ偣銆傝繖灏嗗厑璁告偍鍦╓iFi缃戠粶鍒楄〃涓煡鐪嬭澶?(褰撶劧锛岄櫎闈炴偍闅愯棌SSID)銆傚湪杩欑妯″紡涓嬶紝鎮ㄧ殑璁$畻鏈哄彲浠ヨ繛鎺ュ埌璁惧锛屽垱寤轰竴涓?灞€鍩熺綉銆傞櫎闈炴偍鏇存敼璇ュ€硷紝鍚﹀垯NodeMCU璁惧灏嗚幏寰椾竴涓湰鍦癐P鍦板潃192.168.4.1,骞?涓烘偍鐨勮绠楁満鍒嗛厤涓嬩竴涓彲鐢ㄧ殑IP鍦板潃锛屼緥濡?92.168.4.2銆?0 wifi.STATIONAP 鏄殑缁勫悎 wifi.STATION 鍜?wifi.SOFTAP銆傚畠鍏佽鎮ㄥ垱寤烘湰鍦癢iFi 杩炴帴骞惰繛鎺ュ埌鍙︿竴涓猈iFi璺敱鍣ㄣ€?o Wifi.NULLMODE 灏哤iFi妯″紡鏇存敼涓篘ULL_MODE灏嗕娇wifi杩涘叆涓嶮ODEM.SLEEP绫讳技 鐨勪綆鍔熻€楃姸鎬侊紝浣嗘湭鎻愪緵wifi. nullmodesleep(false)銆?-save閫夋嫨鏄惁灏唚ifi妯″紡淇濆瓨鍒伴棯瀛?鈻?true WiFi妯″紡閰嶇疆灏嗗湪鐢垫簮鍛ㄦ湡涓繚鐣欍€?榛樿) 掳 false WiFi妯″紡閰嶇疆灏嗕笉浼氶€氳繃閲嶆柊鍚姩杩涜淇濈暀銆?杩斿洖 褰撳墠妯″紡璁剧疆鍚?渚?wifi.setmode(wifi.STATION) 涔熷彲浠ョ湅鐪?wifi , getmode() wifi.getdefaultmode() wifi.setphymode () 璁剧疆WiFi鐗╃悊妯″紡銆?802.11b,鏇村鏃宠寖鍥达紝浣庝紶杈撻€熺巼锛屾洿澶氭棾鐢垫祦娲庤€?-wifi.PHYMODE_G 802.11g,涓瓑鑼冨洿锛屼腑绛変紶杈撻€熺巼锛屼腑绛夌數娴?銉粀ifi.PHYMODE_N 802.11D,鏈€灏忚寖鍥达紝蹇€熶紶杈撻€熺巼锛屾渶灏忕數娴佹秷鑰?浠呴檺浜庣珯鐐?鏉?鑷狤spressif鏁版嵁琛╲4.3鐨勪俊鎭?鍙傛暟 鍏稿瀷鐨勫姛鐜囦娇鐢?lx 802.11b, CCK 11Mbps, POUT = + 17dBm 170姣畨 Tx802.11g, OFDM 54Mbps, POUT = + 15dBm 140姣畨 Tx802.11n, MCS7 65Mbps, POUT = + 13dBm 120姣畨 Rx 802.11b, 1024瀛楄妭鏁版嵁鍖呴暱搴︼紝-80dBm 50姣畨 Rx802.11g, 102鎺ㄨ妭鍖呴暱锛?70dBm 56姣畨 Rx802.11n, 1024瀛楄妭鍖呴暱锛?65dBm 56姣畨 鍙ユ硶 wifi , setphymode(mode) 鍙傛暟 mode涓嬪垪涔嬩竴 鈥ifi.PHYMODE_B 鈥ifi.PHYMODE_G 鈥ifi.PHYMODE_N 杩斿洖 鐗╃悊妯″紡璁剧疆鍚?涔熷彲浠ョ湅鐪?wifi 銉?getphymode() wifi.startsmart () 寮€濮嬭嚜鍔ㄩ厤缃紝濡傛灉鎴愬姛鑷姩璁剧疆SSID鍜屽瘑鐮併€?鏃ㄥ湪鐢ㄤ簬SmartConfig搴旂敤绋嬪簭锛屽Espressif鐨凙ndroid鍜宨OS搴旂敤绋嬪簭銆?鍙兘鍦╳ifi.STATION妯″紡涓嬩娇鐢ㄣ€?銆傞噸瑕?SmartConfig鍦ㄩ粯璁ゆ儏鍐典笅澶勪簬绂佺敤鐘舵€?鍙互|wifi_smart_enable |鍦▅ user_config.h |鏋?寤哄浐浠朵箣鍓嶉€氳繃璁剧疆鍚敤銆?wifi,startsmart(type, callback) 鍙傛暟 -type銆備唬琛‥SP.TOUCH,鎴?1浠h〃AIR_KISS銆?鈥?callback function(ssidpassword) end 閰嶇疆鍚庤皟鐢ㄧ殑琛ㄥ崟鐨勫洖璋冨嚱鏁般€?杩斿洖 nil 渚?wifi 銉?setmode(wifi鈥TATION) wifi鈥tartsmart(0j function(ssidj password) print(string.format(鈥淪uccess. SSID:%s ; PASSWORD:%s鈥橽 ssidj password)) end ) 涔熷彲浠ョ湅鐪?wifi.stopsmart() wifi.stopsmart () 鍋滄鏅鸿兘閰嶇疆杩囩▼銆?鍙ユ硶 wifi.stopsmart() 鍙傛暟 娌℃湁 杩斿洖 nil 涔熷彲浠ョ湅鐪?wifi.startsmart() wifi.suspend () 鎸傝捣Wifi浠ュ噺灏戠數娴佹秷鑰椼€?銆傛敞鎰?Wifi鎸傝捣寮傛鍙戠敓锛岃繖钁涘懗鐪嬫寕璧疯姹傚彧鏈変换澶勭悊鍣ㄦ棾鎻戝埗鏉冭繑鍥炵粰 SDK (MySuspendFunction ()瀹屾垚鍚?鎵嶄細琚鐞嗐€傛寕璧峰洖璋冧篃鏄紓姝ユ墽琛岀殑锛屽彧鏈夊湪 wifi鎴愬姛闊冲仠鍚庢墠鑳芥墽琛屻€?鍙ユ硶 wifi.suspend((duration[suspend_cb, resume_cb, preserve_mode]}) 鍙傛暟 銉籨uration鎸傝捣鎸佺画鏃堕棿(浠ュ井绉?|JS)涓哄崟浣?銆傚鏋溿€傛寚瀹氫簡鏆傚仠鎸佺画鏃堕棿锛屾殏鍋?灏嗘槸涓嶇‘瀹氱殑(鑼冨洿锛氥€傛垨50000-268435454|js (0锛?4锛?28.000454)) -suspend_cb鍦╓iFi鏆傚仠鏃舵墽琛屽洖鍙€?鍙€夌殑) -resume_cb褰揥iFi浠庢殏鍋滅姸鎬佸敜閱掓椂鎵ц鍥炲彨銆?鍙€夌殑) 銉?preserve_mode 閫氳繃鑺傜偣浼戠湢鏉ヤ繚鎸佸綋鍓嶇殑WiFi妯″紡銆?鍙€夛紝榛樿锛歵rue) 銉诲鏋滀负true,鍒欏湪NodeMCU鎭㈠鏃讹紝Station鍜孲tationAP妯″紡灏嗚嚜鍔ㄩ噸鏂拌繛鎺ュ埌鍏堝墠閰嶇疆 鐨勬帴鍏ョ偣銆?-濡傛灉涓篺alse,鍒欎涪寮僕iFi妯″紡骞剁寮€NodeMCU wifi.NULL_MODE銆俉iFi妯″紡灏嗗湪閲嶅惎鏃?鎭㈠鍒板師濮嬫ā寮忋€?杩斿洖 銉籹uspend_state濡傛灉娌℃湁鎻愪緵鍙傛暟锛屽垯杩斿洖褰撳墠鐨刉iFi鎸傝捣鐘舵€?鈥㈢姸鎬侊細 -0 WiFi鏄竻閱掔殑銆?-1 WiFi鎸傝捣姝e湪绛夊緟銆?绛夊緟绌洪棽浠诲姟) -2 WiFi鏆傚仠銆?渚?鈥揼et current wifi suspension state print (wifi .suspend銆? 鈥揝uspend MiFi for 10 seconds with suspend/resume caLLbacks cfg={} cfg.duration=1010001000 cfg.resume_cb=function() print(鈥淲iFi resume鈥? end cfg.suspend_cb=function() print(鈥淲iFi suspended鈥? end wifi 銉?suspend(cfg) 鈥揝uspend MiFi for 10 seconds with suspend/resume caLLbacks and discard WiFi modi cfg={} cfg.duration=1010001000 cfg.resume_cb=function() print(鈥淲iFi resume鈥? end cfg.suspend_cb=function() print(鈥淲iFfi suspended鈥? end cfg.preserve_mode=false wifi.suspend(cfg) 涔熷彲浠ョ湅鐪?鈥?wifi.resume() 鈥ode.sleep() 鈥ode.dsleep() wifi.sta 妯″潡 wifi.sta.autoconnect () 鑷姩浠ョ珯妯″紡杩炴帴鍒癆P銆?鍙ユ硶 wifi . sta.autoconnect(auto) 鍙傛暟 auto銆傜鐢ㄨ嚜鍔ㄨ繛鎺ワ紝1浣胯兘鑷姩杩炴帴 杩斿洖 nil 渚?wifi 銉?sta.autoconnect(l) 涔熷彲浠ョ湅鐪?wifi.sta.config() wifi.sta.connect() 鈥ifi.sta. disconnect() wifi.sta.changeap () 浠庤繑鍥炵殑鍒楄〃涓€夋嫨鎺ュ叆鐐箇ifi.sta.getapinfo() 鍙ユ硶 wifi 銉?sta.changeap(ap_index) 鍙傛暟 ap_index璁块棶鐐圭殑绱㈠紩锛屼綘鎯虫敼鍙樸€?鑼冨洿锛?-5)-瀵瑰簲浜巜ifi. sta.getapinfo()鍜屾墍 浣跨敤鐨勭储寮?wifi. sta.getapindex() 杩斿洖 銉籺rue鎴愬姛 銉籪alse澶辫触 wifi 銉?sta.changeap(4) 涔熷彲浠ョ湅鐪?鈥ifi.sta.getapinfo() 鈥ifi.sta.getapindex() wifi.sta.clearconfig () 娓呴櫎褰撳墠淇濆瓨鐨刉iFi绔欑偣閰嶇疆锛屼粠闂瓨涓竻闄ゃ€傚綋node.restore()涓嶉渶瑕佹弧杞芥椂鍙兘瀵规煇 浜涘嚭鍘傞噸缃満鏅湁鐢紝鎴栬€呬负浣跨敤鏈€缁堢敤鎴疯缃仛鍑嗗锛屼互渚縎oftAP鑳藉閿佸畾鍒板崟涓‖浠舵棤 绾跨數淇¢亾涓娿€?鍙ユ硶 wifi.sta.clearconfig() 鍙傛暟 娌℃湁 杩斿洖 鈥rue 鎴愬姛 鈥alse澶辫触 涔熷彲浠ョ湅鐪?鈥ifi.sta 銉?config() 鈥ode.restore() wifi.sta.config () 璁剧疆WiFi绔欑偣閰嶇疆銆?銆傛敞鎰?涓嶅缓璁湪鍒濆鍖栧惎鍔ㄦ湡闂撮殢鏃惰繛鎺iFi銆俉iFi杩炴帴鐘舵€佸簲閫氳繃浣跨敤WiFi浜嬩欢鍥炶皟鎴栭€氳繃杞?璇㈠畾鏃跺櫒涓婄殑鐘舵€佹潵楠岃瘉銆?鍙ユ硶 wifi.sta.config(station_config) 鍙傛暟 鈥tation_config鍖呭惈鍙扮珯閰嶇疆鏁版嵁鐨勮〃鏍?銆俿sid灏忎簬32瀛楄妭鐨勫瓧绗︿覆銆?掳 pwd瀛楃涓叉槸0-64o绌哄瓧绗︿覆琛ㄧず涓€涓紑鏀剧殑WiFi鎺ュ叆鐐广€傛敞鎰忥細WPA鑷冲皯闇€瑕?涓?瀛楃锛屼絾ESP8266涔熷彲浠ヨ繛鎺ュ埌WEP鎺ュ叆鐐?鍙互鎻愪緵40浣峎EP瀵嗛挜浣滀负鍏跺搴旂殑5 涓瓧绗︾殑ASCII瀛楃涓?銆?o auto 榛樿涓簍rue 鈻爐rue鍚敤鑷姩杩炴帴骞惰繛鎺ュ埌鎺ュ叆鐐癸紝鍥犳auto=true鏃犻渶閫?璇?wifi.sta.connect锛堬級 -false绂佺敤鑷姩杩炴帴骞朵繚鎸佷笌鎺ュ叆鐐规柇寮€杩炴帴 0 bssid鍖呭惈鎺ュ叆鐐筂AC鍦板潃鐨勫瓧绗︿覆锛堝彲閫夛級 -濡傛灉鎮ㄦ湁澶氫釜鍏锋湁鐩稿悓SSID鐨勬帴鍏ョ偣锛屽垯鍙互璁剧疆BSSIDo -濡傛灉鎮ㄤ负鐗瑰畾鐨凷SID璁剧疆浜咮SSID,骞朵笖鎯宠灏嗙珯鐐归厤缃负浠呭湪娌℃湁BSSID瑕佹眰鐨?鎯呭喌涓嬭繛鎺ュ埌鐩稿悓鐨凷SID,鍒欏繀椤婚鍏堥厤缃负鍏堢珯鍒颁笉鍚岀殑SSID,鐒跺悗杩炴帴鍒版墍闇€ 鐨?SSID -浠ヤ笅鏍煎紡鏄湁鏁堢殑锛?-鈥淒E锛?Cl锛?A5锛?51锛?Fl锛?ED鈥?-鈥淎C-1D-1C-B1-0B-22鈥?-鈥淒EADBEEF7AC0鈥?0 save灏嗙數鍙伴厤缃繚瀛樺埌闂瓨銆?-true閰嶇疆灏嗛€氳繃鐢垫簮寰幆淇濈暀銆傦紙榛樿锛夈€?-false鐢垫簮鍛ㄦ湡涓嶄細淇濈暀閰嶇疆銆?0浜嬩欢鍥炶皟鍙湁鍦╓IFI_SDK_EVENT_MONITOR_ENABLE鏈敞閲婄殑鎯呭喌涓嬫墠鍙?鐢?user_config.h -璇锋敞钖戯細涓轰簡淇濊瘉鎵€鏈夌珯鐨勬椿鍔ㄥ湪鍚姩鏃惰繘琛屽鐞嗭紝鎵€鏈夌浉鍏崇殑鍥炶皟蹇呴』灏芥棭鍦ㄦ敞 鍐?init.lua 浣跨敤涓ょ wifi. sta.config锛堬級 鎴?wifi.eventmon. register锛堬級銆?鈻燾onnected_cb :鐢靛彴杩炴帴鍒版帴鍏ョ偣鏃舵墽琛屽洖鍙€傦紙鍙€夌殑锛?-琛ㄤ腑杩旈潰鐨勯」鐩細 -ssid :鎺ュ叆鐐圭殑SSIDo 锛堟牸寮忥細瀛楃涓诧級 -bssid :鎺ュ叆鐐圭殑BSSIDo 锛堟牸寮忥細瀛楃涓诧級 鈻燾hannel :鎺ュ叆鐐规墍鍦ㄧ殑棰戦亾銆傦紙鏍煎紡锛氭暟瀛楋級 鈻燿isconnected_cb :褰撶珯鐐逛笌鎺ュ叆鐐规柇寮€杩炴帴鏃舵墽琛屽洖鍙€傦紙鍙€夌殑锛?-琛ㄤ腑杩斿洖鐨勮皶鐩細 -ssid :鎺ュ叆鐐圭殑SSIDo 锛堟牸寮忥細瀛楃涓诧級 -bssid :鎺ュ叆鐐圭殑BSSIDo 锛堟牸寮忥細瀛楃涓诧級 鈻爎eason :璇峰弬闃呬笅闈㈢殑wifi.eventmon.reason銆傦紙鏍煎紡锛氭暟瀛楋級 鈻燼uthmode_change_cb :褰撴帴鍏ョ偣鏇存敼鎺堟潈妯″紡鏃舵墽琛屽洖鍙€傦紙鍙€夌殑锛?:鏃х殑WiFi鎺堟潈妯″紡銆傦紙鏍煎紡锛氭暟瀛楋級 :鏂扮殑wifi鎺堟潈妯″紡銆傦紙鏍煎紡锛氭暟瀛楋級 -got_ip_cb :褰撶數鍙颁粠鎺ュ叆鐐规敹鍒癐P鍦板潃鏃舵墽琛屽洖鍙€傦紙鍙€夌殑锛?-琛ㄤ腑褰屽洖鐨勯」鐩細 -ip :鍒嗛厤缁欒鐢靛彴鐨処P鍦板潃銆傦紙鏍煎紡锛氬瓧绗︿覆锛?鈻爊etmask :瀛愮綉鎺╃爜銆傦紙鏍煎紡锛氬瓧绗︿覆锛?-gateway :鐢靛彴杩炴帴鐨勬帴鍏ョ偣鐨処P鍦板潃銆傦紙鏍煎紡锛氬瓧绗︿覆锛?鈻燿hcp_timeout_cb :绔欑偣DHCP璇锋眰宸辫秴鏃躲€傦紙鍙€夌殑锛?-绌虹櫧琛ㄨ杩斿洖銆?杩斿洖 鈥?true鎴愬姛 銉籪alse澶辫触 鈥揷onnect to Access Point (DO NOT save config to fLash) station_cfg=(} station_cfg.ssid=HNODE-AABBCCn station_cfg.pwd=鈥減assword鈥?wifi 銉?sta.config(station_cfg) 鈥揷onnect to Access Point (DO save config to fLash) station_cfg=() station_cfg.ssid=鈥淣ODE-AABBCC鈥?station_cfg.pwd=鈥減assword鈥?station_cfg.save=true wifi.sta.config(station_cfg) 鈥揷onnect to Access Point with specific MAC address station_cfg=(} station_cfg.ssid=鈥淣ODE-AABBCCn station_cfg.pwd=鈥減assword鈥?Station_cfg.bssid=鈥淎A锛欱B:CC:DD:EE:FF鈥?wifi 銉?sta.config(station_cfg) 鈥揷onfigure station but donft connect to Access point station_cfg=() station_cfg.ssid=鈥淣ODE-AABBCC鈥?station_cfg.pwd=鈥減assword鈥?station_cfg.auto=false wifi.sta.config(station_cfg) 涔熷彲浠ョ湅鐪?wifi.sta.clearconfig() wifi.sta. connect() wifi.sta 銉?disconnect() wifi.sta.apinfo() wifi.sta.connect () 杩炴帴鍒扮珯妯″紡涓嬮厤缃殑AP銆傚鏋滆嚜鍔ㄨ繛鎺ヨ绂佺敤锛屼綘鍙渶瑕佽皟鐢ㄥ畠wifi.sta.config锛堬級銆?鍙ユ硶 wifi.sta鈥onnect([connected_cb]) 鍙傛暟 鈥?connected_cb :鐢靛彴杩炴帴鍒版帴鍏ョ偣鏃舵墽琛屽洖鍙€傦紙鍙€夌殑锛?O琛ㄤ腑杩旂櫨鐨勯」鐩細 -SSID :鎺ュ叆鐐圭殑SSIDo 锛堟牸寮忥細瀛楃涓诧級 -BSSID :鎺ュ叆鐐圭殑BSSIDo 锛堟牸寮忥細瀛楃涓诧級 鈻?channel :鎺ュ叆鐐规墍鍦ㄧ殑棰戦亾銆傦紙鏍煎紡锛氭暟瀛楋級 杩斿洖 nil 涔熷彲浠ョ湅鐪?鈥ifi.sta.disconnect() 鈥ifi.sta 銉?config() wifi.sta.disconnect () 鍦ㄥ伐浣滅珯妯″紡涓嬩笌AP鏂紑杩炴帴銆?銆傛敞鎰?璇锋敞鎰忥紝浠庢帴鍏ョ偣鏂紑涓嶄細闄嶄綆鍔熻€椼€傚鏋滆妭鐢垫槸鎮ㄧ殑鐩爣锛岃鍙傞槄Wifi.NULLMODE鍔?鑳借鏄庝互Pwifi.setmode() |浜嗚В鏇村璇︽儏銆?鍙ユ硶 wifi 銉?sta.disconnect([disconnected_cb]) 鍙傛暟 -disconnected_cb :褰撶珯鐐逛笌鎺ュ叆鐐规柇寮€杩炴帴鏃舵墽琛屽洖鍙€?鍙€夌殑) 鈻¤〃涓繑鍥炵殑璋曠洰锛?-SSID :鎺ュ叆鐐圭殑SSIDo (鏍煎紡锛氬瓧绗︿覆) -BSSID :鎺ュ叆鐐圭殑BSSIDo (鏍煎紡锛氬瓧绗︿覆) 鈻?reason :璇峰弬闃呬笅闈㈢殑wifi.eventmon.reason鈻?鏍煎紡锛氭暟瀛? 杩斿洖 nil 涔熷彲浠ョ湅鐪?鈥ifi.sta 銉?config() 鈥ifi.sta 銉?connect() wifi.sta.getap () 灏咥P鍒楄〃浣滀负Lua琛ㄦ壂鎻忓洖璋冨嚱鏁般€?鍙ユ硶 wifi.sta.getap([[cfg], formatj] callback(table)) 鍙傛暟 鈥fg鍖呭惈鎵弿閰嶇疆鐨勮〃 銆俿sid SSID 闆讹紝涓嶈杩囨护SSID O bssid BSSID 闆讹紝涓嶈杩囨护BSSID O channel閫氶亾0,鎵弿鎵€鏈夐€氶亾锛屽惁鍒欐壂鎻忚缃€氶亾(榛樿涓?) 銆俿how_hidden show_hidden == 1,鑾峰彇鍏锋湁闅愯棌SSID鐨勮矾鐢卞櫒鐨勪俊鎭?榛樿涓?) 鈥ormat閫夋嫨杈撳嚭琛ㄦ牸寮忥紝榛樿涓? O 0锛氭棫鏍煎紡(SSID锛?Authmode, RSSL BSSID, Channel),浠讳綍閲嶅鐨凷SID灏嗚涓㈠純 o 1锛氭柊鏍煎紡(BSSID锛?SSID, RSSI,鎺堟潈妯″紡锛岄閬? -callback(table)鎵弿鍏冩垚鏃舵帴鍙嶢P琛ㄦ棾鍥炶皟鍑芥暟銆傝繖涓嚱鏁版帴鍙庝竴涓〃锛屽か閿槸 BSSID,鍊兼槸鍏朵粬鏍煎紡鐨勪俊鎭細SSID, RSSID, auth妯″紡锛岄€氶亾銆?杩斿洖 nil 鈥損rint AP List in old format (format not defined) function listap(t) for k,v in pairs(t) do print(k.: .v) end end wifi 銉?sta.getap(listap) 鈥揚rint AP List that is easier to read function listap(t) 鈥?(SSID : Authmodej RSSI, BSSID^ ChanneL) print(鈥淺n鈥濃€tring.format(鈥?32s,/,SSID鈥?鈥?鈥淺tBSSID\t\t\t\t RSSI\t\tAUTHMODE ssid,v in pairs(t) do local authmodej pssi, bssid, channel = string.match(v, 鈥?[Aj]+)j([A^]+), print(string.format(鈥?32s鈥?ssid)鈥︹€淺t鈥濃€ssid鈥︹€淺t n鈥ssi鈥utl end end wifi.sta.getap(listap) 鈥損rint AP List in new format function listap(t) for k,v in pairs(t) do print(k.: .v) end end wifi銉籹ta.getap(lj listap) 鈥揚rint AP List that is easier to read function listap(t) 鈥?(SSID : Authmodej RSSI, BSSID, ChanneL) print(鈥漒n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") for bssidv in pairs(t) do local ssidj rssi, authmode, channel = string.match(v, 鈥?[A4]+)j([Aj]+)j( print(string.format(,%32s,ssid). .鈥淴t鈥? .bssid. .H\t H鈥?rssi鈥?鈥?autl end end wifi.sta.getap(lj listap) 鈥揷heck for specific AP function listap(t) print(鈥漒n\t\t\tSSID\t\t\t\t\tBSSID\t\t\t RSSI\t\tAUTHMODE\t\tCHANNEL") for bssidv in pairs(t) do local ssidj rssi, authmode, channel = string.match(Vj "([A4]+)j([Aj]+)j( print(string.format(,%32s,鈥?ssid)鈥?鈥淺t鈥濃€ssid鈥?"\t "鈥?rssi鈥?.autl end end scan_cfg = {} scan_cfg.ssid = 鈥渕yssid鈥?scan_cfg.bssid = 鈥淎A:AA:AA:AA:AA:AA鈥?scan_cfg.channel = 0 scan_cfg.show_hidden = 1 wifi銉籹ta.getap(scan_cfgj 1, listap) 鈥揼et RSSI for currentLy configured AP function listap(t) for bssidv in pairs(t) do local ssidj rssi, authmode, channel = string.match(v, "([鈥橾 + ),([']+)禄( print("CURRENT RSSI IS: .rssi) end end ssid, tmp, bssid_setj bssid=wifi.sta.getconfig() scan_cfg = (} scan_cfg.ssid = ssid if bssid_set == 1 then scan_cfg.bssid = bssid else scan_cfg.bssid = nil end scan_c+g.channel = witi.getcnanneio scan_cfg.show_hidden = 0 ssid, tmp, bssid_setj bssid=nilj nil, nil, nil wifi.sta.getap(scan_cfgJ 1, listap) 涔熷彲浠ョ湅鐪?wifi.sta.getip() wifi.sta.getapindex () 鑾峰彇瀛樺偍鍦ˋP缂撳瓨涓殑褰撳墠鎺ュ叆鐐圭殑绱㈠紩銆?鍙ユ硶 wifi 銉?sta.getapindex() 鍙傛暟 娌℃湁 杩斿洖 current_index褰撳墠閫夊畾鐨勬帴鍏ョ偣鐨勭储寮曘€?鑼冨洿锛?-5) 渚?print("the index of the currently selected AP is: "鈥ifi.sta.getapindex()) 涔熷彲浠ョ湅鐪?鈥ifi.sta.getapindex() 鈥ifi.sta.apinfo() 鈥ifi.sta 銉?apchange() wifi.sta.getapinfo () 鑾峰彇ESP8266绔欑偣缂撳瓨鐨凙P淇℃伅銆?銆傛敞鎰?閰嶇疆绂佺敤淇濆瓨鐨勪换浣曟帴鍏ョ偣灏唚ifi. sta. config({save=false})濉厖姝ゅ垪琛?浼间箮瑕嗙洊 瀛樺偍鍦ㄩ棯瀛樹腑鐨凙P)鐩村埌閲嶆柊鍚姩銆?鍙ユ硶 wifi.sta.getapinfo() nil 杩斿洖 鈥?ap_info 銆俼ty杩斿洖鐨凙P鏁伴噺 銆?-5 AP鐨勬寚鏁般€?璇ョ储寮曞搴斾簬wifi.sta.changeap()鍜屾墍浣跨敤鐨勭储 寮揑 wifi.sta.getapindex()) 銆俿sid璁块棶鐐圭殑ssid o pwd nil濡傛灉娌℃湁閰嶇疆瀵嗙爜锛孉ccess Point鐨勫瘑鐮?o bssid鎺ュ叆鐐圭殑MAC鍦板潃 銆俷il濡傛灉鍦ㄧ珯閰嶇疆鏈熼棿娌℃湁閰嶇疆MAC鍦板潃锛屽垯浼氳繑鍥炪€?鈥損rint stored access point info do for kjv in pairs(wifi.sta.getapinfo()) do if (type(v)鈥渢ableH) then print(n :.type(v)) for k,v in pairs(v) do print: L.v) end else printC, :鈥濃€) end end end 鈥損rint stored access point info(formatted) do local x=wifi.sta.getapinfo() local y=wifi.sta.getapindex() print(鈥漒n Number of APs stored in flash:鈥渏 x.qty) ppint(stping銉籪opmat(鈥?%-6s %-32s %-64s 鈥渋ndex:鈥? 鈥漇SID:鈥濓紝 鈥淧assword: for i=l, (x.qty), 1 do ppintjtping.fopmat(鈥?锛卻%-6d %-32s %-64s %-18s鈥滐紝(i==y and ,>,f or H 鈥?锛宨, x[ end end 涔熷彲浠ョ湅鐪?wifi.sta.getapindex() wifi.sta.setaplimit() wifi.sta.changeap() wifi.sta.config() wifi.sta.getbroadcast () 鑾峰彇绔欐ā寮忎笅鐨勫箍鎾湴鍧€銆?wifi.sta.getbroadcast() 鍙傛暟 nil 杩斿洖 骞挎挱鍦板潃浣滀负瀛楃涓诧紝渚嬪鈥?92.168.0.255鈥? nil濡傛灉IP鍦板潃=鈥?.0.0.0鈥濆垯杩斿洖銆?涔熷彲浠ョ湅鐪?wifi.sta.getip() wifi.sta.getconfig () 鑾峰彇WiFi绔欑偣閰嶇疆銆?鍙ユ硶 wifi.sta.getconfig() 鍙傛暟 鈥eturn_table 銆倀rue杩斿洖琛ㄤ腑鐨勬暟鎹?O false浠ユ棫鏍煎紡杩斿洖鏁版嵁(榛樿) 杩斿洖 濡傛灉 return_table 鏄?true : 鈥onfig_table 銆俿sid璁块棶鐐圭殑ssido 銆俻wd瀵嗙爜鍒癆ccess Point, nil濡傛灉娌℃湁閰嶇疆瀵嗙爜 掳 bssid_set true濡傛灉绔欑偣琚厤缃负涓撻棬杩炴帴鍒板叿鏈夊尮閰嶇殑AP,灏嗚繑鍥瀊ssid銆?O bssid濡傛灉宸茶繛鎺ュ埌宸查厤缃殑AP,鍒欐瀛楁灏嗗寘鍚獳P鐨凪AC鍦板潃銆傚惁鍒欏皢杩斿洖鈥滀粈锛?ff锛?ff锛?ff锛?ff锛?ffMo 濡傛灉 return_table 鏄?false : 鈥sid,瀵嗙爜锛宐ssid_set, bssid,濡傛灉 bssid_set 绛変簬 0 鍒?bssid 鏃犲叧绱ц 渚?鈥揋et current Station configuration (NEW FORMAT) do local sta_config=wifi.sta.getconfig(true) print(string.formatC鈥橷tCurrent station config\n\tssid:鈥?s鈥漒tpassword:鈥?s鈥漒n- end 鈥揋et current Station configuration (OLD FORMAT) ssidj passwordj bssid_set, bssid=wifi.sta.getconfig() print(鈥淺nCurrent Station configuration:\nSSID : 鈥溾€sid 鈥︹€漒nPassword : 鈥溾€assword 鈥︹€漒nBSSID_set : 鈥溾€ssid_set 鈥︹€淴nBSSID? 鈥溾€ssid鈥︹€淴n鈥? ssid, passwordbssid_setj bssid=nil, nil, nil, nil 涔熷彲浠ョ湅鐪?鈥ifi.sta.getdefaultconfig() 鈥ifi.sta 銉?connect() 鈥ifi.sta.disconnect() wifi.sta.getdefaultconfig () 鑾峰彇瀛樺偍鍦ㄩ棯瀛樹腑鐨勯粯璁iFi绔欑偣閰嶇疆銆?鍙ユ硶 wifi.sta.getdefauItconfig(return_table) 鍙傛暟 鈥eturn_table 銆倀rue杩斿洖琛ㄤ腑鐨勬暟鎹?O false浠ユ棫鏍煎紡杩斿洖鏁版嵁(榛樿) 杩斿洖 濡傛灉 return_table 鏄?true : 鈥onfig_table 銆俿sid璁块棶鐐圭殑SSido 銆俻wd瀵嗙爜鍒癆ccess Point, nil濡傛灉娌℃湁閰嶇疆瀵嗙爜 掳 bssid_set true濡傛灉绔欑偣琚厤缃负涓撻棬杩炴帴鍒板叿鏈夊尮閰嶇殑AP,灏嗚繑鍥瀊ssid銆?o bssid濡傛灉宸茶繛鎺ュ埌宸遍厤缃殑AP,鍒欐瀛楁灏嗗寘鍚獳P鐨凪AC鍦板潃銆傚惁鍒欏皢杩斿洖鈥滀粈锛?ff锛?ff锛?ff锛?ff锛?ffUo 濡傛灉 return_table 鏄?false : 鈥sid,瀵嗙爜锛宐ssid_set, bssid,濡傛灉 bssid_set 绛変簬 0 鍒?bssid 鏃犲叧绱ц 鈥揋et default Station configuration (NEW FORMAT) do local def_sta_config=wifi.sta.getdefaultconfig(true) print(string.format(鈥漒tDefault station config\n\tssid:鈥?s鈥漒tpassword:鈥?s"\n鈥?end 鈥揋et default Station configuration (OLD FORMAT) ssidj passwordj bssid_set, bssid=wifi.sta.getdefaultconfig() print("\nCurrent Station configuration:\nSSID : 鈥溾€sid 鈥︹€漒nPassword : 鈥溾€assword 鈥︹€漒nBSSID_set : 鈥溾€ssid_set 鈥︹€淴nBSSID? 鈥溾€ssid鈥︹€淴n鈥? ssid, passwordbssid_setj bssid=nil, nil, nil, nil 涔熷彲浠ョ湅鐪?wifi.sta.getconfig() wifi.sta . connect() wifi.sta.disconnect() wifi.sta.gethostname () 鑾峰彇褰撳墠鐨勭珯鐐逛富鏈哄悕銆?鍙ユ硶 wifi.sta.gethostname() 鍙傛暟 娌℃湁 杩斿洖 褰撳墠閰嶇疆鐨勪富鏈哄悕 渚?print(鈥淐urrent hostname is: 鈥ifi.sta.gethostname銆?wifi.sta.getip () 鑾峰彇绔欐ā寮忎笅鐨刬p鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧鍦板潃銆?鍙ユ硶 wifi.sta.getip() 鍙傛暟 娌℃湁 杩斿洖 IP鍦板潃锛岀綉缁滄帺鐮侊紝缃戝ぉ鍦板潃浣滀负瀛愮鍗橈紝渚嬪"192.168.0.111鈥濄€俷il濡傛灉IP =,0.0.0.0,锛滃垯杩?鍥炪€?渚?鈥損rint current IP address, netmaskj gateway print(wifi.sta.getip()) 鈥?92.168.0.111 255.255.255.0 192.168.0.1 ip = wifi.sta.getip() print(ip) 鈥?92.168.0.111 ipj nm = wifi.sta.getip() print(nm) 鈥?55.255.255.0 涔熷彲浠ョ湅鐪?wifi.sta.getmac() wifi.sta.getmac () 鑾峰彇绔欐ā寮忎笅鐨凪AC鍦板潃銆?鍙ユ硶 wifi.sta.getmac() 鍙傛暟 娌℃湁 杩斿洖 浣滀负瀛楃涓茬殑MAC鍦板潃渚嬪鈥?8锛?fe锛?34锛?a2锛?d7锛?34鈥?涔熷彲浠ョ湅鐪?wifi.sta.getip() wifi.sta.getrssi () 鑾峰彇ESP8266鎵€杩炴帴鐨勬帴鍏ョ偣鐨凴SSI (鎺ユ敹淇″彿寮哄害鎸囩ず绗?銆?鍙ユ硶 wifi.sta.getrssi() 鍙傛暟 娌℃湁 杩斿洖 -濡傛灉鐢靛彴杩炴帴鍒版帴鍏ョ偣锛宺ssi鍒欒繑鍥炪€?-濡傛灉鐢靛彴绂捐繛鎺ュ埌鎺ヤ汉鐐癸紝nil鍒欒繑鍥炪€?RSSI=wifi.sta.getrssi() print(鈥淩SSI is鈥? RSSI) wifi.sta.setaplimit () 璁剧疆瀛樺偍鍦ㄩ棯瀛樹腑鐨勬渶澶ф帴鍏ョ偣鏁伴噺銆?姝ゅ€煎啓鍏ラ棯瀛?鉂舵敞鎰?閲嶆柊鍚姩鍚庢柊璁剧疆鎵嶄細鐢熸晥銆?銆傛敞鎰?濡傛灉瀛樺偍5涓帴鍏ョ偣骞朵笖AP闄愬埗璁剧疆涓?,鍒欑储寮?澶勭殑AP灏嗕繚鎸佸埌node.restore()琚彨 鎴朅P闄愬埗琚缃负5骞朵笖AP琚鐩栥€?鍙ユ硶 wifi.sta.setaplimit(qty) 鍙傛暟 qty瀛樺偍鍦ㄩ棯瀛樹腑鐨勬帴鍏ョ偣鏁伴噺銆傝寖鍥达細1-5 (榛樿锛?) 杩斿洖 鈥rue 鎴愬姛 鈥alse澶辫触 渚?wifi.sta.setaplimit(5) 涔熷彲浠ョ湅鐪?鈥ifi.sta.getapinfo() wifi.sta.sethostname () 璁剧疆绔欑偣涓绘満鍚嶃€?鍙ユ硶 wifi.sta.sethostname(hostname) hostname鍙兘鍖呭惈瀛楁瘝锛屾暟瀛楀拰杩炲瓧绗?寮€涓斿皬寰楄秴杩?2涓瓙绗︼紝鐧惧瓧姣嶅拰鏈瓙绗?鏄瓧姣嶆暟瀛?杩斿洖 nil 渚?if (wifi.sta.sethostname(鈥淣odeMCU鈥? == true) then print(鈥渉ostname was successfully changed鈥? else print(鈥渉ostname was not changed鈥? end wifi.sta.setip () 鍦ㄥ伐浣滅珯妯″紡涓嬭缃甶p鍦板潃锛岀綉缁滄帺鐮侊紝缃戝叧鍦板潃銆?鍙ユ硶 wifi.sta.setip(cfg) 鍙傛暟 cfg琛ㄥ寘鍚獻P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧 { ip = 鈥?92.168.0.111鈥? netmask = 鈥?55.255.255.0鈥? gateway = 鈥?92.168.0.1鈥?} 杩斿洖 濡傛灉鎴愬姛鍒欎负鐪燂紝鍚﹀垯涓哄亣 涔熷彲浠ョ湅鐪?wifi.sta.setmac() wifi.sta.setmac () 鍦ㄥ伐浣滅珯妯″紡涓嬭缃甅AC鍦板潃銆?鍙ユ硶 wifi.sta.setmac(mac) 瀛楃涓蹭腑鐨凪AC鍦板潃锛屼緥濡傗€淒E锛?AD锛?BE锛?EF锛?7A锛?C0u 娲惧洖 濡傛灉鎴愬姛鍒欎负鍏凤紝鑸庡垯涓哄亣 ppint(wifi.sta銉籹etmac(鈥滵E:AD:BE:EF:7A:C0鈥?) 涔熷彲浠ョ湅鐪?wifi.sta.setip() wifi.sta.sleeptype () 鍦ㄨ繛鎺ュ埌鎺ュ叆鐐规椂閰嶇疆瑕佷娇鐢ㄧ殑WiFi璋冨埗瑙h皟鍣ㄧ殑鐫$湢绫诲瀷銆?銆傛敞鎰?涓嶉€傜敤浜?wifi.SOFTAP , wifi.STATIONAP 鎴?wifi . NULLMODE 鍙ユ硶 wifi.sta.sleeptype(type_wanted) 鍙傛暟 type_wanted 浠ヤ笅涔嬩竴锛?銉粀ifi.NONE_SLEEP濮嬬粓淇濇寔璋冨埗瑙h皟鍣?銉粀ifi.LIGHT_SLEEP鍦ㄦ煇浜涙儏鍐典笅鍏佽CPU鏂數 銉粀ifi.MODEM_SLEEP灏藉彲鑳藉湴鍏抽棴璋冨埗瑙h皟鍣?杩斿洖 瀹為檯鐨勭潯鐪犳ā寮忚瀹氾紝涓轰竴浣?wifi.NONE_SLEEP , wif i . LIGHT_SLEEP 鎴?wifi.MODEM_SLEEP 銆?wifi.sta.status () 鑾峰彇宸ヤ綔绔欐ā寮忎笅鐨勫綋鍓嶇姸鎬併€?鍙ユ硶 wifi.sta.status() 鍙傛暟 nil 杩斿洖 褰撳墠鐘舵€佸彲浠ユ槸涓嬪垪涔嬩竴: wifi.STA IDLE 鈥ifi.STA_CONNECTING 鈥ifi.STA_WRONGPWD 鈥ifi.STA_APNOTFOUND 鈥ifi.STA_FAIL 鈥ifi.STA_GOTIP wifi.ap 妯″潡 wifi.ap.config 锛堬級 鍦ˋP妯″紡涓嬭缃甋SID鍜屽瘑鐮併€傝鍔″繀鑷冲皯杈撳叆8涓瓧绗︾殑瀵嗙爜锛佸鏋滀綘涓嶈繖鏍峰仛锛屽畠灏嗛粯璁?涓烘病鏈夊瘑鐮侊紝涓嶈缃甋SID!瀹冧粛灏嗕綔涓烘帴鍏ョ偣宸ヤ綔锛屼絾浣跨敤榛樿鐨凷SID,濡?NODE_9997C3o 鍙ユ硶 wifi.ap.config锛坈fg锛?鍙傛暟 , cfg琛ㄤ繚瀛橀厤缃?0 ssid SSID瀛楃 1-32 銆俻wd瀵嗙爜瀛楃8-64 銆俛uth璁よ瘉鏂规硶鐨勪竴涓獁ifi.OPEN 锛堥粯璁わ級锛?, wifi.WPA_PSK wifi.WPA2_PSK wifi.WPA_WPA2_PSK 銆俢hannel棰戦亾鍙风爜1-14榛樿=6 0 hidden false =涓嶉殣钘忥紝true=闅愯棌锛宒efauIt = false 銆俶ax鏈€澶ц繛鎺ユ暟1-4榛樿=4 0 beacon淇℃爣闂撮殧鏃堕棿鑼冨洿鍦?00-60000,榛樿鍊?100 o save淇濆瓨閰嶇疆鍒伴棯瀛樸€?-true閰嶇疆灏嗛€氳繃鐢垫簮寰幆淇濈暀銆傦紙榛樿锛?-false鐢垫簮鍛ㄦ湡涓嶄細淇濈暀閰嶇疆銆?O浜嬩欢鍥炶皟鍙湁鍦╓IFI_SDK_EVENT_MONITOR_ENABLE鏈敞閲婄殑鎯呭喌涓嬫墠鍙?鐢?user_config.h -璇锋敞鐩栵細涓轰簡纭繚鎵€鏈塖oftAP浜嬩欢鍦ㄥ惎鍔ㄦ椂澶勭悊锛屾墍鏈夌浉鍏崇殑鍥炶皟閮藉繀椤诲敖鏃╂敞 鍐?init.lua 鑷?J wifi.ap.config锛堬級 鎴栬€?wifi.eventmon.register锛堬級銆?鈻爏taconnected_cb :鏂板鎴风杩炴帴鍒版帴鍏ョ偣鏃舵墽琛岀殑鍥炴嫧銆傦紙鍙€夌殑锛?-琛ㄤ腑杩斿洖鐨勮皶鐩細 -MAC :杩炴帴鐨勫鎴风鐨凪AC鍦板潃銆?-AID : SDK娌℃湁鎻愪緵鏈夊叧姝よ繑鍥炲€肩殑璇︾粏淇℃伅銆?鈻爏tadisconnected_cb :褰撳鎴风浠庢帴鍏ョ偣鏂紑杩炴帴鏃舵墽琛屽洖璋冦€傦紙鍙€夌殑锛?-琛ㄤ腑杩斿洖鐨勯」鐡?-mac :鏂紑杩炴帴鐨勫鎴风鐨凪AC鍦板潃銆?-aid : SDK娌℃湁鎻愪緵鏈夊叧姝よ繑鍥炲€肩殑璇︾粏淇℃伅銆?-probereq_cb :鏀跺埌鎺㈡祴璇锋眰鏃舵墽琛屽洖璋冦€傦紙鍙€夌殑锛?-琛ㄤ腑杩斿洖鐨勯」鐩細 -MAC :鎺㈡祴鎺ュ叆鐐圭殑瀹㈡埛绔殑MAC鍦板潃銆?-RSSI :鎺ユ敹鍒板鎴风鐨勪俊鍙峰己搴︽寚鏍囥€?杩斿洖 鈥rue 鎴愬姛 鈥alse澶辫触 渚嬶細 cfg={} cfg. ssid = nmyssid, cfg.pwd=鈥渕ypassword鈥?wifi,ap.config(cfg) wifi.ap.deauth () 閫氳繃鍙戦€佷竴涓浉搴旂殑IEEE802.ll绠$悊鏁版嵁鍖?绗竴涓?骞朵粠瀹㈡埛绔殑鏁版嵁缁撴瀯(涔嬪悗)涓垹 闄ゅ鎴风锛屼粠ESP鎺ュ叆鐐逛腑鍒犻櫎(寮哄埗鍒犻櫎)涓€涓鎴风銆?鎵€浣跨敤鐨処EEE802.il鍘熷洜鐮佷负鈥滃厛鍓嶉獙璇佷笉鍐嶆湁鏁堚€?AUTH_EXPIRE)涓?銆?鍙ユ硶 wifi.ap.deauth([MAC]) 鍙傛暟 -MAC瑕佽鎺掗櫎鐨勭珯鐨勫湴鍧€銆?銆傛敞鎰忥細濡傛灉姝ゅ瓧娈电暀绌猴紝鎵€鏈夊綋鍓嶈繛鎺ョ殑鐢靛彴灏嗚娓呴櫎銆?杩斿洖 闄ら潪ESP鍦⊿TATION opmode涓皟鐢紝鍚﹀垯杩斿洖true 渚?allowed_mac_list={鈥?8:fe:34:00:00:00鈥? 鈥?8:fe:34:00:00:01鈥潁 wifi.eventmon.register(wifi.eventmon.AP_STACONNECTEDj function(T) print(n\n\tAP - STATION CONNECTED鈥濃€\n\tMAC: H鈥.MAC鈥\n\tAID: H鈥.AID) if(allowed_mac_list^=nil) then for v in pairs(allowed_mac_list) do if(v == T.MAC) then return end end end wifi.ap.deauth(T.MAC) print(鈥漒tStation DeAuthed!鈥? end) 涔熷彲浠ョ湅鐪?wifi 銉?eventmon.register() wifi 銉?eventmon , reason() wifi.ap.getbroadcast () 鑾峰彇AP妯″紡鍗滄棾鍘傛挱鍦板潃銆?鍙ユ硶 wifi.ap.getbroadcast() 鍙傛暟 娌℃湁 杩斿洖 瀛楃涓蹭腑鐨勫箍鎾湴鍧€锛屼緥濡傗€?92.168.0.255鈥? nil濡傛灉IP鍦板潃=鈥?.0.0.0"鍒欒繑鍥炪€?渚?be = wifi.ap.getbroadcast() print(be) 鈥?92.168.0.255 涔熷彲浠ョ湅鐪?wifi.ap.getip() wifi.ap.getclient () 鑾峰彇浠P妯″紡杩炴帴鍒拌澶囩殑瀹㈡埛绔〃銆?鍙ユ硶 wifi.ap.getclient() 鍙傛暟 娌℃湁 杩斿洖 杩炴帴鐨勫鎴风琛?渚?table=() table=wifi,ap.getclient() for mac,ip in pairs(table) do print(mac^ ip) end 鈥搊r shorter for mac,ip in pairs(wifi.ap.getclient()) do print(macip) end 鑾峰彇褰撳墠鏃砈oftAP閰嶇洿銆?鍙ユ硶 wifi.ap.getconfig(return_table) 鍙傛暟 鈥?return_table 掳 true杩斿洖琛ㄤ腑鐨勬暟鎹?o false浠ユ棫鏍煎紡杩斿洖鏁版嵁(榛樿) 杩斿洖 濡傛灉return_table鏄繖鏍? 鈥?config_table 銆俿sid缃戠粶鍚嶅瓧 銆俻wd瀵嗙爜,nil濡傛灉娌℃湁閰嶇疆娌℃湁瀵嗙爜-auth楠岃瘉鏂规硶 (wifi.OPEN , wifi.WPA_PSK , wifi.WPA2_PSK 鎴?wifi.WPA, o channel棰戦亾鍙风爜 銆俬idden false =涓嶉殣钘忥紝true =闅愯棌 銆俶ax瀹㈡埛绔繛鎺ョ殑鏈€澶ф暟鐩?銆俠eacon淇℃爣闂撮殧 濡傛灉return_table鏄亣鐨? 鈥?ssid,瀵嗙爜锛屽鏋渂ssid_set绛変簬銆傚垯bssid鏃犲叧绱ц configuration table (NEW FORMAT) print(鈥淺n Current SoftAP configuration:鈥? for k,v in pairs(wifi.ap.getconfig(true)) do print(" .k.:\v) end end 鈥揋et current SoftAP configuration (OLD FORMAT) do local ssid, password=wifi銉籥p.getconfig() print(鈥淺n Current SoftAP configuration:銆?锛?SSID : 鈥? .ssid. 鈥淺n Password :鈥渏 password) ssid, password=nilj nil end wifi.ap.getdefaultconfig () 鑾峰彇瀛樺偍鍦ㄩ棯瀛樹腑鐨勯粯璁oftAP閰嶇疆銆?鈥?return_table 掳 true杩斿洖琛ㄤ腑鐨勬暟鎹?0 false浠ユ棫鏍煎紡杩斿洖鏁版嵁(榛樿) 杩斿洖 濡傛灉return_table鏄繖鏍凤細 鈥?config_table 銆俿sid缃戠粶鍚嶅瓧 銆俻wd瀵嗙爜,nil濡傛灉娌℃湁閰嶇疆娌℃湁瀵嗙爜-auth楠岃瘉鏂规硶 (wifi.OPEN , wifi.WPA_PSK , wifi.WPA2_PSK 鎴?wifi銉籛PA_WPA2_PSK ) o channel棰戦亾鍙风爜 銆俬idden false =涓嶉殣钘忥紝true =闅愯棌 銆俶ax瀹㈡埛绔繛鎺ョ殑鏈€澶ф暟鐩?銆俠eacon淇℃爣闂撮殧 濡傛灉return_table鏄亣鐨勶細 鈥?ssid,瀵嗙爜锛屽鏋渂ssid_set绛変簬0鍒檅ssid鏃犲叧绱ц 鈥揋et default SoftAP configuration tabLe (NEW FORMAT) do print(鈥漒n Default SoftAP configuration:鈥? for k,v in pairs(wifi.ap.getdefaultconfig(true)) do print(鈥?.k.:\v) end end 鈥揋et defauLt SoftAP configuration (OLD FORMAT) do local ssid, password=wifi銉籥p.getdefaultconfig() print(鈥漒n Default SoftAP configuration:\n SSID : ". .ssid鈥?"\n Password :鈥渏 password) ssid, password=nilJ nil end wifi.ap.getip () 鍦ˋP妯″紡涓嬭幏鍙朓P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧銆?鍙ユ硶 wifi.ap.getip() 鍙傛暟 娌℃湁 IP鍦板潃锛岀綉缁滄帺鍋斤紝缃戝か鍦板潃浣滀负瀛楃鐢筹紝渚嬪鈥?92168.0.111鈥? nil濡傛灉IP鍦板潃 =鈥?.0.0.0鈥濆垯杩斿洖銆?鈥損rint current ip, netmaskj gateway print(wifi.ap.getip()) 鈥?92.168.4.1 255.255.255.0 192.168.4.1 ip = wifi.ap.getip() print(ip) 鈥?92.168.4.1 ipj nm = wifi.ap.getip() print(nm) 鈥?55.255.255.0 ipj nm, gw = wifi.ap.getip() print(gw) 鈥?92.168.4.1 涔熷彲浠ョ湅鐪?鈥?wifi.ap.getmac() wifi.ap.getmac () 鍦ˋP妯″紡涓嬭幏鍙朚AC鍦板潃銆?鍙ユ硶 wifi.ap.getmac() 鍙傛暟 娌℃湁 杩斿洖 MAC鍦板潃浣滀负瀛楃涓诧紝渚嬪鈥?A-33-44-FE-55-BB鈥?涔熷彲浠ョ湅鐪?wifi.ap.getip() wifi.ap.setip () 鍦ˋP妯″紡涓嬭缃甀P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧鍦板潃銆?鍙ユ硶 wifi.ap.setip(cfg) cfg琛ㄥ寘鍚獻P鍦板潃锛岀綉缁滄帺鐮佸拰缃戝叧 杩斿洖 濡傛灉鎴愬姛鍒欎负true,鍚﹀垯涓篺alse 渚?cfg = { ip=鈥?92.168.1.1"J netmask=鈥?55.255.255.0鈥? gateway=,192.168.1.1鈥?} wifi.ap.setip(cfg) 涔熷彲浠ョ湅鐪?wifi.ap.setmac() wifi.ap.setmac () 鍦ˋP妯″紡涓嬭缃甅AC鍦板潃銆?鍙ユ硶 wifi.ap.setmac(mac) 鍙傛暟 瀛楄妭涓蹭腑鐨凪AC鍦板潃锛屼緥濡傗€淎C- ID- 1C-B1-0B-22鈥?杩斿洖 濡傛灉鎴愬姛鍒欎负鐪燂紝鍚﹀垯涓哄亣 渚?print(wifi.ap.setmac(鈥淎C-lD-lC-Bl-0B-22鈥?) 涔熷彲浠ョ湅鐪?wifi.ap.setip() wifi.ap.dhcp妯″潡 wifi.ap.dhcp.config () 閰嶇疆DHCP鏈嶅姟銆傜洰鍓嶅彧鏀寔璁剧疆dhcp鍦板潃姹犵殑璧峰鍦板潃銆?dhcp_config鍖呭惈DHCP鍦板潃姹犵殑璧峰IP鐨勮〃锛屼緥濡俆92.168.1.100鈥?/p> dhcp_config ={} dhcp_config.start = H192.168.1.100" wifi 銉?ap.dhcp.config(dhcp_config) wifi.ap.dhcp.start () 鍚姩DHCP鏈嶅姟銆?鍙ユ硶 wifi.ap.dhcp.start() 鍙傛暟 娌℃湁 杩斿洖 甯冨皵鍊艰〃绀烘垚鍔?wifi.ap.dhcp.stop () 鍋滄DHCP鏈嶅姟銆?鍙ユ硶 wifi.ap.dhcp.stop() 鍙傛暟 娌℃湁 杩斿洖 甯冨皵鍊艰〃绀烘垚鍔?wifte ventmon 妯?鍧?wifi.eventmon.register () 娉ㄥ唽/鍙栨秷娉ㄥ唽WiFi浜嬩欢鐩戣鍣ㄧ殑鍥炶皟銆?娉ㄥ唽鍥炶皟鍚庯紝鍙兘浼氶殢鏃惰皟鐢ㄦ鍑芥暟鏉ユ洿鏂板洖璋冨嚱 銆傛敞鎰?涓轰簡纭繚鎵€鏈塛iFi浜嬩欢閮借鎹曡幏锛學ifi浜嬩欢鐩戣鍣ㄥ洖璋冨簲璇ュ敖鍙兘鏃╁湴娉ㄥ唽init.lua銆?鍥炶皟涔嬪墠鍙戠敓鐨勪换浣曚簨浠堕兘灏嗚涓㈠純锛?鍙ユ硶 wifi.eventmon.register (Event[, function (T)]) 鍙傛暟 浜嬩欢锛氫綘鎯宠缃洖鎷ㄧ殑WiFi浜嬩欢銆?-鏈夋晥鐨刉iFi娲诲姩锛?0 wifi.eventmon.SlA_CONNECTED 銆倃ifi.eventmon.SlA_DISCONNECTED 0 wifi.eventmon.SlA_AUTHMODE_CHANGE o wifi.eventmon.SlA_GOT_l P o wifi.eventmon.SlA_DHCP_TIMEOUT o wifi.eventmon.AP_STACONNECTED o wifi.eventmon.AP_SlADISCONNECTED o wifi.eventmon.AP_PROBEREQRECVED 杩斿洖 鍔熻兘锛?nil 鍥炶皟锛?T锛氱敱浜嬩欢杩斿洖鐨勮〃銆?銉粀ifi. eventmon. STA_CONNECTED 绔欒繛鎺ュ埌鎺ュ叆鐐广€?o SSID :鎺ュ叆鐐瑰崡SSID銆?銆俠ssid :鎺ュ叆鐐圭殑BSSIDo 掳 channel :鎺ュ叆鐐规墍鍦ㄧ殑棰戦亾銆?鈥ifi. eventmon. STA_DISCONNECTED :绔欑偣涓庢帴鍏ョ偣鏂紑杩炴帴銆?銆俿sid :鎺ュ叆鐐筗SSIDo 銆俠ssid :鎺ュ叆鐐圭殑BSSIDo O reason :璇峰弬闃呬笅闈㈢殑wifi.eventmon.reason銆?銉粀ifi. eventmon. STA_AUTHMODE_CHANGE :鎺ュ叆鐐瑰凡鏇存敼鎺堟潈妯″紡銆?O old_auth_mode :鏃х殑WiFi鎺堟潈妯″紡銆?O new_auth_mode :鏂扮殑wifi鎺堟潈妯″紡銆?鈥ifi.eventmon.STA_GOT_IP :鐢靛彴鏈変竴涓狪P鍦板潃銆?銆侷P :鍒嗛厤缁欒鐢靛彴鐨処P鍦板潃銆?0 netmask :瀛愮綉鎺╃爜銆?掳 gateway :鐢靛彴杩炴帴鐨勬帴鍏ョ偣鐨処P鍦板潃銆?銉粀ifi.eventmon.STA_DHCP_TIMEOUT :绔欑偣DHCP璇锋眰宸茶秴鏃躲€?O绌虹櫧琛ㄨ杩斿洖銆?鈥ifi.eventmon.AP_STACONNECTED :鏂扮殑瀹㈡埛绔繛鎺ュ埌鎺ュ叆鐐广€?O MAC :杩炴帴鐨勫鎴风鐨凪AC鍦板潃銆?O AID : SDK娌℃湁鎻愪緵鏈夊叧姝よ繑鍥炲€肩殑璇︾粏淇℃伅銆?銉粀ifi.eventmon.AP STADISCONNECTED :瀹㈡埛绔凡缁忎笌鎺ュ叆鐐规柇寮€杩炴帴銆?O MAC :鏂崌杩炴帴鏃冲灏哥鏃矼AC鍦板潃銆?0 AID : SDK娌℃湁鎻愪緵鏈夊叧姝よ繑鍥炲€肩殑璇︾粏淇℃伅銆?銉粀ifi.eventmon.AP_PROBEREQRECVED :鏀跺埌浜嗕竴涓帰娴嬭姹傘€?銆侻AC :鎺㈡祴鎺ュ叆鐐圭殑瀹㈡埛绔殑MAC鍦板潃銆?銆俁SSI :鎺ユ敹鍒板鎴风鐨勪俊鍙峰己搴︽寚鏍囥€?鈥ifi.eventmon.WIFI_MODE_CHANGE : WiFi妯″紡宸茬粡鏀瑰彉銆?0 old_auth_mode :鏃iFi妯″紡銆?0 new_auth_mode :鏂扮殑WiFi妯″紡銆?渚?wifi.eventmon.register(wifi,eventmon.STA_CONNECTEDj function(T) print(鈥淺n\tSTA - CONNECTED鈥濃€︹€淺n\tSSID: 鈥溾€.SSID鈥︹€漒n\tBSSID:鈥濃€?T.BSSID鈥︹€淺n\tChannel: 鈥溾€.channel) end) wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED> function(T) print(鈥漒n\tSTA - DISCONNECTED鈥濃€︹€淺n\tSSID: .T.SSID鈥︹€漒n\tBSSID:鈥溾€?T.BSSID鈥︹€漒n\treason: 鈥溾€.reason) end) wifi.eventmon.register(wifi.eventmon.STA_AUTHMODE_CHANGEj function(T) print(鈥漒n\tSTA - AUTHMODE CHANGE" 鈥?,\n\told_auth_mode:. T.old_auth_mode鈥︹€淺n\tnew_auth_mode: 鈥溾€.new_auth_mode) end) wifi.eventmon.register(wifi,eventmon.STA_GOT_IPj function(T) print(鈥漒n\tSTA - GOT IP鈥濃€︹€淺n\tStation IP: 鈥溾€.IP鈥︹€漒n\tSubnet mask: T.netmask鈥︹€漒n\tGateway IP: 鈥溾€.gateway) end) wifi銉籩ventmon . register(wifi.eventmon.STA_DHCP_TIMEOUT, function() print(鈥漒n\tSTA - DHCP TIMEOUT") end) wifi.eventmon.register(wifi.eventmon.AP_STACONNECTEDj function(T) print(鈥淺n\tAP - STATION CONNECTED鈥濃€︹€淺n\tMAC锛?鈥溾€.MAC鈥︹€漒n\tAID: 鈥溾€.AID) end) wifi.eventmon.register(wifi.eventmon.AP_STADISCONNECTEDJ function(T) print(鈥漒n\tAP - STATION DISCONNECTED鈥濃€︹€淺n\tMAC: 鈥溾€.MAC鈥︹€漒n\tAID: 鈥溾€.AID) end) wifi.eventmon , register(wifi.eventmon.AP_PROBEREQRECVEDj function(T) print(n\n\tAP - PROBE REQUEST RECEIVED鈥濃€︹€漒n\tMAC锛?T.MAC鈥︹€淺n\tRSSI锛?鈥濃€銉籖锛?end) wifi.eventmon , register(wifi.eventmon.WIFI_MODE_CHANGEDj function(T) print(n\n\tSTA - WIFI MODE CHANGED鈥濃€\n\told_mode: T.old_mode鈥?\n\tnew_mode: "鈥.new_mode) end) 涔熷彲浠ョ湅鐪?銉?wifi.eventmon.unregister() wifi.eventmon.unreaister () 鍙栨磶娉ㄥ唽WiFi浜嬩欢鐩戣鍣ㄦ棾鍥炶皟銆?鍙ユ硶 wifi.eventmon.unregister (浜嬩欢) 鍙傛暟 浜嬩欢锛氫綘鎯宠缃洖鎷ㄧ殑WiFi浜嬩欢銆?-鏈夋晥鐨刉iFi娲诲姩锛?銆倃ifi.eventmon.SlA_CONNECTED 銆倃ifi.eventmon.STA_DISCONNECTED 0 wifi.eventmon.SlA_AUTHMODE_CHANGE o wifi.eventmon.SlA_GOT_l P o wifi.eventmon.SlA_DHCP_TIMEOUT o wifi.eventmon.AP_STACONNECTED o wifi.eventmon.AP_STADISCONNECTED o wifi.eventmon.AP_PROBEREQRECVED o wifi.eventmon.WIFI_MODE_CHANGED 杩斿洖 nil wifi.eventmon , unregister(wifi.eventmon.STA_CONNECTED) 涔熷彲浠ョ湅鐪?銉?wifi.eventmon.register() wifi.eventmon.reason 鍖呭惈鏂紑鍘熷洜鐨勮〃銆?鏂紑鍘熷洜 鍊?wifi, eventmon. reason. UNSPECIFIED 1 wifi.eventmon.reason.AUTH_EXP IRE 2 wifi.eventmon.reason.AUTH_LEAVE 3 wifi.eventmon.reason.ASSOC_EXP IRE 4 wifi.eventmon.reason.ASSOC_TOOMANY 浜?wifi.eventmon.reason.NOT_AUTHED 6 wifi.eventmon. reason. NOT_ASSOCED 7 wifi.eventmon.reason.ASSOC_NOT_AUTHED 9 wifi.eventmon.reason.DISASSOC_PWRCAP_BAD 10 wifi.eventmon.reason.DISASSOC_SUPCHAN_BAD 11 wifi.eventmon.reason.lE_INVALID 13 wifi.eventmon.reason.MIC_FAILURE 14 wifi.eventmon.reason.4VW\Y_HANDSHAKE-TIMEOUT 15 wifi.eventmon.reason.GROUP_KEY_UPDATE_TIMEOUT 16 wifi.eventmon.reason.lE_IN_4VWKY_DIFFERS 17 wifi.eventmon.reason.GROUP_CIPHER_INVALID 18 wifi.eventmon.reason.PAIRWISE_CIPHER_INVALID 19 wifi.eventmon.reason.AKMP_INVALID 20 wifi.eventmon.reason.UNSUPP_RSN_IE_VERSION 21 wifi.eventmon.reason.lNVALID_RSN_IE_CAP 22 wifi.eventmon.reason.802_lX_AUTH_FAILED 23 wifi.eventmon.reason.CIPHER_SUITE_REJECTED 24 wifi.eventmon.reason.BEACON_TIMEOUT 200 wifi.eventmon.reason.NO_AP_FOUND 201 wifi.eventmon.reason.AUTH_FAIL 202 wifi.eventmon. reason. ASSOC_ FAIL 203 wifi.eventmon.reason.HANDSHAKE TIMEOUT 204 WPS妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?鏃?寮楀叞鍏婨xoo 寮楀叞鍏婨xoo wps.c WPS鍏佽灏嗚澶囨坊鍔犲埌鐜版湁缃戠粶锛岃€屾棤闇€杈撳叆缃戠粶鍑瘉銆?/p> 銆傚嵄闄?璇疯皑鎱庝娇鐢ㄣ€備娇鐢╓PS瀛樺湪涓ラ噸鐨勫畨鍏ㄩ棶棰樸€?鍚敤WPS鍔熻兘鐨刉PA/WPA2缃戠粶闈炲父瀹规槗鐮磋В銆備竴鏃PS寮曡剼琚洍锛岃矾鐢卞櫒鍗充娇鏇存敼瀵?鐮佷篃浼氬彂鍑哄瘑鐮併€?鎮ㄥ簲璇ヤ娇鐢ㄧ鐢ㄤ簡 WPS鍔熻兘鐨刉PA/WPA2o wps.disable () 绂佺敤WiFi WPS鍔熻兘銆?wps.enable () 鍚敤WiFi WPS鍔熻兘銆?wps.start () 鍚姩WiFi WPS鍔熻兘銆?/p> wps.disable () 绂佺敤WiFi WPS鍔熻兘銆?鍙傛暟 娌℃湁 杩斿洖 nil wps.enable () 鍚敤WiFi WPS鍔熻兘銆?鍙傛暟 娌℃湁 nil wps.start () 鍚姩WiFiWPS鍔熻兘銆傚湪璋冪敤姝ゅ嚱鏁颁箣鍓嶏紝蹇呴』鍚敤WPS銆?鉂舵敞鎰?姝ゅ姛鑳戒粎閰嶇疆AP鐨勪俊鎭紝涓嶈嚜鍔ㄨ繛鎺P銆?鍙ユ硶 wps 銉?start([function(status)]) 鍙傛暟 鈥?function(status)褰揥PS鍔熻兘缁撴潫鏃剁殑鍥炶皟鍑芥暟銆?杩斿洖 nil 鈥揃asic exampLe wifi.setmode(wifi.STATION) wps.enable() wps.start(function(status) if status == wps.SUCCESS then wps.disable() print(鈥淲PS: Success, connecting to AP鈥?wifi 銉?sta 銉?connect() return elseif status print(鈥淲PS: elseif status print(nWPS: elseif status print(鈥淲PS: elseif status print(HWPS: else print(status) end wps.disable() end) 鈥揊uLL exampLe do 鈥揜egister wifi wifi.eventmon.register(wifi.eventmon.STA_CONNECTEDj function(T) print(n\n\tSTA - CONNECTED鈥濃€\n\tSSID: H鈥.SSID鈥\n\tBSSID: T.BSSID鈥︹€漒n\tChannel: 鈥溾€.channel) end) wifi.eventmon鈥egister(wifi.eventmon.STA_GOT_IPj function(T) print(鈥漒n\tSTA - GOT IP鈥濃€︹€淺n\tStation IP: 鈥?,T.IP鈥︹€漒n\tSubnet mask:鈥?T.netmask鈥︹€淺n\tGateway IP: 鈥溾€.gateway) end) wifi.setmode(wifi.STATION) wps_retry_func = function() if wps_retry_count == nil then wps_retry_count = 0 end if wps_retry_count < 3 then wps.disable() wps.enable() wps_retry_count = wps_retry_count + 1 wps_retry_timer = tmr.create() wps_retry_timer:alarm(3000, tmr.ALARM_SINGLE3 function() wps.start(wps_cl print(鈥渞etry #鈥濃€ps_retry_count) else wps_retry_count = nil wps_retry_timer = nil wps_retry_func = nil wps_cb = nil end end wps_cb = function(status) if status == wps.SUCCESS then wps.disable() printC鈥橶PS: success, connecting to AP鈥︹€? wifi銉?sta 銉?connect() wps_retry_count = nil wps_retry_timer = nil wps_retry_func = nil wps_cb = nil return elseif status == wps.FAILED then print(HWPS: Failed鈥? wps_retry_func() return elseif status == wps.TIMEOUT then print(鈥淲PS: Timeout鈥? wps_retry_func() return elseif status == wps.WEP then print(鈥淲PS: WEP not supported鈥? elseif status == wps.SCAN_ERR then print(HWPS: AP not found") wps_retry_func() return else print(status) end wps.disable() wps_retry_count = nil wps_retry_timer = nil wps_retry_func = nil wps_cb = nil end wps.enable() wps , start(wps_cb) end WS2801妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015 骞?鏈?12 H Espressif 鐨勪緥瀛愶紝Konrad Beckmann 搴锋媺寰疯礉鍏嬫浖 ws2801.c ws2801.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?ws2801.write () 灏哶涓?4浣峈GB鏁版嵁鍙戦€佸埌WS280L ws2801.init () 鍒濆鍖栨ā鍧楀苟璁剧疆寮曡剼閰嶇疆銆?鍙ユ硶 ws2801.init(pin_clk, pin_data) 鍙傛暟 -pin_clk 閽堜负鏃堕挓銆傛敮鎸丟PIO0,2,4,50 -pin_data 寮曡剼鐨勬暟鎹€傛敮鎸丟PIO0,2,4,5銆?杩斿洖 nil ws2801.write () 灏嗕竴涓?4浣峈GB鏁版嵁鍙戦€佸埌WS2801o涓嶈蹇樿ws280i.init()涔嬪墠鎵撶數璇濄€?鍙ユ硶 ws2801.write(string) 鍙傛暟 -string鏈夋晥杞借嵎琚彂閫佸埌涓€涓垨澶氫釜WS280L瀹冨簲璇ョ敱姣忎釜鍏冪礌鐨凴GB涓夊厓缁勬瀯鎴愩€?O R1绗竴涓儚绱犵殑绾㈣壊閫氶亾鍊?0-255) O GI绗竴涓儚绱犵殑缁胯壊閫氶亾鍊?0-255) o B1绗竴涓儚绱犵殑钃濊壊閫氶亾鍊?0-255) 鈥︿綘鍙互杩炴帴寰堝WS2801鈥?O R2 , G2 , B2鏄笅WS2801鐨勭孩鑹诧紝缁胯壊鍜岃摑鑹查€氶亾鍊?杩斿洖 nil ws2801.write(string.char(255,0,0, 0,255,0, 0,0,255)) WS2812妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2015骞?鏈?鏃?鐩村埌Klocke, ThomasSoete 鐩村埌鍏嬫礇鍏?ws2812.c ws2812鏄竴涓浘涔﹂澶勭悊绫讳技ws2812鐨刲ed鐏甫銆傚畠鑷冲皯鍦╓S2812, WS2812b, APA104, SK6812 锛圧GB鎴朢GBW锛変笂宸ヤ綔銆?璇ュ簱浣跨敤璺敱鍦℅PIO2涓婄殑UART1 锛圢odeMCUDEVKIT涓婄殑寮曡剼D4锛夋潵鐢熸垚姣旂壒娴併€傚畠鍙?浠ヤ娇鐢ㄨ矾鐢卞埌TXDO鐨刄ARTO鏉ュ悓鏃跺鐞嗕袱涓狶ED鐏潯銆?璀﹀憡锛氬湪鍙岄噸妯″紡涓嬶紝鎮ㄥ皢鏃犳硶閫氳繃涓插彛璁块棶Lua鐨勬帶鍒跺彴锛堝畠灏嗚閲嶆柊閰嶇疆涓烘敮鎸乄S2812- like鍗忚锛夈€傚鏋滀綘鎯充繚鎸佽闂甃ua鐨勬帶鍒跺彴锛屼綘灏嗕笉寰椾笉浣跨敤鍏朵粬杈撳叆閫氶亾锛屽TCP鏈嶅姟鍣?锛堣鍙傞槄绀轰緥锛?ws2812.init () 鍒濆鍖朥ART1鍜孏PIO2,搴旇鍦╳rite 锛堬級涔嬪墠璋冪敤涓€娆°€?ws2812.write () 鍙戦€佹暟鎹埌涓€涓垨涓や釜led鐏甫浣跨敤鍏跺師鐢熸牸寮忥紝閫氬父鏄豢鑹诧紝绾㈣壊锛岃摑 鑹茬殑RGB鏉″拰缁胯壊锛岀孩鑹诧紝钃濊壊锛岀櫧鑹茬殑RGBW鏉°€?ws2812.newBuffer () 鍒嗛厤涓€涓柊鐨勫唴瀛樼紦鍐插尯鏉ュ瓨鍌ㄤ富鍊笺€?ws2812.buffer锛氬緱鍒?() ws2812.buffer锛?) 璁剧疆 ws2812.buffer锛氬昂瀵?() ws2812.buffer锛氬~鍐?() 鐢ㄧ粰瀹氱殑棰滆壊濉厖缂撳啿鍖恒€?ws2812.buffer锛氳浆鍌?() 浠ュ瓧绗︿覆褰㈠紡杩斿洖缂撳啿鍖虹殑鍐呭锛堝儚绱犲€硷級銆?ws2812.buffer锛氭浛鎹?() 灏嗗瓧绗︿覆锛堟垨缂撳啿鍖猴級鎻掑叆鍙︿竴涓叿鏈夊亸绉婚噺鐨勭紦鍐插尯涓€?ws2812.buffer锛氭贩鍚?() 杩欐槸灏嗘暟鎹姞杞藉埌缂撳啿鍖虹殑涓€鑸柟娉曪紝璇ョ紦鍐插尯鏄潵鑷叾浠栫紦鍐插尯鐨勬暟 鎹殑绾挎€х粍鍚堛€?ws2812.buffer锛氬姛鐜?() 璁$畻缂撳啿鍖虹殑鎬昏兘閲忛渶姹傘€?ws2812.buffer锛氳お鑹?() 娣″叆鎴栨贰鍑恒€?/p> 灏嗭紙涓€鍧楋級缂撳啿鍖虹殑鍐呭鍚戞鎴栬礋鏂瑰悜绉诲姩銆?杩欏疄鐜颁簡鍍忓瓧绗︿覆涓€鏍风殑鎻愬彇鍔熻兘銆?杩欏疄鐜颁簡銆?ws2812.init 锛堬級 鍒濆鍖朥ART1鍜孏PI02,搴旇鍦╳rite 锛堬級涔嬪墠璋冪敤涓€娆°€傚垵濮嬪寲UARTO 锛圱XDO锛夊 鏋?ws2812.M0DE_DUAL 琚缃€?鍙ユ硶 ws2812.init锛堬蓟mode锛斤級 鍙傛暟 鈥?mode 锛堝彲閫夛級瑕佷箞 ws2812.MODE_SINGLE 锛堥粯璁わ紝濡傛灉鐪佺暐锛夋垨 ws2812.MODE_DUAL 鍦╓S2812.MODE_DUAL妯″紡涓嬶紝鎮ㄥ皢鑳藉骞惰澶勭悊涓や釜鏉″甫锛屼絾灏嗗け鍘诲Lua涓茶鎺у埗鍙扮殑璁?闂潈闄愶紝鍥犱负瀹冨崠浜浉鍚岀殑UART鍜孭IN銆?杩斿洖 nil ws2812.write 锛堬級 鍙戦€佹暟鎹埌涓€涓垨涓や釜led鐏甫浣跨敤鍏跺師鐢熸牸寮忥紝閫氬父鏄豢鑹诧紝绾㈣壊锛岃摑鑹茬殑RGB鏉″拰缁胯壊, 绾㈣壊锛岃摑鑹诧紝鐧借壊鐨凴GBW鏉°€?鍙ユ硶 ws2812.write(datal, [data2]) 鍙傛暟 -datal鏈夋晥杞借嵎閫氳繃GPIO2鍙戦€佸埌涓€涓垨澶氫釜WS2812 锛堝LED锛?-data2 锛堝彲閫夛級鏈夋晥璐熻浇閫氳繃TXDO鍙戦€佸埌涓€涓垨澶氫釜WS2812 锛堝ws2812.M0DE_DUAL 闇€瑕佺殑妯″紡锛?鏈夋晥杞借嵎绫诲瀷鍙互鏄細-nil娌℃湁瀹屾垚-string琛ㄧず瑕佸彂閫佺殑瀛楄妭-ws2812.buffer璇峰弬 闃呯紦鍐插尯妯″潡 杩斿洖 nil ws2812.init() ws2812.write(string.char(2550, 0, 255, 0, 0)) 鈥?turn the two first RGB Leds ws2812.init() ws2812.write(string.char(00, 0, 255, 0,0, 0, 255)) 鈥?turn the two first RGBW ws2812.init(ws2812.M0DE_DUAL) ws2812.write(string.char(255, 0, 0, 255> Q, 0), string.char(0, 255, 0, 0, 255, 0 ws2812.init(ws2812.M0DE_DUAL) ws2812.write(nil, string.char(0, 255, 255, 0)) 鈻? turn the two first RGB Li 缂撳啿妯″潡 瀵逛簬鏇撮珮绾х殑鍔ㄧ敾锛屼繚鎸佹潯鐨勨€滃抚缂撳啿鍖?锛屼笌鍏朵氦浜掑苟灏嗗叾鍐插埛鍒版潯涓婃槸鏈夌敤鐨勩€?涓烘锛學S2812搴撴彁渚涗簡涓€涓/鍐欑紦鍐插尯銆傝繖涓紦鍐插尯鏈変竴涓猒tostring鏂规硶鍙互鎵撳嵃銆傝繖 瀵硅皟璇曞緢鏈夌敤銆?渚?甯GBW甯︾殑杩借釜鍣?ws2812.init() local ij buffer = 0, ws2812.newBuffer(300, 4); buffer0, 0, 0); tmr.crea- i = i + 1 buffer:fade(2) buffer:set(i % buffer:size() + 1, 0, 0> 0, 255) ws2812.write(buffer) end) ws2812.newBuffer () 鍒嗛厤涓€涓柊鐨勫唴瀛樼紦鍐插尯鏉ュ瓨鍌ㄤ富鍊笺€?鍙ユ硶 ws2812.newBuffer(numberOfLeds, bytesPerLed) 鍙傛暟 鈥?numberOfLeds led鐏甫鐨勯暱搴?銉籦ytesPerLed RGB鏉$汗涓?, RGBW鏉$汗涓? ws2812.buffer锛氬緱鍒?) 杩斿洖缁欏畾浣嶇疆鐨勫€?鍙ユ硶 buffer:get(index) 鍙傛暟 -index鍦ㄧ紦鍐插尯涓殑浣嶇疆(绗竴涓狶ED涓?) 杩斿洖 (color) 渚?buffer = ws2812.newBuffer(32j 4) print(buffer:get(1)) 0 0 0 0 ws2812.buffer锛?)璁剧疆 鍦ㄧ粰瀹氱殑浣嶇疆璁剧疆鍊?鍙ユ硶 buffer:set(index, color) 鍙傛暟 -index鍦ㄧ紦鍐插尯涓殑浣嶇疆(1涓虹涓€涓狶ED) 鈥?color棰滆壊鐨勬湁鏁堣浇鑽?鏈夋晥杞借嵎鍙互鏄細-number, numberj 鈥︿綘搴旇浼犻€掑敖鍙兘澶氱殑鍙傛暟bytesPerLed - table 搴旇鍖呭惈bytesPerLed 鏁板瓧-string 搴旇鍖呭惈bytesPerLed 瀛楄妭 杩斿洖 nil 渚?buffer = ws2812.newBuffer(32J 3) buffer:set(1, 255, 0) 鈥?set the first Led green for a RGB strip buffer = ws2812.newBuffer(32J 4) buffer:set(1, (0, 0, 0, 255}) 鈥?set the first Led white for a RGBW strip buffer = ws2812.newBuffer(32J 3) buffer:set(1, string.char(255, 0, 0)) 鈥?set the first Led green for a RGB strip ws2812.buffer锛氬昂瀵革紙锛?浠ユ暟閲忕殑LED杩斿洖缂撳啿鍖虹殑澶у皬 鍙ユ硶 buffer:size() 鍙傛暟 娌℃湁 杩斿洖 int ws2812.buffer锛氬~鍐欙紙锛?鐢ㄧ粰瀹氱殑棰滆壊濉厖缂撳啿鍖恒€傜粰瀹氬瓧鑺傜殑鏁伴噺蹇呴』涓庣紦鍐插尯鐨勫瓧鑺傛暟鐩浉鍖归厤 鍙ユ硶 buffer:fill(color) 鍙傛暟 鈥?color棰滆壊鐨勫瓧鑺傦紝浣犲簲璇ヤ紶閫掕澶氬弬鏁癰ytesPerLed 杩斿洖 nil buffer111(0 0) 鈥?fill the buffer with btack for a RGB strip ws2812.buffer锛氳浆鍌紙锛?浠ュ瓧绗︿覆褰㈠紡杩斿洖缂撳啿鍖虹殑鍐呭锛堝儚绱犲€硷級銆傝繖鍙互淇濆瓨鍒版枃浠舵垨閫氳繃缃戠粶鍙戦€併€?鍙ユ硶 buffer:dump() 杩斿洖 鍖呭惈鍍忕礌鍊肩殑瀛楃涓层€?ws2812.buffer锛氭浛鎹紙锛?灏嗗瓧绗︿覆锛堟垨缂撳啿鍖猴級鎻掑叆鍙︿竴涓叿鏈夊亸绉婚噺鐨勭紦鍐插尯涓€傛瘡涓狶ED鐨勭紦鍐插尯蹇呴』鍏锋湁鐩稿悓鏁?閲忕殑棰滆壊锛屽惁鍒欎細寮曞彂閿欒銆?鍙ユ硶 buffer:replace(source[, offset]) 鍙傛暟 銉籹ource鍍忕礌鍊煎皢琚缃埌缂撳啿鍣ㄤ腑銆傝繖鏄竴涓瓧绗︿覆鎴栦竴涓紦鍐插尯銆?銉籵ffset婧愭斁缃湪缂撳啿鍖轰腑鐨勫亸绉婚噺銆傞粯璁ゅ€兼槸1.鍙互浣跨敤璐熷€笺€?杩斿洖 nil buffer:replace(anotherbuffer:dump()) 鈥?copy one buffer into another via a strini buffer:replace(anotherbuffer) 鈥?copy one buffer into another newbuffer = buffer.sub(l) 鈥?make a copy of a buffer into a new buffer ws2812.buffer锛氭贩鍚堬紙锛?杩欐槸灏嗘暟鎹姞杞藉埌缂撳啿鍖虹殑涓€鑸柟娉曪紝璇ョ紦鍐插尯鏄潵鑷叾浠栫紦鍐插尯鐨勬暟鎹殑绾挎€х粍鍚堛€傚畠鍙?浠ョ敤鏉ュ鍒朵竴涓紦鍐插尯锛屾垨鑰呮洿鏈夌敤鐨勫仛涓€涓氦鍙夋贰鍏ユ贰鍑恒€傚儚绱犲€兼寜鏁存暟璁$畻锛岀劧鍚庤寖鍥?闄愬埗涓篬0,255]0杩欐剰鍛崇潃璐熼潰鍥犵礌濡傞鏈熺殑閭f牱宸ヤ綔锛屽苟涓旂紦鍐茬粍鍚堢殑椤哄簭骞朵笉閲嶈銆?鍙ユ硶 buffer:mix(factorbufferlj 銉?銉? 鍙傛暟 鈥?factorl杩欐槸鍐呭bufferl琚箻浠ョ殑鍥犵礌銆傝繖涓洜瀛愯缂╂斁浜?56鍊嶃€傚洜姝actorl , 256鐨勫€兼槸1.0鐨勪竴涓洜瀛愩€?-bufferl杩欐槸婧愮紦鍐插尯銆傚畠蹇呴』涓庣洰鏍囩紦鍐插尯鍏锋湁鐩稿悓鐨勫舰鐘躲€?鍙互鏈変换浣曟暟閲忕殑鍥犲瓙/缂撳啿娑插銆?杩斿洖 nil 鈥揕oads buffer with a crossfade between bufferl and buffer2 buffer:mix(256 - crossmix, bufferl, crossmiXj buffer2) 鈥搈uLtipLies all voLues in buffer by 0.75 鈥?This can be used in pLace of buffer:fade buffer:mix(192_, buffer) ws2812.buffer锛氬姛鐜?) 璁$畻缂撳啿鍖虹殑鎬昏兘閲忛渶姹傘€傝繖鍙槸鎵€鏈夊儚绱犲€肩殑鎬诲拰(鍋囧畾姣忎釜鍍忕礌涓殑姣忕棰滆壊娑堣€楃浉鍚?鐨勫姛鐜囬噺)銆備竴涓湡姝g殑WS2812 (鎴朩S2811)鏈変笁涓?0mA鐨勬亽娴侀┍鍔ㄥ櫒-R, G鍜孊鍚勪竴 涓€傝剦鍐插搴﹁皟鍒跺皢浣垮钩鍧囩數娴佷笌鍍忕礌鍊兼垚绾挎€ф瘮渚嬪叧绯汇€?鍙ユ硶 buffer:power() 杩斿洖 涓€涓暣鏁帮紝瀹冩槸鎵€鏈夊儚绱犲€肩殑鎬诲拰銆?渚?鈥揇im the buffer to no more than the PSU can provide local psu_current_ma = 1000 local led_current_ma = 20 local led_sum = psu_current_ma * 255 / led_current_ma local p = buffer:power() if p > led_sum then buffer:mix(256 * led_sum / p> buffer) 鈥?power is now Limited end ws2812.buffer锛氳お鑹?) 娣″叆鎴栨贰鍑恒€傞粯璁ゆ槸out銆傚皢姣忎釜LED鐨勬瘡涓瓧鑺備箻浠ユ垨闄や互缁欏畾鍊笺€傜敤浜庢贰鍖栨晥鏋溿€?鍙ユ硶 buffer:fade(value direction]) 鍙傛暟 鈥?value鐢ㄦ潵鍒嗗壊鎴栦箻浠ユ瘡涓瓧鑺傜殑鍊?-direction ws2812.FADE_IN鎴杦s2812.FADE_OUT銆傞粯璁や负ws2812.FADE_OUT buffer:fade(2) buffercfade^, ws2812. FADE_IN) ws2812.buffer锛氱Щ浣?) 灏?涓€鍧?缂撳啿鍖虹殑鍐呭鍚戞鎴栬礋鏂瑰悜绉诲姩銆傝繖鍏佽绠€鍗曠殑鍔ㄧ敾鏁堟灉銆傚彲浠ヤ娇鐢ㄦ爣鍑嗙殑璧峰 鍜岀粨鏉熷亸绉婚噺Lua琛ㄧず娉曟潵鎸囧畾缂撳啿鍖虹殑涓€閮ㄥ垎銆傝礋鍊间粠缂撳啿鍖虹殑鏈鍚戝悗璁℃暟銆?鍙ユ硶 buffer:shift(value [, mode], j]]]) 鍙傛暟 鈥?value鏃嬭浆缂撳啿鍖虹殑鍍忕礌鏁伴噺銆傛鍊煎悜鍓嶆棆杞紝璐熷€煎悜鍚庢棆杞€?銉籱ode鏄娇鐢ㄧ殑鎹㈡尅妯″紡銆傚彲浠ユ槸涓€涓獁s2812.SHIFT_LOGICAL 鎴杦s2812.SHIFT_CIRCULAR銆傚湪SHIFT涓凮GICAL鐨勬儏鍐典笅锛岄噴鏀剧殑鍍忕礌琚缃负0 (鍏?闂?銆傚湪SHIFT.CIRCULAR鐨勬儏鍐典笅锛屽雹鍐插尯琚涓轰竴涓幆褰㈢紦鍐插尯锛屽湪鍙︿竴绔啀娆℃彃鍏?涓€涓儚绱犮€傞粯璁や负SHIFT_LOGICAL銆?-i鏄彈褰卞搷缂撳啿鍖轰腑鐨勭涓€涓亸绉婚噺銆傝礋鍊兼槸鍏佽鐨勶紝浠庢渶鍚庡€掓暟銆傜己鐪佸€兼槸1銆?-j鏄彈褰卞搷缂撳啿鍖轰腑鐨勬渶鍚庝竴涓亸绉婚噺銆傝礋鍊兼槸鍏佽鐨勶紝浠庢渶鍚庡€掓暟銆傜己鐪佸€兼槸-1銆?杩斿洖 nil 渚?buffer:shift(3) ws2812.buffer锛氬瓙() 杩欏疄鐜颁簡鎻愬彇鍔熻兘string.sub o杩欎簺绱㈠紩鏄湪LED鍜屾墍鏈夌浉鍚岀殑瑙勫垯閫傜敤銆?鍙ユ硶 bufferl:sub(i[, j]) 鍙傛暟 -i杩欐槸鎻愬彇鏁版嵁鐨勫紑濮嬨€傚彲浠ヤ娇鐢ㄨ礋鍊笺€?-j杩欐槸鎻愬彇鏁版嵁鐨勭粨灏俱€傚彲浠ヤ娇鐢ㄨ礋鍊笺€傞粯璁ゅ€兼槸-1銆?杩斿洖 鍖呭惈鎻愬彇鐨勭墖娈电殑缂撳啿鍖恒€?渚?鏂囨。銆嬭嫳璇€濇ā鍧椔籜PT2046 XPT2046妯″潡 浠ユ潵 璧锋簮/璐$尞鑰?缁存姢鑰?璧勬簮 2017骞?鏈?鏃?Starofall / Frank Exoo 寮楀叞鍏婨xoo xpt2046.c XPT2046鏄竴绉嶅粔浠锋樉绀哄櫒浣跨敤鐨勮Е鎽告帶鍒跺櫒锛岄€氬父涓嶪LI9341鏄剧ず鎺у埗鍣ㄧ粨鍚堜娇鐢ㄣ€傝妯″潡 鍩轰簬 spapadim 鍜?PaulStoffregen 鐨勫簱寤虹珛銆?xpt2046.init () 鍚姩XPT2046妯″潡锛屼粠鏄剧ず灞忎笂璇诲彇瑙︽懜鍊笺€?xpt2046.setCa 1 ibration () 璁剧疆鏄剧ず鍣ㄧ殑鏍″噯銆?xpt2046.is7buched () 妫€鏌ヨЕ鎽搁潰鏉挎槸鍚﹁瑙︽懜銆?xpt2046.getPosition () 浣跨敤鏍″噯鍊煎拰缁欏畾鐨勫搴﹀拰楂樺害杩斿洖鏄剧ず瑙︽懜鐨勪綅缃€?xpt2046.getPositionAvg () 涓轰簡鍒涘缓鏇村ソ鐨勬祴閲忥紝杩欎釜鍑芥暟璇诲彇涓夋浣嶇疆锛屽苟浠ユ渶灏忚窛绂诲钩鍧?涓や釜浣嶇疆銆?xpt2046.getRaw () 浠庢樉绀哄櫒璇诲彇鍘熷鍊笺€?/p> xpt2046.init () 鍚姩XPT2046妯″潡锛屼粠鏄剧ず灞忎笂璇诲彇瑙︽懜鍊笺€傝皟鐢╯pi.setup銆傚墠闇€瑕佽皟 鐢▁pt2046.init (鍙傝绀轰緥)銆傜敱浜巙cg搴撲篃闇€瑕乻pi.setup()琚皟鐢紝鍥犳鍙渶璋冪敤涓€ 娆″苟婵€娲诲嵆鍙痵pi.FULLDUPLEX銆傚湪clock_div鎵€鐢╯pi.setup()搴斾负16鎴栨洿楂橈紝濡傝緝浣?鐨勫€煎彲鑳戒骇鐢熶笉鍑嗙‘鐨勭粨鏋溿€?鍙ユ硶 xpt2046.init(cs_pin, irq_pinheight, width) 鍙傛暟 銉籧s_pin CS鐨凣PI銆傚紩鑴?鈥?irq_pin GPI銆傚紩鑴氱敤浜?irq -height浠ュ儚绱犳樉绀洪珮搴?-width浠ュ儚绱犱负鍗曚綅鏄剧ず瀹藉害 杩斿洖 nil 鈥揝etup spi with 鈥榗Lock_div鈥?of 16 and spi. FULLDUPLEX spi.setup(l, spi.MASTER, spi.CPOL_LOW, spi銉籆PHA_LOW, 8, 16,spi.FULLDUPLEX) --SETTING UP DISPLAY (using ucg moduLe) local disp = ucg.ili9341_18x240x320_hw_spi(8j 4, 0) disp:begin(0) 鈥揝ETTING UP TOUCH xpt2046.init(2J1,320,240) xpt2046.setcalibration(198, 1776, 1762, 273) xpt2046.setCalibration () 璁剧疆鏄剧ず鍣ㄧ殑鏍″噯銆傛牎鍑嗗€煎彲浠ラ€氳繃浣跨敤xpt2046.getRaW()鍜岃鍙栬竟缂樹腑鐨勫€兼潵鍔犱互鑰?铏戙€?鍙ユ硶 xpt2046.setCalibration(xlj yl, x2, y2) 鍙傛暟 -Xl鍘熷X鍊煎湪宸︿笂瑙?-yl鍘熷鐨剏鍊煎湪宸︿笂瑙?-x2鍘熷X鍊煎湪鍙充笅瑙?-y2鍘熷鐨剏鍊煎湪鍙充笅瑙?杩斿洖 nil xpt2046.isTouched () 妫€鏌ヨЕ鎽搁潰鏉挎槸鍚﹁瑙︽懜銆?鍙ユ硶 xpt2046.isTouched() 杩斿洖 true濡傛灉鏄剧ず琚Е鎽革紝鍚﹀垯false 渚?if(xpt2046.isTouched()) then local x, y = xpt2046.getPosition() print(x 銉?,-H 銉汇兓 y) end xpt2046.getPosition () 浣跨敤鏍″噯鍊煎拰缁欏畾鐨勫搴﹀拰楂樺害杩斿洖鏄剧ず瑙︽懜鐨勪綅缃€傚彲浠ュ湪涓柇寮曡剼鍥炶皟涓娇鐢紝浠ュ湪瑙?鎽歌Е鎽稿睆鏃惰繑鍥炲潗鏍囥€?鍙ユ硶 xpt2046 銉?getPosition() 杩斿洖 杩斿洖x鍜寉鐨勪綅缃€?渚?鈥揝etup spi with 鈥榗Lock_div鈥?of 16 and spi. FULLDUPLEX spi.setup(l, spi.MASTER, spi.CPOL_LOW, spi.CPHA_L0W3 8, 16,Spi.FULLDUPLEX) --SETTING UP TOUCH cs_pin = 2 鈥?GPI04 irq_pin = 3 鈥?GPIO0 height = 240 width = 320 xpt2046.init(cs_pinj irq_pinwidth, height) xpt2046.setcalibration(198, 1776, 1762, 273) gpio.mode(irq_pinjgpio.INT,gpio, PULLUP) gpio.trig(irq_pinj 鈥渄own鈥? function() print(xpt2046.getPosition()) end) xpt2046.getPositionAvg () 涓轰簡鍒涘缓鏇村ソ鐨勬祴閲忥紝杩欎釜鍑芥暟璇诲彇涓夋浣嶇疆锛屽苟浠ユ渶灏忚窛绂诲钩鍧囦袱涓綅缃€?鍙ユ硶 xpt2046 銉籫etPositionAvg() 杩斿洖 杩斿洖x鍜寉鐨勪綅缃€?渚?local Xj y = xpt2046.getPositionAvg() print(x鈥) xpt2046.getRaw () 浠庢樉绀哄櫒璇诲彇鍘熷鍊笺€傜敤浜庤皟璇曞拰鑷畾涔夎浆鎹€?鍙ユ硶 xpt2046.getRaw() 杩斿洖 杩斿洖x鍜寉鐨勪綅缃綔涓哄師濮嬪€笺€?local rawX, rawY = xpt2046.getRaw() print(rawX 鈥︹€?鈥濃€awY) 杞嚜锛歨ttp://blog.csdn.net/Hackbuteer1/rss/list [鍘焆涔濆害浜掑姩绀惧尯IT鍚嶄紒鎷涜仒涓婃満鑰冭瘯鐑韩璧?http://ac.jobdu.com/problem.php?id=1326聽聽聽聽聽Waiting in Line 聽 //绠€鍗曟ā鎷熼 #include #include using namespace std; #include int pt[1001],leave[1001],start[21]; int n,m,k,q; inline bool scan_d(int &num) // 杩欎釜灏辨槸 鍔犻€熺殑 鍏抽敭浜? { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true;num=0;} else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num; return true; } void solve() { int i,j,index,t,p,count=k; int num[21],window[21][13]; memset(start,0,sizeof(start)); memset(num,0,sizeof(num)); j = index = 1; for(i = 1 ; i <= n*m && i <= k ; ++i) //鍒氬紑濮嬫椂锛宯涓獥鍙i兘鏄┖鐨勶紝瀹㈡埛渚濇閫夋嫨闃熶紞鏈€鐭殑绐楀彛 { window[j][index] = i; num[j]++; j++; if(j>n) { j = 1; ++index; } } j = i; //鍒氬紑濮嬬殑n涓獥鍙e凡缁忛兘鎺掓弧浜嗗鎴?/p> t = 0; while(t <= 540) { ++t; for(i = 1 ; i <= n ; ++i) { if(num[i] > 0 && pt[ window[i][1] ] == t - start[i]) { leave[ window[i][1] ] = t; start[i] = t; --count; //涓€涓敤鎴风寮€ for(p = 2 ; p <= num[i] ; ++p) window[i][p-1] = window[i][p]; //姣忎釜绐楀彛鐨勭涓€涓敤鎴风寮€鍚庯紝鍚庨潰鐨勫鎴蜂緷娆″線鍓嶇Щ鍔?/p> --num[i]; if(j <= k) //杩樻湁绛夊緟鐨勫鎴风殑鏃跺€欙紝寰€绐楀彛涓啀澧炲姞涓€涓?/p> { window[i][p-1] = j; ++num[i]; ++j; } }//if }//for if(!count) //鎵€鏈夊鎴烽兘澶勭悊瀹岀殑鏃跺€欙紝鐩存帴閫€鍑?/p> break; } } int main(void) { int i,j; while(scanf("%d %d %d %d",&n,&m,&k,&q)!=EOF) { memset(leave,1,sizeof(leave)); for(i = 1 ; i <= k ; ++i) scan_d(pt[i]); solve(); for(i = 0 ; i < q ; ++i) { scan_d(j); if(leave[j] > 540) puts("Sorry"); else printf("%02d:%02d\n",leave[j]/60+8,leave[j]%60); } } return 0; } 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-2 15:10:11聽 鍘熸枃閾炬帴 闃呰锛?27 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆鍗曡皟闃熷垪 涓€銆?浠€涔堟槸鍗曡皟锛堝弻绔級闃熷垪 鍗曡皟闃熷垪锛岄【鍚嶆€濅箟锛屽氨鏄竴涓厓绱犲崟璋冪殑闃熷垪锛岄偅涔堝氨鑳戒繚璇侀槦棣栫殑鍏冪礌鏄渶灏忥紙鏈€澶э級鐨勶紝浠庤€屾弧瓒冲姩鎬佽鍒掔殑鏈€浼樻€ч棶棰樼殑闇€姹傘€?鍗曡皟闃熷垪锛屽張鍚嶅弻绔槦鍒椼€傚弻绔槦鍒楋紝灏辨槸璇村畠涓嶅悓浜庝竴鑸殑闃熷垪鍙兘鍦ㄩ槦棣栧垹闄ゃ€侀槦灏炬彃鍏ワ紝瀹冭兘澶熷湪闃熼銆侀槦灏惧悓鏃惰繘琛屽垹闄ゃ€?銆愬崟璋冮槦鍒楃殑鎬ц川銆?涓€鑸紝鍦ㄥ姩鎬佽鍒掔殑杩囩▼涓紝鍗曡皟闃熷垪涓瘡涓厓绱犱竴鑸瓨鍌ㄧ殑鏄袱涓€硷細 1銆佸湪鍘熸暟鍒椾腑鐨勪綅缃紙涓嬫爣锛?2銆?浠栧湪鍔ㄦ€佽鍒掍腑鐨勭姸鎬佸€?鑰屽崟璋冮槦鍒楀垯淇濊瘉杩欎袱涓€煎悓鏃跺崟璋冦€?浠庝互涓婄湅锛屽崟璋冮槦鍒楃殑鍏冪礌鏈€濂界敤涓€涓被鏉ユ斁锛屼笉杩欐牱鐨勮瘽锛屽氨瑕佸紑涓や釜鏁扮粍銆傘€傘€?鍗曡皟闃熷垪锛氬崟璋冮槦鍒?鍗充繚鎸侀槦鍒椾腑鐨勫厓绱犲崟璋冮€掑锛堟垨閫掑噺锛夌殑杩欐牱涓€涓槦鍒楋紝鍙互浠庝袱澶村垹闄わ紝鍙兘浠庨槦灏炬彃鍏ャ€傚崟璋冮槦鍒楃殑鍏蜂綋浣滅敤鍦ㄤ簬锛岀敱浜庝繚鎸侀槦鍒椾腑鐨勫厓绱犳弧瓒冲崟璋冩€э紝瀵规墜鍏冪礌渚挎槸鏋佸皬鍊硷紙鏋佸ぇ鍊硷級浜嗐€?http://poj.org/problem?id=2823 聽 //poj-2823--鍗曡皟闃熷垪 #include #include using namespace std; const int MAX = 1000001; //涓や釜鍗曡皟闃熷垪 int dq1[MAX]; //涓€涓瓨鍗曡皟閫掑 int dq2[MAX]; //涓€涓瓨鍗曡皟閫掑噺 int a[MAX]; inline bool scan_d(int &num) // 杩欎釜灏辨槸 鍔犻€熺殑 鍏抽敭浜? { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true;num=0;} else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num; return true; } int main(void) { int i,n,k,front1,front2,tail1,tail2,start,ans; while(scanf("%d %d",&n,&k)!=EOF) { for(i = 0 ; i < n ; ++i) scan_d(a[i]); front1 = 0, tail1 = -1; front2 = 0, tail2 = -1; ans = start = 0; for(i = 0 ; i < k ; ++i) { while(front1 <= tail1 && a[ dq1[tail1] ] <= a[i]) //褰撳墠鍏冪礌澶т簬鍗曡皟閫掑闃熷垪鐨勯槦灏惧厓绱犵殑鏃跺€欙紝闃熷熬鐨勫厓绱犱緷娆″脊鍑洪槦鍒楋紝鐩村埌闃熷熬鍏冪礌澶т簬褰撳墠褰撳墠鍏冪礌鐨勬椂鍊欙紝灏嗗綋鍓嶅厓绱犳彃鍏ラ槦灏?/p> --tail1; dq1[ ++tail1 ] = i; //鍙渶瑕佽褰曚笅鏍囧嵆鍙?/p> while(front2 <= tail2 && a[ dq2[tail2] ] >= a[i]) //褰撳墠鍏冪礌灏忎簬鍗曡皟閫掑噺闃熷垪鐨勯槦灏惧厓绱犵殑鏃跺€欙紝闃熷熬鐨勫厓绱犱緷娆″脊鍑洪槦鍒楋紝鐩村埌闃熷熬鍏冪礌灏忎簬褰撳墠褰撳墠鍏冪礌鐨勬椂鍊欙紝灏嗗綋鍓嶅厓绱犳彃鍏ラ槦灏?/p> --tail2; dq2[ ++tail2 ] = i; //鍙渶瑕佽褰曚笅鏍囧嵆鍙?/p> } printf("%d ",a[ dq2[ front2 ] ]); for( ; i < n ; ++i) { while(front2 <= tail2 && a[ dq2[tail2] ] >= a[i]) --tail2; dq2[ ++tail2 ] = i; while(dq2[ front2 ] <= i - k) ++front2; if(i != n-1) printf("%d ",a[ dq2[ front2 ] ]); } printf("%d\n",a[ dq2[ front2 ] ]); //杈撳嚭鏈€澶у€?/p> printf("%d ",a[ dq1[ front1 ] ]); for(i=k ; i < n ; ++i) { while(front1 <= tail1 && a[ dq1[tail1] ] <= a[i]) --tail1; dq1[ ++tail1 ] = i; while(dq1[ front1 ] <= i - k) ++front1; if(i != n-1) printf("%d ",a[ dq1[ front1 ] ]); } printf("%d\n",a[ dq1[ front1 ] ]); } return 0; } http://acm.hdu.edu.cn/showproblem.php?pid=3530聽聽Subsequence 聽 聽 /* 棰樻剰锛氱粰鍑轰竴涓簭鍒楋紝姹傛渶闀跨殑杩炵画瀛愬簭鍒楋紝浣垮緱 M<=Max-Min<=K n <= 10^5 渚濇鏋氫妇鍓╀笅鐨凬-1涓厓绱狅紝骞朵笖灏嗗綋鍓嶆湭鍏ラ槦鐨勭涓€涓厓绱犲拰闃熷熬鍏冪礌姣旇緝锛屽綋涓斾粎褰撻槦鍒椾负闈炵┖骞朵笖闃熷熬鍏冪礌鐨勫€煎皬浜庡綋鍓嶆湭鍏ラ槦鐨勫厓绱犳椂锛?/p> 灏嗛槦灏惧厓绱犲垹闄?涔熷氨鏄槦灏炬寚閽?1锛夛紝鍥犱负褰撳墠鐨勫厓绱犳瘮闃熷熬鍏冪礌澶э紝鎵€浠ュ湪鍖洪棿鍐呴槦灏惧厓绱犱笉浼氭槸鏈€澶у€间簡銆?/p> 閲嶅杩欎釜杩囩▼鐩村埌闃熷垪绌烘垨鑰呴槦灏惧厓绱犳瘮褰撳墠鍏冪礌澶э紝 */ #include #include using namespace std; const int MAX = 100001; //涓や釜鍗曡皟闃熷垪 int dq1[MAX]; //涓€涓瓨鍗曡皟閫掑 int dq2[MAX]; //涓€涓瓨鍗曡皟閫掑噺 int a[MAX]; inline bool scan_d(int &num) // 杩欎釜灏辨槸 鍔犻€熺殑 鍏抽敭浜? { char in;bool IsN=false; in=getchar(); if(in==EOF) return false; while(in!='-'&&(in<'0'||in>'9')) in=getchar(); if(in=='-') { IsN=true;num=0;} else num=in-'0'; while(in=getchar(),in>='0'&&in<='9') { num*=10,num+=in-'0'; } if(IsN) num=-num; return true; } int main(void) { int i,n,m,k,front1,front2,tail1,tail2,start,ans; while(scanf("%d %d %d",&n,&m,&k) != EOF) { for(i = 0 ; i < n ; ++i) scan_d(a[i]); front1 = 0, tail1 = -1; front2 = 0, tail2 = -1; ans = start = 0; for(i = 0 ; i < n ; ++i) { while(front1 <= tail1 && a[ dq1[tail1] ] <= a[i]) //褰撳墠鍏冪礌澶т簬鍗曡皟閫掑闃熷垪鐨勯槦灏惧厓绱犵殑鏃跺€欙紝闃熷熬鐨勫厓绱犱緷娆″脊鍑洪槦鍒楋紝鐩村埌闃熷熬鍏冪礌澶т簬褰撳墠褰撳墠鍏冪礌鐨勬椂鍊欙紝灏嗗綋鍓嶅厓绱犳彃鍏ラ槦灏?/p> --tail1; dq1[ ++tail1 ] = i; //鍙渶瑕佽褰曚笅鏍囧嵆鍙?/p> while(front2 <= tail2 && a[ dq2[tail2] ] >= a[i]) //褰撳墠鍏冪礌灏忎簬鍗曡皟閫掑噺闃熷垪鐨勯槦灏惧厓绱犵殑鏃跺€欙紝闃熷熬鐨勫厓绱犱緷娆″脊鍑洪槦鍒楋紝鐩村埌闃熷熬鍏冪礌灏忎簬褰撳墠褰撳墠鍏冪礌鐨勬椂鍊欙紝灏嗗綋鍓嶅厓绱犳彃鍏ラ槦灏?/p> --tail2; dq2[ ++tail2 ] = i; //鍙渶瑕佽褰曚笅鏍囧嵆鍙?/p> /* Max - Min 涓轰袱涓槦鍒楃殑闃熼涔嬪樊 while(Max-Min>K) 鐪嬪摢涓殑闃熼鍏冪礌姣旇緝闈犲墠锛屽氨鎶婅皝寰€鍚庣Щ鍔?/p> */ while(a[ dq1[front1] ] - a[ dq2[front2] ] > k) { if(dq1[front1] < dq2[front2] ) { start = dq1[front1] + 1; ++front1; } else { start = dq2[front2] + 1; ++front2; } } if(a[ dq1[front1] ] - a[ dq2[front2] ] >= m) { if(i - start +1 > ans) ans = i - start + 1; } } printf("%d\n",ans); } return 0; } 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-3 21:54:38聽 鍘熸枃閾炬帴 闃呰锛?23 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆瀹炰範鐢熸嫑鑱樼瑪璇?聽 1銆佽绠楄〃杈惧紡x6+4x4+2x3+x+1鏈€灏戦渶瑕佸仛锛堬級娆′箻娉?A銆?聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽B銆?聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 C銆?聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 D銆? 绗竴娆′箻娉曪細x^2锛岀浜屾涔樻硶锛歺^4=x^2 * x^2锛岀涓夋涔樻硶锛氬師寮?x^2 * (x^4+4x^2+2x)+x+1锛屾瘡涓€椤圭殑绯绘暟鍙互浣跨敤鍔犳硶鏉ュ疄鐜般€傘€?2銆佺粰瀹?涓猧nt绫诲瀷鐨勬鏁存暟x锛寉锛寊锛屽濡備笅4缁勮〃杈惧紡鍒ゆ柇姝g‘鐨勯€夐」锛堬級 Int a1=x+y-z; int b1=x*y/z; Int a2=x-z+y; int b2=x/z*y; Int c1=x< { if(m == 0) return n + 1; else if(n == 0) return ack(m-1,1); else return ack(m - 1 , ack(m , n-1)); } 杩欎釜棰樼洰鍙互鎵捐寰嬬殑銆傘€?聽 18銆佸涓婼QL璇彞鏄渶瑕佸垪鍑轰竴涓鍧涚増闈㈢涓€椤碉紙姣忛〉鏄剧ず20涓級鐨勫笘瀛愶紙post锛夋爣棰橈紙title锛夛紝骞舵寜鐓у彂甯冿紙create_time锛夐檷搴忔帓鍒楋細 SELECT title FROM post( )create_time DESC( )0,20聽聽聽聽order by聽 limit 聽 19銆佷负浜嗘煇椤圭洰闇€瑕侊紝鎴戜滑鍑嗗鏋勯€犱簡涓€绉嶉潰鍚戝璞$殑鑴氭湰璇█锛屼緥濡傦紝瀵规墍鏈夌殑鏁存暟锛屾垜浠兘閫氳繃Integer绫诲瀷鐨勫璞℃潵鎻忚堪銆傚湪璁$畻鈥?+2鈥濇椂锛岃繖閲岀殑鈥?鈥濓紝鈥?鈥濆拰缁撴灉鈥?鈥濆垎鍒负涓€涓狪nteger瀵硅薄銆備负浜嗛檷浣庤璁″鏉傚害锛屾垜浠喅瀹氳Integer瀵硅薄閮芥槸鍙瀵硅薄锛屼篃鍗冲湪璁$畻a=a+b鍚庯紝瀵硅薄a寮曠敤鐨勬槸涓€涓柊鐨勫璞★紝鑰岄潪鏀筧鎵€鎸囧璞$殑鍊笺€傝€冭檻鍒版€ц兘闂锛屾垜浠張寮曞叆涓ょ浼樺寲鏂规锛氾紙1锛夊浜庢暟鍊肩浉绛夌殑Integer瀵硅薄锛屾垜浠笉浼氶噸澶嶅垱寤恒€備緥濡傦紝璁$畻鈥?+1鈥濓紝杩欓噷涓や釜鈥?鈥濈殑寮曠敤鐨勬槸鍚屼竴涓璞♀€斺€旇繖绉嶈璁℃ā寮忓彨鍋氾紙锛夛紱锛?锛夎剼鏈瑷€瑙f瀽鍣ㄥ惎鍔ㄦ椂锛岄粯璁ゅ垱寤烘暟鍊艰寖鍥碵1,32]鐨?2涓狪nteger瀵硅薄銆傜幇鍦紝鍋囪鎴戜滑瑕佽绠楄〃杈惧紡鈥?+2+3+鈥?40鈥濓紝鍦ㄨ绠楄繃绋嬮渶瑕佸垱寤虹殑Integer瀵硅薄涓暟鏄紙锛夈€?浜厓妯″紡20銆佺敳銆佷箼涓や釜浜哄湪鐜╃寽鏁板瓧娓告垙锛岀敳闅忔満鍐欎簡涓€涓暟瀛楋紝鍦╗1锛?00]鍖洪棿涔嬪唴锛屽皢杩欎釜鏁板瓧鍐欏湪浜嗕竴寮犵焊涓婏紝鐒跺悗涔欐潵鐚溿€?濡傛灉涔欑寽鐨勬暟瀛楀亸灏忕殑璇濓紝鐢蹭細鎻愮ず锛氣€滄暟瀛楀亸灏忊€?涓€鏃︿箼鐚滅殑鏁板瓧鍋忓ぇ鐨勮瘽锛岀敳浠ュ悗灏卞啀涔熶笉浼氭彁绀轰簡锛屽彧浼氬洖绛斺€滅寽瀵?鎴?鐚滈敊鈥?闂細 涔欒嚦灏戠寽聽聽聽 澶氬皯娆÷?鐚滃彲浠ュ噯纭寽鍑鸿繖涓暟瀛楋紝鍦ㄨ繖绉嶇瓥鐣ヤ笅锛屄?涔欑寽鐨勭涓€涓暟瀛楁槸澶氬皯锛燂紵锛?绛旀锛氱寽娴嬪簭鍒楁槸14,銆?7銆?9銆?0銆?0銆?9銆?7銆?4銆?0銆?5銆?9 鍥犱负鏃犺绗嚑娆$寽澶т簡锛屾渶缁堢殑鎬绘鏁版€绘槸14銆偮犅犅犅?杩欎釜棰樼洰绫讳技浜庝竴閬揋oogle闈㈣瘯棰樎狅細聽聽鎵旂幓鐠冪悆姹傛渶楂樻ゼ灞傘€傘€?涓€閬撳叧浜庡姩鎬佽鍒掔殑闈㈣瘯棰樷€斺€擥oogle闈㈣瘯棰橈細鎵旂幓鐠冪彔鏌愬耿澶фゼ鏈?00灞傘€備綘鎵嬮噷鏈変袱棰椾竴妯′竴鏍风殑鐜荤拑鐝犮€傚綋浣犳嬁鐫€鐜荤拑鐝犲湪鏌愪竴灞傚線涓嬫墧鐨勬椂鍊欙紝涓€瀹氫細鏈変袱涓粨鏋滐紝鐜荤拑鐝犵浜嗘垨鑰呮病纰庛€傝繖骞㈠ぇ妤兼湁涓复鐣屾ゼ灞傘€備綆浜庡畠鐨勬ゼ灞傦紝寰€涓嬫墧鐜荤拑鐝狅紝鐜荤拑鐝犱笉浼氱锛岀瓑浜庢垨楂樹簬瀹冪殑妤煎眰锛屾墧涓嬬幓鐠冪彔锛岀幓鐠冪彔涓€瀹氫細纰庛€傜幓鐠冪彔纰庝簡灏变笉鑳藉啀鎵斻€傜幇鍦ㄨ浣犺璁′竴绉嶆柟寮忥紝浣垮緱鍦ㄨ鏂瑰紡涓嬶紝鏈€鍧忕殑鎯呭喌鎵旂殑娆℃暟姣斿叾浠栦换浣曟柟寮忔渶鍧忕殑娆℃暟閮藉皯銆備篃灏辨槸璁捐涓€绉嶆渶鏈夋晥鐨勬柟寮忋€傞鍏堬紝涓轰簡淇濆瓨涓嬩竴棰楃幓鐠冪彔鑷繁鐜╋紝灏遍噰鐢ㄦ渶绗ㄧ殑鍔炴硶鍚э細浠庣涓€灞傚紑濮嬭瘯锛屾瘡娆″鍔犱竴灞傦紝褰撳摢涓€灞傛墧涓嬬幓鐠冪彔鍚庣鎺変簡锛屼篃灏辩煡閬撲簡銆備笉杩囨渶鍧忕殑鎯呭喌鎵旂殑娆℃暟鍙兘涓?00銆傚綋鐒讹紝涓轰簡杩欎竴棰楃幓鐠冪彔浠d环涔熼珮浜嗙偣锛岃繕鏄噰鍙栧彟澶栦竴绉嶅姙娉曞惂銆傞殢渚挎寫涓€灞傦紝鍋囧涓篘灞傦紝鎵斾笅鍘诲悗锛屽鏋滅浜嗭紝閭e氨鍙兘浠庣涓€灞傚紑濮嬭瘯浜嗭紝鏈€鍧忕殑鎯呭喌鍙兘涓篘銆傚亣濡傛病纰庯紝灏变竴娆″鍔犱竴灞傜户缁墧鍚э紝杩欐椂鏈€鍧忕殑鎯呭喌涓?00-N銆備篃灏辨槸璇达紝閲囩敤杩欑鍔炴硶锛屾渶鍧忕殑鎯呭喌涓簃ax{N, 100-N+1}銆備箣鎵€浠ヨ鍔犱竴锛屾槸鍥犱负绗竴娆℃槸浠庣N灞傚紑濮嬫墧銆備笉杩囪繕鏄寰椾笉澶熷ソ锛岃繍姘斿ソ鐨勮瘽锛屾寫鍒扮殑N鍙兘鍒氬ソ鏄复鐣屾ゼ灞傦紝杩愭皵涓嶅ソ鐨勮瘽锛岃鎵旂殑娆℃暟杩樻槸寰堝銆備笉杩囧洖杩囧ご鐪嬬湅绗簩绉嶆柟寮忥紝鏈夋病鏈変粈涔堝彂鐜般€傚亣濡傛病鎽旂殑璇濓紝涓嶅涓嶈涓€娆″鍔犱竴灞傜户缁墧鍚э紝鑰屾槸閲囧彇鍙﹀涓€绉嶆柟寮忥細鎶婇棶棰樿浆鎹负100-N锛屽湪杩欓噷闈㈡壘涓寸晫妤煎眰锛岃繖鏍蜂笉灏辨妸闂杞崲鎴愮敤閫掑綊鐨勬柟寮忔潵瑙e喅鍚楋紵鐪嬩笅闈細鍋囧缁撴灉閮戒繚瀛樺湪F[101]杩欎釜鏁扮粍閲岄潰锛岄偅涔堬細F[N]=100-N锛孎[100]=min锛坢ax锛?锛?+F[N-1]锛夛紝max锛?锛?+F[N-2]锛夛紝鈥︹€︼紝max锛圢-1锛?+F[1]锛夛級;鐪嬪嚭鏉ヤ簡娌℃湁锛屽叾瀹炴渶缁堝氨鏄埄鐢ㄥ姩鎬佽鍒掓潵瑙e喅杩欎釜闂銆備笅闈㈡槸鑷繁闅忎究鍐欑殑C++浠g爜锛?聽 #include using namespace std; int dp[101] = { 0 }; void solve() { int i , j , k; for(i = 2 ; i < 101 ; ++i) { dp[i] = i; for(j = 1 ; j < i ; ++j) { k = (j>=(1 + dp[i-j])) ? j : (1 + dp[i-j]); if(dp[i] > k) dp[i] = k; } } } int main(void) { dp[0] = 0 , dp[1] = 1; solve(); printf("%d\n",dp[100]); return 0; }杈撳嚭缁撴灉涓?4銆備篃灏辨槸璇达紝鏈€濂界殑鏂瑰紡鍙璇?4娆″氨鑳藉寰楀嚭缁撴灉浜嗐€?绛旀鏄厛浠?4妤煎紑濮嬫姏绗竴娆★紱濡傛灉娌$锛屽啀浠?7妤兼姏绗簩娆★紱濡傛灉杩樻病纰庯紝鍐嶄粠39妤兼姏绗笁娆★紱濡傛灉杩樻病纰庯紝鍐嶄粠50妤兼姏绗洓娆★紱濡傛锛屾瘡娆¢棿闅旂殑妤煎眰灏戜竴灞傘€傝繖鏍凤紝浠讳綍涓€娆℃姏妫嬪瓙纰庢椂锛岄兘鑳界‘淇濇渶澶氭姏14娆″彲浠ユ壘鍑轰复鐣屾ゼ灞傘€?璇佹槑濡備笅锛?1銆佺涓€娆℃姏妫嬪瓙鐨勬ゼ灞傦細鏈€浼樼殑閫夋嫨蹇呯劧鏄棿闅旀渶澶х殑妤煎眰銆傛瘮濡傦紝绗竴娆″鏋滃湪m灞傛姏涓嬫瀛愶紝浠ュ悗鍐嶆姏妫嬪瓙鏃朵袱娆℃ゼ灞傜殑闂撮殧蹇呯劧涓嶅ぇ浜巑灞傦紙澶у鍙互鑷繁鐢ㄥ弽璇佹硶绠€鍗曡瘉鏄庯級 2銆佷粠绗簩娆℃姏妫嬪瓙鐨勯棿闅旀ゼ灞傛渶浼樼殑閫夋嫨蹇呯劧姣旂涓€娆¢棿闅斿皯涓€灞傦紝绗笁娆$殑妤煎眰闂撮殧姣旂浜屾闂撮殧灏戜竴灞傦紝濡傛锛屼互鍚庢瘡娆℃姏妫嬪瓙妤煎眰闂撮殧姣斾笂涓€娆¢棿闅斿皯涓€灞傘€傦紙澶у涓嶅Θ鑷繁璇佹槑涓€涓嬶級 3銆佹墍浠ワ紝璁緉鏄涓€娆℃姏妫嬪瓙鐨勬渶浣虫ゼ灞傦紝鍒檔鍗充负婊¤冻涓嬪垪涓嶇瓑寮忕殑鏈€灏忚嚜鐒舵暟锛?聽 涓嶇瓑寮忓涓嬶細聽 1+2+3+...+(n-1)+n聽 >=聽聽 100 鐢变笂寮忓彲寰楀嚭n=14 鍗虫渶浼樼殑绛栫暐鏄厛浠庣14灞傛姏涓嬶紝鏈€澶氭姏14娆¤偗瀹氳兘鎵惧嚭涓寸晫妤煎眰銆?聽 聽 聽 聽 21銆佺粰瀹氫竴涓暟缁刟[N],鎴戜滑甯屾湜鏋勯€犳暟缁刡[N]锛屽叾涓璪[i]=a[0]*a[1]*...*a[N-1]/a[i]銆傚湪鏋勯€犺繃绋嬶細 涓嶅厑璁镐娇鐢ㄩ櫎娉曪紱 瑕佹眰O(1)绌洪棿澶嶆潅搴﹀拰O(n)鏃堕棿澶嶆潅搴︼紱 闄ら亶鍘嗚鏁板櫒涓巃[N] b[N]澶栵紝涓嶅彲浣跨敤鏂扮殑鍙橀噺(鍖呮嫭鏍堜复鏃跺彉閲忋€佸绌洪棿鍜屽叏灞€闈欐€佸彉閲忕瓑)锛?璇风敤绋嬪簭瀹炵幇骞剁畝鍗曟弿杩般€?聽 /* 鎬濊矾锛氳繘琛?瓒熸壂鎻?/p> 绗竴瓒熶粠宸﹀埌鍙冲A杩涜绱箻锛岀粨鏋滀繚瀛樺湪B鏁扮粍涓紝b[i] = b[i-1]*a[i-1]锛?/p> 绗簩瓒熶粠鍙冲埌宸﹀A杩涜绱箻锛岀粨鏋滃啓鍏涓?a[i]=a[i+1]*a[i]锛?/p> 绗笁瓒熶粠宸﹀埌鍙?鐒跺悗B鏁扮粍瀵瑰簲浣嶇疆鐨勫厓绱犵瓑浜庡叾鍓嶄竴涓綅缃殑鍏冪礌涓嶢涓叾鍚庝竴涓綅缃殑鍏冪礌鐨勪箻绉€俠[i] = a[i+1] * b[i-1] */ void makeArray(int a[],int b[],int len) { int i; b[0] = 1; for(i = 1 ; i < len ; ++i) b[i] = b[i-1] * a[i-1]; // b[0] = 1 , b[i] = a[0]*a[1]*...*a[i-1] a[len - 1] = a[len - 1]^a[len - 2]; //涓嶄娇鐢ㄤ腑闂村彉閲忥紝閫氳繃浣嶈繍绠楁潵浜ゆ崲涓や釜鍙橀噺 a[len - 2] = a[len - 1]^a[len - 2]; a[len - 1] = a[len - 1]^a[len - 2]; for(i = len - 3 ; i >= 0 ; --i) { a[len - 1] = a[i + 1] * a[len - 1]; a[i] = a[i]^a[len - 1]; //浜ゆ崲涓や釜鍙橀噺 a[len - 1] = a[i]^a[len - 1]; a[i] = a[i]^a[len - 1]; } a[len - 1 ] = 1; //a[len - 1 ] = 1 , a[i] = a[i+1]*a[i+2]*...*a[len-1] for(i = 0 ; i < len ; ++i) b[i] = a[i] * b[i]; } 鏂规硶浜岋細 聽 //鏂规硶浜岋紝淇濇寔a鏁扮粍涓嶅彉 void makeArray(int a[],int b[],int len) { int i; b[0] = 1; for(i = 1 ; i < len ; ++i) { b[0] *= a[i-1]; b[i] = b[0]; // b[i] = a[0]*a[1]*...*a[i-1] } b[0] = 1; for(i = len - 2 ; i > 0 ; --i) { b[0] *= a[i+1]; // b[0] = a[i+1]*a[i+2]...*a[len-1] b[i] *= b[0]; // b[i] = a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[len-1] } b[0] *= a[1]; } 鏂规硶涓夛細 聽 void makeArray(int a[],int b[],int len) { int i; b[0] = 1; for(i = 1 ; i < len ; ++i) { b[i] = b[i-1] * a[i-1]; // b[i] = a[0]*a[1]*...*a[i-1] } b[0] = a[len - 1]; for(i = len - 2 ; i > 0 ; --i) { b[i] *= b[0]; // b[i] = a[0]*a[1]*...*a[i-1]*a[i+1]*...*a[len-1] b[0] *= a[i]; // b[0] = a[i+1]*a[i+2]...*a[len-1] } }22銆?0涓栫邯60骞翠唬锛岀編鍥藉績鐞嗗瀹剁背灏旀牸鍏板璁捐浜嗕竴涓繛閿佷俊浠跺疄楠屻€傜背灏旀牸鍏板鎶婁俊闅忓嵆鍙戦€佺粰浣忓湪缇庡浗鍚勫煄甯傜殑涓€閮ㄥ垎灞呮皯锛屼俊涓啓鏈変竴涓尝澹】鑲$エ缁忕邯浜虹殑鍚嶅瓧锛屽苟瑕佹眰姣忓悕鏀朵俊浜烘妸杩欏皝淇″瘎缁欒嚜宸辫涓烘槸姣旇緝鎺ヨ繎杩欏悕鑲$エ缁忕邯浜虹殑鏈嬪弸銆傝繖浣嶆湅鍙嬫敹鍒颁俊鍚庡啀鎶婁俊瀵勭粰浠栬涓烘洿鎺ヨ繎杩欏悕鑲$エ缁忕邯浜虹殑鏈嬪弸銆傛渶缁堬紝澶ч儴鍒嗕俊浠堕兘瀵勫埌浜嗚繖鍚嶈偂绁ㄧ粡绾汉鎵嬩腑锛屾瘡灏佷俊骞冲潎缁忓彈6.2璇嶅埌杈俱€備簬鏄紝绫冲皵鏍煎叞濮嗘彁鍑哄叚搴﹀垎鍓茬悊璁猴紝璁や负涓栫晫涓婁换鎰忎袱涓汉涔嬮棿寤虹珛鑱旂郴鏈€澶氬彧闇€瑕?涓汉銆?鍋囪QQ鍙峰ぇ姒傛湁10浜夸釜娉ㄥ唽鐢ㄦ埛锛屽瓨鍌ㄥ湪涓€鍗冨彴鏈哄櫒涓婄殑鍏崇郴鏁版嵁搴撲腑锛屾瘡鍙版満鍣ㄥ瓨鍌ㄤ竴鐧句竾涓敤鎴峰強鍏剁殑濂藉弸淇℃伅锛屽亣璁剧敤鎴风殑骞冲潎濂藉弸涓暟澶х害涓?5浜哄乏鍙炽€?绗竴闂細璇蜂綘璁捐涓€涓柟妗堬紝灏藉彲鑳藉揩鐨勮绠楀瓨鍌ㄤ换鎰忎袱涓猀Q鍙蜂箣闂存槸鍚﹀叚搴︼紙濂藉弸鏄?搴︼級鍙揪锛屽苟寰楀嚭杩欎袱浣嶇敤鎴峰叚搴﹀彲杈剧殑璇濓紝鏈€鐭槸鍑犲害鍙揪銆?绗簩闂細鎴戜滑甯屾湜寰楀埌骞冲潎姣忎釜鐢ㄦ埛鐨刵搴﹀ソ鍙嬩釜鏁帮紝浠ュ鍔犲鐢ㄦ埛鏇村鐨勪簡瑙o紝鐜板湪濡傛灉姣忓彴鏈哄櫒涓€绉掗挓鍙互杩斿洖涓€鍗冩潯鏌ヨ缁撴灉锛岄偅涔堝湪10澶╃殑鏃堕棿鍐咃紝鍒╃敤缁欏嚭鐨勭‖浠舵潯浠讹紝鍙互缁熻鍑虹敤鎴风殑鏈€澶氬嚑搴﹀ソ鍙嬩釜鏁帮紵濡傛灉甯屾湜寰楀埌鏇撮珮鐨勫钩鍧噉搴﹀ソ鍙嬩釜鏁帮紝鍙互鎬庢牱鏀硅繘鏂规锛?23銆佹椤靛紡铏氭嫙瀛樺偍绠$悊鏂规鐨勭壒鐐广€?绛旓細绌洪棿娴垂灏忋€佸瓨鍌ㄥ叡浜鏄撱€佸瓨鍌ㄤ繚鎶ゅ鏄撱€佽兘鍔ㄦ€佽繛鎺ャ€?聽聽聽聽聽聽 娈甸〉寮忕鐞嗘槸娈靛紡绠$悊鍜岄〉寮忕鐞嗙粨鍚堣€屾垚锛屽吋鏈夋寮忓拰椤靛紡绠$悊鐨勪紭鐐癸紝姣忎竴娈靛垎鎴愯嫢骞查〉锛屽啀鎸夐〉寮忕鐞嗭紝椤甸棿涓嶈姹傝繛缁?鑳藉姩鎬佽繛鎺?;鐢ㄥ垎娈垫柟娉曞垎閰嶇鐞嗕綔涓氾紝鐢ㄥ垎椤垫柟娉曞垎閰嶇鐞嗗唴瀛?绌洪棿娴垂灏?銆?聽聽聽聽聽聽 娈甸〉寮忕鐞嗛噰鐢ㄤ簩缁村湴鍧€绌洪棿锛屽娈靛彿(S)銆侀〉鍙?P)鍜岄〉鍐呭崟鍏冨彿(D);绯荤粺寤轰袱寮犺〃鏍兼瘡涓€浣滀笟涓€寮犳琛紝姣忎竴娈靛缓绔嬩竴寮犻〉琛紝娈佃〃鎸囧嚭璇ユ鐨勯〉琛ㄥ湪鍐呭瓨涓殑浣嶇疆;鍦板潃鍙樻崲鏈烘瀯绫讳技椤靛紡鏈哄埗锛屽彧鏄墠闈㈠鍔犱竴椤规鍙枫€傛墍浠ュ瓨鍌ㄥ叡浜鏄撱€佸瓨鍌ㄤ繚鎶ゅ鏄撱€?/p> 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-8 22:35:48聽 鍘熸枃閾炬帴 闃呰锛?674 璇勮锛?1聽 鏌ョ湅璇勮 聽[鍘焆2011Google鏍″洯鎷涜仒绗旇瘯棰?1銆佸凡鐭ヤ袱涓暟瀛椾负1~30涔嬮棿鐨勬暟瀛楋紝鐢茬煡閬撲袱鏁颁箣鍜岋紝涔欑煡閬撲袱鏁颁箣绉紝鐢查棶涔欙細鈥滀綘鐭ラ亾鏄摢涓や釜鏁板悧锛熲€濅箼璇达細鈥滀笉鐭ラ亾鈥濄€備箼闂敳锛氣€滀綘鐭ラ亾鏄摢涓や釜鏁板悧锛熲€濈敳璇达細鈥滀篃涓嶇煡閬撯€濄€備簬鏄紝涔欒锛氣€滈偅鎴戠煡閬撲簡鈥濓紝闅忓悗鐢蹭篃璇达細鈥滈偅鎴戜篃鐭ラ亾浜嗏€濓紝杩欎袱涓暟鏄粈涔堬紵 绛旓細1鍜? 鎴栬€?鍜? 2銆佷竴涓幆褰㈠叕璺紝涓婇潰鏈夛籍涓珯鐐癸紝A1, ..., AN锛屽叾涓瑼i鍜孉i+1涔嬮棿鐨勮窛绂讳负Di,AN鍜孉1涔嬮棿鐨勮窛绂讳负D0銆?楂樻晥鐨勬眰绗琲鍜岀j涓珯鐐逛箣闂寸殑璺濈锛岀┖闂村鏉傚害涓嶈秴杩嘜(N) 瀹冪粰鍑轰簡閮ㄥ垎浠g爜濡備笅锛?#define N 25 double D[N]聽 .... void Preprocess() { 聽聽聽聽 //Write your code1; } double Distance(int i, int j) { 聽聽聽聽聽 //Write your code2; } 聽 const int N = 10; int D[N]; int A1toX[N]; void Preprocess() { srand(time(0)); for (int i = 0; i < N; ++i) { D[i] = (rand()/(RAND_MAX+1.0)) * N; } A1toX[1] = D[1]; //from A1 to A2 for (int i = 2; i < N; ++i) { A1toX[i] = A1toX[i-1] + D[i]; //distance from A1 to each point } A1toX[0] = A1toX[N-1] + D[0]; // total length } int distance(int i, int j) { int di = (i == 0) ? 0 : A1toX[i-1]; int dj = (j ==0) ? 0 : A1toX[j-1]; int dist = abs(di - dj); return dist > A1toX[0]/2 ? A1toX[0] - dist : dist; } int main(void) { Preprocess(); for (int i = 0; i { cout< } cout< for (int i = 1; i <= N; ++i) { cout<<"distance from A1 to A"< } return 0; } 3銆?涓€涓瓧绗︿覆锛屽帇缂╁叾涓殑杩炵画绌烘牸涓?涓悗锛屽鍏朵腑鐨勬瘡涓瓧涓查€嗗簭鎵撳嵃鍑烘潵銆傛瘮濡?abc聽聽 efg聽 hij"鎵撳嵃涓?cba gfe jih"銆?聽 #include #include #include #include using namespace std; string reverse(string str) { stack int len = str.length(); string ret = ""; for (int p = 0, q = 0;p < len;) { if (str[p] == ' ') { ret.append(1,' '); for (q = p; q < len && str[q] == ' '; q++) {} p = q; } else { for (q = p; q < len && str[q] != ' '; q++) { stk.push(str[q]); } while(!stk.empty()) { ret.append(1,stk.top()); stk.pop(); } p = q; } } return ret; } int main(void) { string s = "abc def ghi"; cout< return 0; } 4銆佸皢涓€涓緝澶х殑閽憋紝涓嶈秴杩?000000(10^6)鐨勪汉姘戝竵锛屽厬鎹㈡垚鏁伴噺涓嶉檺鐨?00銆?0銆?0銆?銆?銆?鐨勭粍鍚堬紝璇烽棶鍏辨湁澶氬皯绉嶇粍鍚堝憿锛燂紙瀹屽叏鑳屽寘锛夛紙鍏跺畠閫夋嫨棰樿€冪殑鏄湁鍏筹細鎿嶄綔绯荤粺銆佹爲銆佹鐜囬銆佹渶澶х敓鎴愭爲鏈夊叧鐨勯锛屽彟澶栧惉鑰佹ⅵ璇达紝璋锋瓕涓嶇粰浜洪湼绗旂殑鏈轰細銆傦級銆偮?聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-9 21:21:26聽 鍘熸枃閾炬帴 闃呰锛?15 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆寰蒋2012鏆戞湡瀹炰範鐢熸牎鍥嫑鑱樼瑪璇曢1銆丼uppose that a selection sort of 80 items has completed 32 iterations of the main loop. How many items are now guaranteed to be in their final spot (never to be moved again)? A銆?6聽聽聽 B銆?1聽聽聽C銆?2聽聽聽聽 D銆?9聽聽 E銆?0 2銆乄hich synchronization mechanism(s) is/are used to avoid race conditions among processes/threads in operating system?A銆丮utex聽聽聽聽 B銆丮ailbox聽聽聽聽 C銆丼emaphore聽聽聽聽聽 D銆丩ocal procedure call 3銆乀here is a sequence of n numbers 1,2,3,...,n and a stack which can keep m numbers at most. Push the n numbers into the stack following the sequence and pop out randomly . Suppose n is 2 and m is 3,the output sequence may be 1,2 or 2,1,so we get 2 different sequences . Suppose n is 7,and m is 5,please choose the output sequence of the stack.A銆?,2,3,4,5,6,7B銆?,6,5,4,3,2,1C銆?,6,4,3,7,2,1D銆?,7,6,5,4,3,2 E銆?,2,1,7,5,6,4 4銆乄hich is the result of binary number 01011001 after multiplying by 0111001 and adding 1101110?A銆?001010000111111 B銆?101011101110011C銆?011010000110101 杞寲涓?0杩涘埗鎿嶄綔浠ュ悗锛屽啀杞寲涓轰簩杩涘埗灏卞彲浠ヤ簡銆?5銆乄hat is output if you compile and execute the following c code? 聽 void main() { int i = 11; int const *p = &i; p++; printf("%d",*p); }A銆?1 B銆?2C銆丟arbage value D銆丆ompile error E銆丯one of above6銆乄hich of following C++ code is correct ?聽聽C A銆?int f() { int *a = new int(3); return *a; }B銆乮nt *f() { int a[3] = {1,2,3}; return a; }C銆乿ector { vector return v; }D銆乿oid f(int *ret) { int a[3] = {1,2,3}; ret = a; return ; } E銆丯one of above 7銆丟iven that the 180-degree rotated image of a 5-digit number is another 5-digit number and the difference between the numbers is 78633, what is the original 5-digit number锛?A銆?0918聽聽 B銆?1086聽聽聽 C銆?8609聽聽聽聽D銆?0968聽聽聽 E銆?6901 8銆乄hich of the following statements are trueA銆乄e can create a binary tree from given inorder and preorder traversal sequences. B銆乄e can create a binary tree from given preorder and postorder traversal sequences.C銆丗or an almost sorted array,Insertion sort can be more effective than Quciksort. D銆丼uppose T(n) is the runtime of resolving a problem with n elements, T(n)=O(1) if n=1; T(n)=2*T(n/2)+O(n) if n>1; so T(n) is O(nlgn) E銆丯one of above 9銆乄hich of the following statements are true? A銆両nsertion sort and bubble sort are not efficient for large data sets.B銆丵ucik sort makes O(n^2) comparisons in the worst case. C銆乀here is an array :7,6,5,4,3,2,1. If using selection sort (ascending),the number of swap operations is 6D銆丠eap sort uses two heap operations:insertion and root deletion 锛堟彃鍏ャ€佸爢璋冩暣锛?E銆丯one of above 10銆丄ssume both x and y are integers,which one of the followings returns the minimum of the two integers?A銆亂^((x^y) & -(x { public: ____ int a; ____ int b; public: Test::Test(int _a , int _b) : a( _a ) { b = _b; } }; int Test::b; int main(void) { Test t1(0 , 0) , t2(1 , 1); t1.b = 10; t2.b = 20; printf("%u %u %u %u",t1.a , t1.b , t2.a , t2.b); return 0; } Running result : 0聽聽 20聽聽 1聽聽 20 聽 A銆乻tatic/const B銆乧onst/static C銆?-/static D銆乧onststatic/static E銆丯one of above 13銆丄 3-order B-tree has 2047 key words,what is the maximum height of the tree? A銆?1聽聽聽聽 B銆?2聽聽聽聽 C銆?3聽聽聽 D銆?4 14銆両n C++,which of the following keyword(s锛塩an be used on both a variable and a function?A銆乻tatic聽聽 B銆乿irtual聽聽聽C銆乪xtern聽聽聽 D銆乮nline聽聽聽E銆乧onst 15銆乄hat is the result of the following program?char *f(char *str , char ch) { char *it1 = str; char *it2 = str; while(*it2 != '\0') { while(*it2 == ch) { it2++; } *it1++ = *it2++; } return str; } int main(void) { char *a = new char[10]; strcpy(a , "abcdcccd"); cout< return 0; }A銆乤bdcccd B銆乤bdd C銆乤bccD銆乤bddcccd E銆丄ccess violation16銆丆onsider the following definition of a recursive function,power,that will perform exponentiation. 聽 int power(int b , int e) { if(e == 0) return 1; if(e % 2 == 0) return power(b*b , e/2); else return b * power(b*b , e/2); }Asymptotically锛堟笎杩涘湴锛?in terms of the exponent e,the number of calls to power that occur as a result of the call power(b,e) isA銆乴ogarithmic B銆乴inear C銆乹uadratic D銆乪xponential 17銆丄ssume a full deck of cards has 52 cards,2 blacks suits (spade and club) and 2 red suits(diamond and heart). If you are given a full deck,and a half deck(with 1 red suit and 1 black suit),what is the possibility for each one getting 2 red cards if taking 2 cards? A銆?/2聽聽聽聽聽 1/2 B銆?5/102聽 12/50 C銆?0/51聽聽 24/25 D銆?5/51聽聽 12/25 E銆?5/51聽聽聽 1/2 18銆乀here is a stack and a sequence of n numbers(i.e. 1,2,3,...,n), Push the n numbers into the stack following the sequence and pop out randomly . How many different sequences of the n numbers we may get? Suppose n is 2 , the output sequence may 1,2 or 2,1, so wo get 2 different sequences . A銆丆_2n^nB銆丆_2n^n - C_2n^(n+1) C銆?(2n)!)/(n+1)n!n! D銆乶! E銆丯one of above 19銆丩ongest Increasing Subsequence(LIS) means a sequence containing some elements in another sequence by the same order, and the values of elements keeps increasing. For example, LIS of {2,1,4,2,3,7,4,6} is {1,2,3,4,6}, and its LIS length is 5. Considering an array with N elements , what is the lowest time and space complexity to get the length of LIS锛?A銆乀ime : N^2 , Space : N^2 B銆乀ime : N^2 , Space : NC銆乀ime : NlogN , Space : N D銆乀ime : N , Space : N E銆乀ime : N , Space : C20銆乄hat is the output of the following piece of C++ code 锛?聽 #include using namespace std; struct Item { char c; Item *next; }; Item *Routine1(Item *x) { Item *prev = NULL, *curr = x; while(curr) { Item *next = curr->next; curr->next = prev; prev = curr; curr = next; } return prev; } void Routine2(Item *x) { Item *curr = x; while(curr) { cout< curr = curr->next; } } int main(void) { Item *x, d = {'d' , NULL}, c = {'c' , &d}, b = {'b' , &c}, a = {'a' , &b}; x = Routine1( &a ); Routine2( x ); return 0; } 聽 A銆?c b a d B銆?b a d c聽 C銆?d b c a聽 D銆?a b c dE銆?d c b a聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-9 22:20:22聽 鍘熸枃閾炬帴 闃呰锛?095 璇勮锛?3聽 鏌ョ湅璇勮 聽[鍘焆Catalan鏁扳€斺€斿崱鐗瑰叞鏁癈atalan鏁扳€斺€斿崱鐗瑰叞鏁奥?浠婂ぉ闃块噷娣樺疂绗旇瘯涓鍒颁袱閬撶粍鍚堟暟瀛﹂锛屾劅瑙夐潪甯镐翰鍒囷紝浣嗘槸绗旇瘯涓け韪帹瀵间笉鍑烘潵 鍚庢潵鏌ヤ簡涓嬶紝鍘熸潵鏄疌atalan鏁般€傛偛鍓у晩锛岀幇鍦ㄦ暣鐞嗕竴涓?涓€銆丆atalan鏁扮殑瀹氫箟浠(1)=1锛孋atalan鏁版弧瓒抽€掑綊寮忥細h(n) = h(1)*h(n-1) + h(2)*h(n-2) + ... + h(n-1)h(1)锛宯>=2璇ラ€掓帹鍏崇郴鐨勮В涓猴細h(n) = C(2n-2,n-1)/n锛宯=1,2,3,...锛堝叾涓瑿(2n-2,n-1)琛ㄧず2n-2涓腑鍙杗-1涓殑缁勫悎鏁帮級 闂鎻忚堪: 12涓珮鐭笉鍚岀殑浜猴紝鎺掓垚涓ゆ帓锛屾瘡鎺掑繀椤绘槸浠庣煯鍒伴珮鎺掑垪锛岃€屼笖绗簩鎺掓瘮瀵瑰簲鐨勭涓€鎺掔殑浜洪珮锛岄棶鎺掑垪鏂瑰紡鏈夊灏戠锛?杩欎釜绗旇瘯棰橈紝寰圷D锛屽洜涓烘妸鏌愪釜閫掓帹鍏崇郴闅愯棌寰楀緢娣便€?闂鍒嗘瀽: 鎴戜滑鍏堟妸杩?2涓汉浠庝綆鍒伴珮鎺掑垪,鐒跺悗,閫夋嫨6涓汉鎺掑湪绗竴鎺?閭d箞鍓╀笅鐨?涓偗瀹氭槸鍦ㄧ浜屾帓. 鐢?琛ㄧず瀵瑰簲鐨勪汉鍦ㄧ涓€鎺?鐢?琛ㄧず瀵瑰簲鐨勪汉鍦ㄧ浜屾帓,閭d箞鍚湁6涓?,6涓?鐨勫簭鍒?灏卞搴斾竴绉嶆柟妗? 姣斿000000111111灏卞搴旂潃 绗竴鎺掞細0 1 2 3 4 5 绗簩鎺掞細6 7 8 9 10 11 010101010101灏卞搴旂潃 绗竴鎺掞細0 2 4 6 8 10 绗簩鎺掞細1 3 5 7 9 11 闂杞崲涓猴紝杩欐牱鐨勬弧瓒虫潯浠剁殑01搴忓垪鏈夊灏戜釜銆?瑙傚療1鐨勫嚭鐜帮紝鎴戜滑鑰冭檻杩欎竴涓嚭鐜拌兘涓嶈兘鏀惧湪绗簩鎺掞紝鏄剧劧锛屽湪杩欎釜1涔嬪墠鍑虹幇鐨勯偅浜?,1瀵瑰簲鐨勪汉 瑕佷箞鏄湪杩欎釜1宸﹁竟锛岃涔堟槸鍦ㄨ繖涓?鍓嶉潰銆傝€岃偗瀹氳鏈変竴涓?鐨勶紝鍦ㄨ繖涓?鍓嶉潰锛岀粺璁″湪杩欎釜1涔嬪墠鐨?鍜?鐨勪釜鏁般€?涔熷氨鏄姹傦紝0鐨勪釜鏁板ぇ浜?鐨勪釜鏁般€?OK锛岄棶棰樺凡缁忚В鍐炽€?濡傛灉鎶?鐪嬫垚鍏ユ爤鎿嶄綔锛?鐪嬫垚鍑烘爤鎿嶄綔锛屽氨鏄缁欏畾6涓厓绱狅紝鍚堟硶鐨勫叆鏍堝嚭鏍堝簭鍒楁湁澶氬皯涓€?杩欏氨鏄痗atalan鏁?杩欓噷鍙槸鐢ㄤ簬鏍堬紝绛変环鍦版弿杩拌繕鏈夛紝浜屽弶鏍戠殑鏋氫妇銆佸杈瑰舰鍒嗘垚涓夎褰㈢殑涓暟銆佸渾鎷姬鎻掑叆鍏紡涓殑鏂规硶鏁帮紝鍏堕€氶」鏄痗(2n, n)/(n+1). 鍦?<璁$畻鏈虹▼搴忚璁¤壓鏈?>,绗笁鐗?Donald E.Knuth钁?鑻忚繍闇栬瘧,绗竴鍗?508椤?缁欏嚭浜嗚瘉鏄? 闂澶ф剰鏄敤S琛ㄧず鍏ユ爤锛孹琛ㄧず鍑烘爤锛岄偅涔堝悎娉曠殑搴忓垪鏈夊灏戜釜(S鐨勪釜鏁颁负n) 鏄剧劧鏈塩(2n, n)涓惈S锛孹鍚刵涓殑搴忓垪锛屽墿涓嬬殑鏄绠椾笉鍏佽鐨勫簭鍒楁暟(瀹冨寘鍚纭釜鏁扮殑S鍜孹锛屼絾鏄繚鑳屽叾瀹冩潯浠?. 鍦ㄤ换浣曚笉鍏佽鐨勫簭鍒椾腑锛屽畾鍑轰娇寰梄鐨勪釜鏁拌秴杩嘢鐨勪釜鏁扮殑绗竴涓猉鐨勪綅缃€傜劧鍚庡湪瀵艰嚧骞跺寘鎷繖涓猉鐨勯儴鍒嗗簭鍒椾腑锛屼互S浠f浛鎵€鏈夌殑X骞朵互X浠h〃鎵€鏈夌殑S銆傜粨鏋滄槸涓€涓湁(n+1)涓猄鍜?n-1)涓猉鐨勫簭鍒椼€傚弽杩囨潵锛屽涓€鍨竴绉嶇被鍨嬬殑姣忎釜搴忓垪锛屾垜浠兘鑳介€嗚浆杩欎釜杩囩▼锛岃€屼笖鎵惧嚭瀵艰嚧瀹冪殑鍓嶄竴绉嶇被鍨嬬殑涓嶅厑璁稿簭鍒椼€備緥濡俋XSXSSSXXSSS蹇呯劧鏉ヨ嚜SSXSXXXXXSSS銆傝繖涓搴旇鏄庯紝涓嶅厑璁哥殑搴忓垪鐨勪釜鏁版槸c(2n, n-1)锛屽洜姝n = c(2n, n) - c(2n, n-1)銆傞獙璇侊細鍏朵腑F琛ㄧず鍓嶆帓锛孊琛ㄧず鍚庢帓锛屽湪鏋氫妇鍑哄墠鎺掔殑浜轰箣鍚庯紝瀵瑰簲鐨勫氨鏄悗鎺掔殑浜轰簡锛岀劧鍚庡啀楠岃瘉鏄笉鏄弧瓒冲悗闈㈢殑姣斿墠闈㈠搴旂殑浜洪珮鐨勮姹傘€?聽 #include using namespace std; int bit_cnt(int n) { int result = 0; for (; n; n &= n-1, ++result); return result; } int main(void) { int F[6], B[6]; int i,j,k,state,ok,ans = 0; for (state = 0; state < (1 << 12); ++state) { if (bit_cnt(state) == 6) { i = j = 0; for (int k = 0; k < 12; ++k) { if(state&(1< F[i++] = k; else B[j++] = k; } ok = 1; for (k = 0; k < 6; ++k) { if (B[k] < F[k]) { ok = 0; break; } } ans += ok; } } cout << ans << endl; return 0; } 缁撴灉锛?32 鑰宑(12, 6)/7 = 12*11*10*9*8*7/(7*6*5*4*3*2) = 132 娉ㄦ剰锛歝(2n, n)/(n+1) = c(2n, n) - c(2n, n-1) 浼拌鍑洪鐨勪汉涔熻杩?<璁$畻鏈虹▼搴忚壓鏈?>鍚с€?PS锛?鍙︿竴涓緢YD鐨勯棶棰? 鏈夌紪鍙蜂负1鍒皀(n鍙互寰堝ぇ锛屼笉濡ㄥ湪杩欓噷鍋囧畾鍙互杈惧埌10浜?鐨勮嫢骞蹭釜鏍煎瓙锛屼粠宸﹀埌鍙虫帓鍒椼€?鍦ㄦ煇浜涙牸瀛愪腑鏈変竴涓瀛愶紝涓嶅Θ璁剧xi鏍兼湁妫嬪瓙(1<=i<=k, 1<=k<=n) 姣忔涓€涓汉鍙互鎶婁竴涓瀛愬線宸︾Щ鑻ュ共姝ワ紝浣嗘槸涓嶈兘璺ㄨ秺鍏跺畠妫嬪瓙锛屼篃瑕佷繚璇佹瘡涓牸瀛愯嚦澶氬彧鏈変竴涓瀛愩€?涓や釜浜鸿疆娴佺Щ鍔紝绉诲姩涓嶄簡鐨勪负杈擄紝闂厛鎵嬫槸涓嶆槸鏈夊繀鑳滅瓥鐣ャ€?涓夈€丆atalan鏁扮殑鍏稿瀷搴旂敤锛?銆佹嫭鍙峰寲闂銆傜煩闃甸摼涔橈細 P=A1脳A2脳A3脳鈥︹€γ桝n锛屼緷鎹箻娉曠粨鍚堝緥锛屼笉鏀瑰彉鍏堕『搴忥紝鍙敤鎷彿琛ㄧず鎴愬鐨勪箻绉紝璇曢棶鏈夊嚑绉嶆嫭鍙峰寲鐨勬柟妗堬紵聽 聽聽聽聽涓€涓湁n涓猉鍜宯涓猋缁勬垚鐨勫瓧涓诧紝涓旀墍鏈夌殑閮ㄥ垎瀛椾覆鐨嗘弧瓒砐鐨勪釜鏁板ぇ浜庣瓑浜嶻鐨勪釜鏁般€備互涓嬩负闀垮害涓?鐨刣yck words: 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 XXXYYY聽聽聽聽 XYXXYY聽聽聽 XYXYXY聽聽聽 XXYYXY聽聽聽 XXYXYY 聽聽聽 灏嗕笂渚嬬殑X鎹㈡垚宸︽嫭鍙凤紝Y鎹㈡垚鍙虫嫭鍙凤紝Cn琛ㄧず鎵€鏈夊寘鍚玭缁勬嫭鍙风殑鍚堟硶杩愮畻寮忕殑涓暟锛?聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 ((())) 聽 聽 ()(())聽聽聽聽聽 ()()() 聽 聽聽 (())()聽聽聽聽聽 (()()) 2銆佸皢澶氳竟琛屽垝鍒嗕负涓夎褰㈤棶棰樸€傚皢涓€涓嚫澶氳竟褰㈠尯鍩熷垎鎴愪笁瑙掑舰鍖哄煙(鍒掑垎绾夸笉浜ゅ弶)鐨勬柟娉曟暟?聽绫讳技锛氬湪鍦嗕笂閫夋嫨2n涓偣,灏嗚繖浜涚偣鎴愬杩炴帴璧锋潵浣垮緱鎵€寰楀埌鐨刵鏉$嚎娈典笉鐩镐氦鐨勬柟娉曟暟? 3銆佸嚭鏍堟搴忛棶棰樸€備竴涓爤(鏃犵┓澶?鐨勮繘鏍堝簭鍒椾负1銆?銆?銆?..銆乶锛屾湁澶氬皯涓笉鍚岀殑鍑烘爤搴忓垪? 绫讳技锛氭湁2n涓汉鎺掓垚涓€琛岃繘鍏ュ墽鍦恒€傚叆鍦鸿垂5鍏冦€傚叾涓彧鏈塶涓汉鏈変竴寮?鍏冮挒绁紝鍙﹀n浜哄彧鏈?0鍏冮挒绁紝鍓ч櫌鏃犲叾瀹冮挒绁紝闂湁澶氬皯涓柟娉曚娇寰楀彧瑕佹湁10鍏冪殑浜轰拱绁紝鍞エ澶勫氨鏈?鍏冪殑閽炵エ鎵鹃浂锛?灏嗘寔5鍏冭€呭埌杈捐浣滃皢5鍏冨叆鏍堬紝鎸?0鍏冭€呭埌杈捐浣滀娇鏍堜腑鏌?鍏冨嚭鏍?绫讳技锛氫竴浣嶅ぇ鍩庡競鐨勫緥甯堝湪浠栦綇鎵€浠ュ寳n涓鍖哄拰浠ヤ笢n涓鍖哄宸ヤ綔锛屾瘡澶╁ス璧?n涓鍖哄幓涓婄彮銆傚鏋滀粬浠庝笉绌胯秺锛堜絾鍙互纰板埌锛変粠瀹跺埌鍔炲叕瀹ょ殑瀵硅绾匡紝閭d箞鏈夊灏戞潯鍙兘鐨勯亾璺紵 鍒嗘瀽锛氬浜庢瘡涓€涓暟鏉ヨ锛屽繀椤昏繘鏍堜竴娆°€佸嚭鏍堜竴娆°€傛垜浠妸杩涙爤璁句负鐘舵€佲€?鈥欙紝鍑烘爤璁句负鐘舵€佲€?鈥欍€俷涓暟鐨勬墍鏈夌姸鎬佸搴攏涓?鍜宯涓?缁勬垚鐨?n浣嶄簩杩涘埗鏁般€傜敱浜庣瓑寰呭叆鏍堢殑鎿嶄綔鏁版寜鐓?鈥鐨勯『搴忔帓鍒椼€佸叆鏍堢殑鎿嶄綔鏁癰澶т簬绛変簬鍑烘爤鐨勬搷浣滄暟a(a鈮)锛屽洜姝よ緭鍑哄簭鍒楃殑鎬绘暟鐩?鐢卞乏鑰屽彸鎵弿鐢眓涓?鍜宯涓?缁勬垚鐨?n浣嶄簩杩涘埗鏁帮紝1鐨勭疮璁℃暟涓嶅皬浜?鐨勭疮璁℃暟鐨勬柟妗堢鏁般€?/p> 4銆佺粰椤惰妭鐐圭粍鎴愪簩鍙夋爲鐨勯棶棰樸€? 缁欏畾N涓妭鐐癸紝鑳芥瀯鎴愬灏戠褰㈢姸涓嶅悓鐨勪簩鍙夋爲锛? (涓€瀹氭槸浜屽弶鏍戯紒鍏堝幓涓€涓偣浣滀负椤剁偣,鐒跺悗宸﹁竟渚濇鍙互鍙?鑷砃-1涓浉瀵瑰簲鐨?鍙宠竟鏄疦-1鍒?涓?涓や袱閰嶅鐩镐箻,灏辨槸h(0)*h(n-1)聽+聽h(2)*h(n-2)聽+ ...... +聽h(n-1)h(0)=h(n))聽聽 锛堣兘鏋勬垚h锛圢锛変釜锛? 聽聽聽聽聽聽 鍦?n浣嶄簩杩涘埗鏁颁腑濉叆n涓?鐨勬柟妗堟暟涓篶(2n,n)锛屼笉濉?鐨勫叾浣檔浣嶈嚜鍔ㄥ~0銆備粠涓噺鍘讳笉绗﹀悎瑕佹眰锛堢敱宸﹁€屽彸鎵弿锛?鐨勭疮璁℃暟澶т簬1鐨勭疮璁℃暟锛夌殑鏂规鏁板嵆涓烘墍姹傘€?聽聽聽聽聽聽 涓嶇鍚堣姹傜殑鏁扮殑鐗瑰緛鏄敱宸﹁€屽彸鎵弿鏃讹紝蹇呯劧鍦ㄦ煇涓€濂囨暟浣?m+1浣嶄笂棣栧厛鍑虹幇m+1涓?鐨勭疮璁℃暟鍜宮涓?鐨勭疮璁℃暟锛屾鍚庣殑2(n-m)-1浣嶄笂鏈塶-m涓?1鍜宯-m-1涓?銆傚鑻ユ妸鍚庨潰杩?(n-m)-1浣嶄笂鐨?鍜?浜掓崲锛屼娇涔嬫垚涓簄-m涓?鍜宯-m-1涓?锛岀粨鏋滃緱1涓敱n+1涓?鍜宯-1涓?缁勬垚鐨?n浣嶆暟锛屽嵆涓€涓笉鍚堣姹傜殑鏁板搴斾簬涓€涓敱n+1涓?鍜宯-1涓?缁勬垚鐨勬帓鍒椼€?聽聽聽聽聽聽 鍙嶈繃鏉ワ紝浠讳綍涓€涓敱n+1涓?鍜宯-1涓?缁勬垚鐨?n浣嶄簩杩涘埗鏁帮紝鐢变簬0鐨勪釜鏁板2涓紝2n涓哄伓鏁帮紝鏁呭繀鍦ㄦ煇涓€涓鏁颁綅涓婂嚭鐜?鐨勭疮璁℃暟瓒呰繃1鐨勭疮璁℃暟銆傚悓鏍峰湪鍚庨潰閮ㄥ垎0鍜?浜掓崲锛屼娇涔嬫垚涓虹敱n涓?鍜宯涓?缁勬垚鐨?n浣嶆暟锛屽嵆n+1涓?鍜宯-1涓?缁勬垚鐨?n浣嶆暟蹇呭搴斾竴涓笉绗﹀悎瑕佹眰鐨勬暟銆?鍥犺€屼笉鍚堣姹傜殑2n浣嶆暟涓巒锛?涓?锛宯锛?涓?缁勬垚鐨勬帓鍒椾竴涓€瀵瑰簲銆?鏄剧劧锛屼笉绗﹀悎瑕佹眰鐨勬柟妗堟暟涓篶(2n,n+1)銆傜敱姝ゅ緱鍑鸿緭鍑哄簭鍒楃殑鎬绘暟鐩?c(2n,n)-c(2n,n+1)=1/(n+1)*c(2n,n)銆?锛堣繖涓叕寮忕殑涓嬫爣鏄粠h(0)=1寮€濮嬬殑锛?/p> 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-11 16:40:40聽 鍘熸枃閾炬帴 闃呰锛?65 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆杩呴浄2012鏍″洯鎷涜仒绗旇瘯棰?銆佸井鏈轰腑1K瀛楄妭琛ㄧず鐨勪簩杩涘埗浣嶆暟鏄紙锛?A銆?000聽聽聽聽 B銆?X1000聽聽 C銆?024聽聽聽聽 D銆?X1024 2銆佽C璇█涓紝涓€涓猧nt鍨嬫暟鎹湪鍐呭瓨涓崰2涓瓧鑺傦紝鍒檜nsigned int 鍨嬫暟鎹殑鍙栧€艰寖鍥翠负锛堬級 A銆?--- 255聽聽聽聽 B銆?--- 32767聽聽聽聽聽C銆?--- 65535聽聽聽聽 D銆?--- 2147483647 3銆佸湪C璇█涓紝瑕佹眰杩愮畻鏁板繀椤绘槸鏁村瀷鐨勮繍绠楃鏄紙锛?A銆?聽聽聽聽聽B銆?+聽聽聽聽 C銆亅=聽聽聽聽D銆?4銆佷笅闈㈢▼搴忔鐨勮繍琛岀粨鏋滄槸锛堬級 聽 char c[5] = {'a','b','\0','c','\0'}; printf("%s",c);A銆?a"b'聽聽聽聽聽B銆乤b聽聽聽 C銆乤b_c聽聽聽 D銆乤b_c_聽 锛堝叾涓璤琛ㄧず绌烘牸锛壜犅犅犅犅?聽聽 5銆佷笅鍒楀叧浜庢暟缁勭殑鍒濆鍖栨纭殑鏄紙锛?A銆?char str[2] = {"a","b"} B銆?char str[2][3] = {"a","b"} C銆?char str[2][3] = {{'a','b'},{'e','f'},{'g','h'}} D銆?char str[] = {"a","b"} 6銆佸垽鏂瓧绗︿覆a鍜宐鏄惁鐩哥瓑锛屽簲褰撲娇鐢紙锛?A銆乮f(a==b)聽聽聽聽 B銆乮f(a=b)聽聽聽 C銆乮f(strcpy(a,b))聽聽聽聽聽D銆乮f(strcmp(a,b)) 7銆佷竴鐩磇nta[3][4]锛涘垯涓嬪垪鑳借〃绀篴[1][2]鍏冪礌鍊肩殑鏄紙锛?A銆?(*(a+1)+2)聽聽聽 B銆?(a+1+2)聽聽聽 C銆?&a[0]+1)[2]聽聽聽 D銆?(a[0]+1) 8銆佽嫢甯屾湜褰揂鐨勫€间负濂囨暟鏃讹紝琛ㄨ揪寮忕殑鍊间负鐪燂紝A鐨勫€间负鍋舵暟鏃讹紝琛ㄨ揪寮忕殑鍊间负鍋囷紝鍒欎互涓嬩笉鑳芥弧瓒宠姹傜殑琛ㄨ揪寮忔槸锛堬級 A銆丄%2==1聽聽聽聽聽 B銆?锛圓%2==0锛壜犅燙銆?锛圓%2锛壜犅?D銆丄%2 9銆佷互涓嬪摢椤瑰彲浠ョ敤鏉ラ噴鏀?p = malloc() 鍒嗛厤鐨勫唴瀛橈紙锛?A銆乫ree(p)聽聽聽聽 B銆乨elete p聽聽聽 C銆乨elete []p聽聽聽聽聽 D銆乻izeof p 10銆佷笅鍒楁湁鍏抽潤鎬佹垚鍛樺嚱鏁扮殑鎻忚堪涓紝姝g‘鐨勬槸锛堬級 A銆侀潤鎬佹暟鎹垚鍛樺彲浠ュ啀绫讳綋鍐呭垵濮嬪寲 B銆侀潤鎬佹暟鎹垚鍛樹笉鍙互琚被瀵硅薄璋冪敤 C銆侀潤鎬佹暟鎹垚鍛樹笉鍙梡rivate鎺у埗绗︿綔鐢?D銆侀潤鎬佹暟鎹垚鍛樺彲浠ョ洿鎺ョ敤绫诲悕璋冪敤 11銆佹寜e1銆乪2銆乪3銆乪4鐨勬搴忚繘鏍堬紙涓棿鍙兘鏈夊嚭鏍堟搷浣滐紝渚嬪e1杩涙爤鍚庡嚭鏍堬紝e2鍐嶈繘鏍堬級锛屽垯鍙兘鐨勫嚭鏍堝簭鍒楁槸锛堬級A銆乪3銆乪1銆乪4銆乪2聽聽聽聽B銆乪2銆乪4銆乪3銆乪1聽聽聽 C銆乪3銆乪4銆乪1銆乪2聽聽 D銆佷换鎰忓簭鍒?12銆佹煇浜屽弶鏍戠粨鐐圭殑涓簭搴忓垪涓篈銆丅銆丆銆丏銆丒銆丗銆丟锛屽悗搴忓簭鍒椾负B銆丏銆丆銆丄銆丗銆丟銆丒锛岃浜屽弶鏍戝搴旂殑鏍戞灄鍖呮嫭澶氬皯妫垫爲锛堬級 A銆?聽聽聽聽B銆?聽聽聽 C銆?聽聽聽聽 D銆? 13銆佸崟閾捐〃鐨勬瘡涓粨鐐瑰寘鎷竴涓寚閽坙ink锛屽畠鎸囧悜璇ョ粨鐐圭殑鍚庣户缁撶偣锛岀幇瑕佸皢鎸囬拡q鎸囧悜鐨勬柊缁撶偣鎻掑叆鍒版寚閽坧鎸囧悜鐨勫崟閾捐〃缁撶偣涔嬪悗锛屼笅闈㈢殑鎿嶄綔搴忓垪涓摢涓€涓槸姝g‘鐨勶紵 A銆乹 = p->link; p->link = q->link聽 B銆乸->link = q->link; q = p->linkC銆乹->link = p->link; p->link = q D銆乸->link = q; q->link = p->link; 14銆佸嚱鏁板師鍨媣oid fun(int a,int b=5,char c='*')锛涗笅闈㈢殑璋冪敤涓笉鍚堟硶鐨勬槸锛堬級 A銆乫un(4,1)聽聽 B銆乫un(99)聽聽 C銆乫un(11,2,'a')聽聽聽D銆乫un(15,'*') 15銆佷互涓嬪彊杩颁腑涓嶆纭殑鏄紙锛?A銆佸湪涓嶅悓鐨勫嚱鏁颁腑鍙互浣跨敤鐩稿悓鍚嶅瓧鐨勫彉閲?B銆佸嚱鏁颁腑鐨勫舰寮忓弬鏁版槸灞€閮ㄥ彉閲?C銆佸湪涓€涓嚱鏁板唴瀹氫箟鐨勫彉閲忓彧鍦ㄦ湰鍑芥暟鑼冨洿鍐呮湁鏁圖銆佸湪涓€涓嚱鏁板唴鐨勫鍚堣鍙ヤ腑瀹氫箟鐨勫彉閲忓湪鏈嚱鏁拌寖鍥村唴鏈夋晥锛堝彧鍦ㄥ鍚堣鍙ヤ腑鏈夋晥锛?16銆佽鏈変竴涓嬪畯瀹氫箟锛?#define N 3 #define Y(n) ((N+1)*n) 鍒欐墽琛岃鍙ワ細z=2*(N+Y(5+1))鍚庣殑z鍊间负锛堬級 A銆?8聽聽聽聽聽 B銆?2聽聽聽聽聽C銆?8聽聽聽聽聽聽聽聽 D銆?4 17銆佷互涓嬬▼搴忕▼搴忕殑杩愯缁撴灉鏄紙锛?聽 int main(void) { char a[]={"programming"},b[]={"language"}; char *p1,*p2; int i; p1=a,p2=b; for(i=0;i<7;i++) { if(*(p1+i)==*(p2+i)) printf("%c",*(p1+i)); } return 0; }A銆乬m聽聽 B銆乺g聽聽 C銆乷r聽聽聽聽D銆乬a 18銆佽嫢鏈変互涓嬬▼搴忔锛毬?int a[]={4,0,2,3,1},i,j,t; for(i=1;i<5;i++) { t=a[i]; j=i-1; while(j>=0 && t>a[j]) { a[j+1]=a[j]; j--; } a[j+1]=t; }A銆佸鏁扮粍a杩涜鎻掑叆鎺掑簭锛堝崌搴忥級 B銆佸鏁扮粍a杩涜鎻掑叆鎺掑簭锛堥檷搴忥級 C銆佸鏁扮粍a杩涜閫夋嫨鎺掑簭锛堝崌搴忥級 D銆佸鏁扮粍a杩涜閫夋嫨鎺掑簭锛堥檷搴忥級19銆佷互涓嬬▼搴忕殑杈撳嚭缁撴灉鏄紙锛?聽 #define P 3 int F(int x) { return (P*x*x); } void main() { printf("%d\n",F(3+5)); }A銆?9 B銆?92 C銆?9D銆?7 20銆佷互涓嬩唬鐮佷腑锛孉鐨勬瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟鍒嗗埆鎵ц浜嗗嚑娆★紙锛?A *pa = new A[10]; delete []pa; A銆?銆?聽 聽 聽 聽聽B銆?0銆?0聽聽 聽 聽 聽 C銆?銆?0聽 聽 聽 聽 聽 D銆?0銆? 21銆佸湪椤哄簭琛▄3銆?銆?銆?0銆?2銆?5銆?6銆?8銆?1銆?5銆?0}涓紝鐢ㄤ簩鍒嗘硶鏌ユ壘鍏抽敭鐮佸€?1锛屾墍闇€鐨勫叧閿爜姣旇緝娆℃暟鏄紙锛?A銆?聽聽聽聽 B銆?聽聽聽聽聽C銆?聽聽聽聽 D銆? 22銆佽嫢int鍗?涓瓧鑺傦紝char 鍗?涓瓧鑺傦紝float鍗?涓瓧鑺傦紝sizeof(xc)鐨勫ぇ灏忔槸锛堬級 聽 struct stu { union { char b[5]; int bh[2]; }class; char xm[8]; float cj; }xc;A銆?6聽聽聽聽 B銆?8聽聽聽聽C銆?0聽聽聽 D銆?2 23銆佽浜屽弶鏍戞牴缁撶偣鐨勫眰娆′负0锛屼竴妫垫繁搴︼紙楂樺害锛変负k鐨勬弧浜屽弶鏍戝拰鍚屾牱娣卞害鐨勫畬鍏ㄤ簩鍙夋爲鍚勬湁f涓粨鐐瑰拰c涓粨鐐癸紝涓嬪垪鍏崇郴寮忎笉姝g‘鐨勬槸锛堬級 A銆乫 >= c聽聽聽B銆乧 > f聽聽聽聽 C銆乫=2^k+1聽聽聽聽 D銆乧>2k-1 24銆佸叧浜庡紩鐢ㄥ拰鎸囬拡鐨勫尯鍒紝涓嬪垪鍙欒堪閿欒鐨勬槸锛堬級 A銆佸紩鐢ㄥ繀椤诲垵濮嬪寲锛屾寚閽堜笉蹇?B銆佹寚閽堝垵濮嬪寲浠ュ悗涓嶈兘琚敼鍙橈紝寮曠敤鍙互鏀瑰彉鎵€鎸囩殑瀵硅薄 C銆佸垹闄ょ┖鎸囬拡鏄棤瀹崇殑锛屼笉鑳藉垹闄ゅ紩鐢?D銆佷笉瀛樺湪鎸囧悜绌哄€肩殑寮曠敤锛屼絾鏄瓨鍦ㄦ寚鍚戠┖鍊肩殑鎸囬拡 25銆佸睘浜庣綉缁滃眰鍗忚鐨勬槸锛堬級 A銆両P聽聽聽 B銆乀CP聽聽聽 C銆両CMP聽聽聽聽 D銆乆.25 26銆丼TL涓殑鍝缁撴瀯鍦ㄥ鍔犳垚鍛樻椂鍙兘浼氬紩璧峰師鏈夋暟鎹垚鍛樼殑瀛樺偍浣嶇疆鍙戠敓鍙樺姩锛堬級 A銆乵ap聽聽 B銆乻et聽聽聽 C銆乴ist聽聽聽聽D銆乿ector 27銆亀indows娑堟伅璋冨害鏈哄埗鏄紙锛?A銆佹寚浠ら槦鍒椔犅犅?B銆佹寚浠ゅ爢鏍埪犅犅犅燙銆佹秷鎭槦鍒椔犅犅?D銆佹秷鎭爢鏍?28銆佸湪鎺掑簭鏂规硶涓紝鍏抽敭鐮佹瘮杈冩鏁板拰璁板綍鐨勫垵濮嬫帓鍒楁棤鍏崇殑鏄紙锛?A銆丼hell鎺掑簭聽聽聽 B銆佸綊骞舵帓搴徛犅犅犅?C銆佺洿鎺ユ彃鍏ユ帓搴徛犅犅犅燚銆侀€夋嫨鎺掑簭 29銆佸亣璁続涓烘娊璞$被锛屼笅鍒楀0鏄庯紙锛夋槸姝g‘鐨凙銆丄 fun(int );聽聽聽聽B銆丄 *p;聽聽聽 C銆乮nt fun(A)聽聽聽 D銆丄 Obj; 鎶借薄绫讳笉鑳藉畾涔夊璞°€備絾鏄彲浠ヤ綔涓烘寚閽堟垨鑰呭紩鐢ㄧ被鍨嬩娇鐢ㄣ€?30銆佸鏋滅被鐨勫畾涔夊涓嬶紝鍒欎互涓嬩唬鐮佹纭苟涓旀槸鑹ソ缂栫▼椋庢牸鐨勬槸锛堬級 A銆乻td::auto_ptr int find_sec_max(int data[],int count) { int maxnumber = data[0]; int sec_max = MINNUMBER; for(int i = 1;i < count; i++) { if(data[i] > maxnumber) { } else { if(data[i] > sec_max) } } return sec_max; }涓婇潰鐨勪笁涓┖鏍煎渚濇搴旇濉笂锛歴ec_max = maxnumber;聽聽聽聽聽聽 maxnumber = data[i];聽聽聽聽聽聽聽聽 sec_max = data[i];聽 6銆佷笅闈㈢▼搴忓彲浠?....n涓殢鏈鸿緭鍑簃涓笉閲嶅鐨勬暟锛岃濉┖銆?聽 knuth(int n,int m) { srand((unsigned)time(NULL)); for(int i = 0;i < n;i++) { if(_________) { cout< ______________ } } } 鍒嗗埆涓猴細rand()%(n-i) { if(m>n) { while(_________) n++; ______________; prim(m,n); cout< } } void main() { int n = 435234; prim(n,2); }绛旀鍒嗗埆涓猴細m%n聽 鍜?m/=n8銆佺▼搴忔敼閿欍€?聽 int fun(vector { copy(val.begin() , val.end() , ostream_iterator ...... } void main() { int a[5] = {1,2,3,4,5}; vector copy(a , a + 5 , v.begin()); fun(vector prim(n,2); }閿欒鐨勪唬鐮佸拰鏀规鍚庣殑浠g爜鍒嗗埆涓猴細聽 9銆丆++涓璫onst鏈変粈涔堢敤閫旓紙鑷冲皯璇村嚭涓夌锛夛細1銆佷究浜庤繘琛岀被鍨嬫鏌ワ紱2銆佸彲浠ヨ妭鐪佺┖闂撮伩鍏嶄笉蹇呰鐨勫唴瀛樺垎閰嶏紝鎻愰珮浜嗘晥鐜囷紱3銆佷繚鎶よ淇グ鐨勫璞★紝闃叉鎰忓淇敼锛屽寮虹▼搴忕殑鍋ュ.鎬с€?0銆佷笅闈㈢▼搴忕殑鍔熻兘鏄緭鍑烘暟缁勭殑鍏ㄦ帓鍒楋紝璇峰~绌恒€?聽 void perm(int list[],int k,int m) { if(_______) { copy(list,list+m,ostream_iterator cout< return ; } for(int i = k ; i <= m ; ++i) { swap(&list[k] , &list[i]); ______________; swap(&list[k] , &list[i]); } } void main() { int list[] = {1,2,3,4,5}; perm(list,0,sizeof(list)/sizeof(int)-1); }绛旀鍒嗗埆鏄細 k == m 鍜?perm(list , k+1 , m)聽 聽 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-12 16:04:40聽 鍘熸枃閾炬帴 闃呰锛?95 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆const 璇﹁В聽聽聽聽聽 浠婂ぉ鐪嬩簡涓€涓婥++ Primer涓叧浜巆onst鐢ㄦ硶鐨勪粙缁嶏紝璁插緱寰堝ソ锛?鏀剁泭鍖祬锛屼簬鏄仛涓€涓€荤粨锛屾柟渚夸互鍚庡啀娆℃煡鐪嬨€?浣嗘槸c++鍦╟鐨勫熀纭€涓婃柊澧炲姞鐨勫嚑鐐逛紭鍖栦篃鏄緢鑰€鐪肩殑锛屽氨const鐩存帴鍙互鍙栦唬c涓殑#define浠ヤ笅鍑犵偣寰堥噸瑕侊紝瀛︿笉濂藉悗鏋滀篃涔熷緢涓ラ噸銆傘€€涓€銆乧onst鍙橀噺 聽聽聽聽聽聽聽 1銆侀檺瀹氱澹版槑鍙橀噺鍙兘琚 const int i=5锛?int j=0锛?鈥︹€?i=j锛涖€€ //闈炴硶锛屽鑷寸紪璇戦敊璇?j=i锛涖€€ //鍚堟硶 2銆?蹇呴』鍒濆鍖?const int i=5锛涖€€銆€銆€ //鍚堟硶 const int j锛涖€€銆€銆€銆€銆€ //闈炴硶锛屽鑷寸紪璇戦敊璇?3銆佸湪鍙︿竴杩炴帴鏂囦欢涓紩鐢╟onst甯搁噺 extern const int i锛涖€€銆€銆€ //鍚堟硶 extern const int j=10锛涖€€ //闈炴硶锛屽父閲忎笉鍙互琚啀娆¤祴鍊?4銆佷究浜庤繘琛岀被鍨嬫鏌?鐢╟onst鏂规硶鍙互浣跨紪璇戝櫒瀵瑰鐞嗗唴瀹规湁鏇村浜嗚В銆?#define I=10 const long &i=10锛涖€€ /*dapingguo鎻愰啋锛氱敱浜庣紪璇戝櫒鐨勪紭鍖栵紝浣垮緱鍦╟onst long i=10锛?鏃秈涓嶈鍒嗛厤鍐呭瓨锛岃€屾槸宸?0鐩存帴浠e叆浠ュ悗鐨勫紩鐢ㄤ腑锛屼互鑷村湪浠ュ悗鐨勪唬鐮佷腑娌℃湁閿欒锛屼负杈惧埌璇存暀鏁堟灉锛岀壒鍒湴鐢?i鏄庣‘鍦扮粰鍑轰簡i鐨勫唴瀛樺垎閰嶃€備笉杩囦竴鏃︿綘鍏抽棴鎵€鏈変紭鍖栨帾鏂斤紝鍗充娇const long i=10锛涗篃浼氬紩璧峰悗闈㈢殑缂栬瘧閿欒銆?/ char h=I锛涖€€銆€銆€銆€銆€ //娌℃湁閿?char h=i锛涖€€銆€銆€銆€銆€ //缂栬瘧璀﹀憡锛屽彲鑳界敱浜庢暟鐨勬埅鐭甫鏉ラ敊璇祴鍊笺€?5銆佸彲浠ラ伩鍏嶄笉蹇呰鐨勫唴瀛樺垎閰?#define STRING "abcdefghijklmnn" const char string[]="abcdefghijklmn"锛?鈥︹€?printf锛圫TRING锛夛紱銆€ //涓篠TRING鍒嗛厤浜嗙涓€娆″唴瀛?printf锛坰tring锛夛紱銆€ //涓簊tring涓€娆″垎閰嶄簡鍐呭瓨锛屼互鍚庝笉鍐嶅垎閰?鈥︹€?printf锛圫TRING锛夛紱銆€ //涓篠TRING鍒嗛厤浜嗙浜屾鍐呭瓨 printf锛坰tring锛夛紱 鈥︹€?鐢变簬const瀹氫箟甯搁噺浠庢眹缂栫殑瑙掑害鏉ョ湅锛屽彧鏄粰鍑轰簡瀵瑰簲鐨勫唴瀛樺湴鍧€锛岃€屼笉鏄薄#define涓€鏍风粰鍑虹殑鏄珛鍗虫暟锛屾墍浠ワ紝const瀹氫箟鐨勫父閲忓湪绋嬪簭杩愯杩囩▼涓彧鏈変竴浠芥嫹璐濓紝鑰?define瀹氫箟鐨勫父閲忓湪鍐呭瓨涓湁鑻ュ共涓嫹璐濄€?聽聽聽聽聽聽 6銆佸彲浠ラ€氳繃鍑芥暟瀵瑰父閲忚繘琛屽垵濮嬪寲 int value锛堬級锛?const int i=value锛堬級锛?dapingguo璇达細鍋囧畾瀵筊OM缂栧啓绋嬪簭鏃讹紝鐢变簬鐩爣浠g爜鐨勪笉鍙敼鍐欙紝鏈鍙ュ皢浼氭棤鏁堬紝涓嶈繃鍙互鍙橀€氫竴涓嬶細 const int &i=value锛堬級锛?鍙浠鐨勫湴鍧€澶勪簬ROM涔嬪锛屽嵆鍙疄鐜帮細i閫氳繃鍑芥暟鍒濆鍖栵紝鑰屽叾鍊兼湁涓嶄細琚慨鏀广€?7銆佹槸涓嶆槸const鐨勫父閲忓€间竴瀹氫笉鍙互琚慨鏀瑰憿锛?瑙傚療浠ヤ笅涓€娈典唬鐮侊細 const int i=0锛?int *p=锛坕nt*锛?i锛?p=100锛?閫氳繃寮哄埗绫诲瀷杞崲锛屽皢鍦板潃璧嬬粰鍙橀噺锛屽啀浣滀慨鏀瑰嵆鍙互鏀瑰彉const甯搁噺鍊笺€?8銆佽鍒嗘竻鏁板€煎父閲忓拰鎸囬拡甯搁噺锛屼互涓嬪0鏄庨涓虹帺鍛筹細 int ii=0锛?const int i=0锛涖€€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€ //i鏄父閲忥紝i鐨勫€间笉浼氳淇敼 const int *p1i=&i锛涖€€銆€銆€銆€銆€銆€銆€ //鎸囬拡p1i鎵€鎸囧唴瀹规槸甯搁噺锛屽彲浠ヤ笉鍒濆鍖?int銆€ * const p2i=&ii锛涖€€銆€銆€ //鎸囬拡p2i鏄父閲忥紝鎵€鎸囧唴瀹瑰彲淇敼 const int * const p3i=&i锛?//鎸囬拡p3i鏄父閲忥紝鎵€鎸囧唴瀹逛篃鏄父閲?p1i=&ii锛涖€€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€ //鍚堟硶 *p2i=100锛涖€€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€銆€ //鍚堟硶 聽聽 鍦ㄥソ闀夸竴鏀舵鏃堕棿鎴戣const鍥版儜锛岀湅鍒癱onst鍏抽敭瀛楋紝C++绋嬪簭鍛橀鍏堟兂鍒扮殑鍙兘鏄痗onst甯搁噺锛屽鏋滃彧鐭ラ亾鐢╟onst瀹氫箟鏄父閲忥紝閭d箞鐩稿綋浜庢妸鐏嵂浠呯敤浜庡埗浣滈灜鐐€俢onst鏇村ぇ鐨勯瓍鍔涙槸瀹冨彲浠ヤ慨楗板嚱鏁扮殑鍙傛暟銆佽繑鍥炲€硷紝鐢氳嚦鍑芥暟鐨勫畾涔変綋銆傝const淇グ鐨勪笢瑗块兘鍙楀埌寮哄埗淇濇姢锛屽彲浠ラ闃叉剰澶栫殑鍙樺姩锛岃兘鎻愰珮绋嬪簭鐨勫仴澹€с€傛墍浠ュ緢澶欳++绋嬪簭璁捐涔︾睄寤鸿锛?Use const whenever you need"銆?浜屻€乧onst鎴愬憳鍑芥暟 聽聽聽 浠讳綍涓嶄細淇敼鏁版嵁鎴愬憳鐨勫嚱鏁伴兘搴旇澹版槑涓篶onst绫诲瀷銆傚鏋滃湪缂栧啓const鎴愬憳鍑芥暟鏃讹紝涓嶆厧淇敼浜嗘暟鎹垚鍛橈紝鎴栬€呰皟鐢ㄤ簡鍏跺畠闈瀋onst鎴愬憳鍑芥暟锛岀紪璇戝櫒灏嗘寚鍑洪敊璇紝杩欐棤鐤戜細鎻愰珮绋嬪簭鐨勫仴澹€с€備互涓嬬▼搴忎腑锛岀被stack鐨勬垚鍛樺嚱鏁癎etCount浠呯敤浜庤鏁帮紝浠庨€昏緫涓婅GetCount搴斿綋涓篶onst鍑芥暟銆傜紪璇戝櫒灏嗘寚鍑篏etCount鍑芥暟涓殑閿欒銆?聽 class Stack { private: int m_num; int m_data[100]; public: void Push(int elem); int Pop(void); int GetCount(void) const; //const鎴愬憳鍑芥暟 }; int Stack::GetCount(void) const { ++m_num; //缂栬瘧閿欒锛屼紒鍥句慨鏀规暟鎹垚鍛榤_num Pop(); //缂栬瘧閿欒锛屼紒鍥鹃潪const鎴愬憳鍑芥暟 return m_num; }const鎴愬憳鍑芥暟鐨勫0鏄庣湅璧锋潵鎬€殑锛歝onst鍏抽敭瀛楀彧鑳芥斁鍦ㄥ嚱鏁板0鏄庣殑灏鹃儴锛屽ぇ姒傛槸鍥犱负鍏跺畠鍦版柟閮藉凡缁忚鍗犵敤浜嗐€偮?/p> 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-13 20:58:33聽 鍘熸枃閾炬帴 闃呰锛?81 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆C++涓殑鍗曚緥妯″紡聽聽聽聽聽聽聽 鍗曚緥妯″紡涔熺О涓哄崟浠舵ā寮忋€佸崟瀛愭ā寮忥紝鍙兘鏄娇鐢ㄦ渶骞挎硾鐨勮璁℃ā寮忋€傚叾鎰忓浘鏄繚璇佷竴涓被浠呮湁涓€涓疄渚嬶紝骞舵彁渚涗竴涓闂畠鐨勫叏灞€璁块棶鐐癸紝璇ュ疄渚嬭鎵€鏈夌▼搴忔ā鍧楀叡浜€傛湁寰堝鍦版柟闇€瑕佽繖鏍风殑鍔熻兘妯″潡锛屽绯荤粺鐨勬棩蹇楄緭鍑猴紝GUI搴旂敤蹇呴』鏄崟榧犳爣锛孧ODEM鐨勮仈鎺ラ渶瑕佷竴鏉′笖鍙渶瑕佷竴鏉$數璇濈嚎锛屾搷浣滅郴缁熷彧鑳芥湁涓€涓獥鍙g鐞嗗櫒锛屼竴鍙癙C杩炰竴涓敭鐩樸€?聽聽聽聽聽聽 鍗曚緥妯″紡鏈夎澶氱瀹炵幇鏂规硶锛屽湪C++涓紝鐢氳嚦鍙互鐩存帴鐢ㄤ竴涓叏灞€鍙橀噺鍋氬埌杩欎竴鐐癸紝浣嗚繖鏍风殑浠g爜鏄剧殑寰堜笉浼橀泤銆?浣跨敤鍏ㄥ眬瀵硅薄鑳藉淇濊瘉鏂逛究鍦拌闂疄渚嬶紝浣嗘槸涓嶈兘淇濊瘉鍙0鏄庝竴涓璞♀€斺€斾篃灏辨槸璇撮櫎浜嗕竴涓叏灞€瀹炰緥澶栵紝浠嶇劧鑳藉垱寤虹浉鍚岀被鐨勬湰鍦板疄渚嬨€?銆婅璁℃ā寮忋€嬩竴涔︿腑缁欏嚭浜嗕竴绉嶅緢涓嶉敊鐨勫疄鐜帮紝瀹氫箟涓€涓崟渚嬬被锛屼娇鐢ㄧ被鐨勭鏈夐潤鎬佹寚閽堝彉閲忔寚鍚戠被鐨勫敮涓€瀹炰緥锛屽苟鐢ㄤ竴涓叕鏈夌殑闈欐€佹柟娉曡幏鍙栬瀹炰緥銆?聽聽聽聽聽聽 鍗曚緥妯″紡閫氳繃绫绘湰韬潵绠$悊鍏跺敮涓€瀹炰緥锛岃繖绉嶇壒鎬ф彁渚涗簡瑙e喅闂鐨勬柟娉曘€傚敮涓€鐨勫疄渚嬫槸绫荤殑涓€涓櫘閫氬璞★紝浣嗚璁¤繖涓被鏃讹紝璁╁畠鍙兘鍒涘缓涓€涓疄渚嬪苟鎻愪緵瀵规瀹炰緥鐨勫叏灞€璁块棶銆傚敮涓€瀹炰緥绫籗ingleton鍦ㄩ潤鎬佹垚鍛樺嚱鏁颁腑闅愯棌鍒涘缓瀹炰緥鐨勬搷浣溿€備範鎯笂鎶婅繖涓垚鍛樺嚱鏁板彨鍋欼nstance()锛屽畠鐨勮繑鍥炲€兼槸鍞竴瀹炰緥鐨勬寚閽堛€傚畾涔夊涓嬶細 聽 class CSingleton { private: CSingleton() //鏋勯€犲嚱鏁版槸绉佹湁鐨?/p> { } static CSingleton *m_pInstance; public: static CSingleton * GetInstance() { if(m_pInstance == NULL) //鍒ゆ柇鏄惁绗竴娆¤皟鐢?/p> m_pInstance = new CSingleton(); return m_pInstance; } };鐢ㄦ埛璁块棶鍞竴瀹炰緥鐨勬柟娉曞彧鏈塆etInstance()鎴愬憳鍑芥暟銆傚鏋滀笉閫氳繃杩欎釜鍑芥暟锛屼换浣曞垱寤哄疄渚嬬殑灏濊瘯閮藉皢澶辫触锛屽洜涓虹被鐨勬瀯閫犲嚱鏁版槸绉佹湁鐨勩€侴etInstance()浣跨敤鎳掓儼鍒濆鍖栵紝涔熷氨鏄瀹冪殑杩斿洖鍊兼槸褰撹繖涓嚱鏁伴娆¤璁块棶鏃惰鍒涘缓鐨勩€傝繖鏄竴绉嶉槻寮硅璁♀€斺€旀墍鏈塆etInstance()涔嬪悗鐨勮皟鐢ㄩ兘杩斿洖鐩稿悓瀹炰緥鐨勬寚閽堬細聽 CSingleton* p1 = CSingleton :: GetInstance(); CSingleton* p2 = p1->GetInstance(); CSingleton & ref = * CSingleton :: GetInstance(); 瀵笹etInstance绋嶅姞淇敼锛岃繖涓璁℃ā鏉夸究鍙互閫傜敤浜庡彲鍙樺瀹炰緥鎯呭喌锛屽涓€涓被鍏佽鏈€澶氫簲涓疄渚嬨€?聽 鍗曚緥绫籆Singleton鏈変互涓嬬壒寰侊細 瀹冩湁涓€涓寚鍚戝敮涓€瀹炰緥鐨勯潤鎬佹寚閽坢_pInstance锛屽苟涓旀槸绉佹湁鐨勶紱 瀹冩湁涓€涓叕鏈夌殑鍑芥暟锛屽彲浠ヨ幏鍙栬繖涓敮涓€鐨勫疄渚嬶紝骞朵笖鍦ㄩ渶瑕佺殑鏃跺€欏垱寤鸿瀹炰緥锛?瀹冪殑鏋勯€犲嚱鏁版槸绉佹湁鐨勶紝杩欐牱灏变笉鑳戒粠鍒鍒涘缓璇ョ被鐨勫疄渚嬨€?澶у鏁版椂鍊欙紝杩欐牱鐨勫疄鐜伴兘涓嶄細鍑虹幇闂銆傛湁缁忛獙鐨勮鑰呭彲鑳戒細闂紝m_pInstance鎸囧悜鐨勭┖闂翠粈涔堟椂鍊欓噴鏀惧憿锛熸洿涓ラ噸鐨勯棶棰樻槸锛岃瀹炰緥鐨勬瀽鏋勫嚱鏁颁粈涔堟椂鍊欐墽琛岋紵 濡傛灉鍦ㄧ被鐨勬瀽鏋勮涓轰腑鏈夊繀椤荤殑鎿嶄綔锛屾瘮濡傚叧闂枃浠讹紝閲婃斁澶栭儴璧勬簮锛岄偅涔堜笂闈㈢殑浠g爜鏃犳硶瀹炵幇杩欎釜瑕佹眰銆傛垜浠渶瑕佷竴绉嶆柟娉曪紝姝e父鐨勫垹闄よ瀹炰緥銆?鍙互鍦ㄧ▼搴忕粨鏉熸椂璋冪敤GetInstance()锛屽苟瀵硅繑鍥炵殑鎸囬拡鎺夌敤delete鎿嶄綔銆傝繖鏍峰仛鍙互瀹炵幇鍔熻兘锛屼絾涓嶄粎寰堜笐闄嬶紝鑰屼笖瀹规槗鍑洪敊銆傚洜涓鸿繖鏍风殑闄勫姞浠g爜寰堝鏄撹蹇樿锛岃€屼笖涔熷緢闅句繚璇佸湪delete涔嬪悗锛屾病鏈変唬鐮佸啀璋冪敤GetInstance鍑芥暟銆?涓€涓Ε鍠勭殑鏂规硶鏄杩欎釜绫昏嚜宸辩煡閬撳湪鍚堥€傜殑鏃跺€欐妸鑷繁鍒犻櫎锛屾垨鑰呰鎶婂垹闄よ嚜宸辩殑鎿嶄綔鎸傚湪鎿嶄綔绯荤粺涓殑鏌愪釜鍚堥€傜殑鐐逛笂锛屼娇鍏跺湪鎭板綋鐨勬椂鍊欒鑷姩鎵ц銆?鎴戜滑鐭ラ亾锛岀▼搴忓湪缁撴潫鐨勬椂鍊欙紝绯荤粺浼氳嚜鍔ㄦ瀽鏋勬墍鏈夌殑鍏ㄥ眬鍙橀噺銆備簨瀹炰笂锛岀郴缁熶篃浼氭瀽鏋勬墍鏈夌殑绫荤殑闈欐€佹垚鍛樺彉閲忥紝灏卞儚杩欎簺闈欐€佹垚鍛樹篃鏄叏灞€鍙橀噺涓€鏍枫€傚埄鐢ㄨ繖涓壒寰侊紝鎴戜滑鍙互鍦ㄥ崟渚嬬被涓畾涔変竴涓繖鏍风殑闈欐€佹垚鍛樺彉閲忥紝鑰屽畠鐨勫敮涓€宸ヤ綔灏辨槸鍦ㄦ瀽鏋勫嚱鏁颁腑鍒犻櫎鍗曚緥绫荤殑瀹炰緥銆傚涓嬮潰鐨勪唬鐮佷腑鐨凜Garbo绫伙紙Garbo鎰忎负鍨冨溇宸ヤ汉锛夛細class CSingleton { private: CSingleton() { } static CSingleton *m_pInstance; class CGarbo //瀹冪殑鍞竴宸ヤ綔灏辨槸鍦ㄦ瀽鏋勫嚱鏁颁腑鍒犻櫎CSingleton鐨勫疄渚?/p> { public: ~CGarbo() { if(CSingleton::m_pInstance) delete CSingleton::m_pInstance; } }; static CGarbo Garbo; //瀹氫箟涓€涓潤鎬佹垚鍛樺彉閲忥紝绋嬪簭缁撴潫鏃讹紝绯荤粺浼氳嚜鍔ㄨ皟鐢ㄥ畠鐨勬瀽鏋勫嚱鏁?/p> public: static CSingleton * GetInstance() { if(m_pInstance == NULL) //鍒ゆ柇鏄惁绗竴娆¤皟鐢?/p> m_pInstance = new CSingleton(); return m_pInstance; } }; 绫籆Garbo琚畾涔変负CSingleton鐨勭鏈夊唴宓岀被锛屼互闃茶绫昏鍦ㄥ叾浠栧湴鏂规互鐢ㄣ€?绋嬪簭杩愯缁撴潫鏃讹紝绯荤粺浼氳皟鐢–Singleton鐨勯潤鎬佹垚鍛楪arbo鐨勬瀽鏋勫嚱鏁帮紝璇ユ瀽鏋勫嚱鏁颁細鍒犻櫎鍗曚緥鐨勫敮涓€瀹炰緥銆?浣跨敤杩欑鏂规硶閲婃斁鍗曚緥瀵硅薄鏈変互涓嬬壒寰侊細 鍦ㄥ崟渚嬬被鍐呴儴瀹氫箟涓撴湁鐨勫祵濂楃被锛?鍦ㄥ崟渚嬬被鍐呭畾涔夌鏈夌殑涓撻棬鐢ㄤ簬閲婃斁鐨勯潤鎬佹垚鍛橈紱 鍒╃敤绋嬪簭鍦ㄧ粨鏉熸椂鏋愭瀯鍏ㄥ眬鍙橀噺鐨勭壒鎬э紝閫夋嫨鏈€缁堢殑閲婃斁鏃舵満锛?浣跨敤鍗曚緥鐨勪唬鐮佷笉闇€瑕佷换浣曟搷浣滐紝涓嶅繀鍏冲績瀵硅薄鐨勯噴鏀俱€?杩涗竴姝ョ殑璁ㄨ浣嗘槸娣诲姞涓€涓被鐨勯潤鎬佸璞★紝鎬绘槸璁╀汉涓嶅お婊℃剰锛屾墍浠ユ湁浜虹敤濡備笅鏂规硶鏉ラ噸鐜板疄鐜板崟渚嬪拰瑙e喅瀹冪浉搴旂殑闂锛屼唬鐮佸涓嬶細 聽 class CSingleton { private: CSingleton() //鏋勯€犲嚱鏁版槸绉佹湁鐨?/p> { } public: static CSingleton & GetInstance() { static CSingleton instance; //灞€閮ㄩ潤鎬佸彉閲?/p> return instance; } };浣跨敤灞€閮ㄩ潤鎬佸彉閲忥紝闈炲父寮哄ぇ鐨勬柟娉曪紝瀹屽叏瀹炵幇浜嗗崟渚嬬殑鐗规€э紝鑰屼笖浠g爜閲忔洿灏戯紝涔熶笉鐢ㄦ媴蹇冨崟渚嬮攢姣佺殑闂銆?浣嗕娇鐢ㄦ绉嶆柟娉曚篃浼氬嚭鐜伴棶棰橈紝褰撳涓嬫柟娉曚娇鐢ㄥ崟渚嬫椂闂鏉ヤ簡锛?Singleton singleton = Singleton :: GetInstance(); 杩欎箞鍋氬氨鍑虹幇浜嗕竴涓被鎷疯礉鐨勯棶棰橈紝杩欏氨杩濊儗浜嗗崟渚嬬殑鐗规€с€備骇鐢熻繖涓棶棰樺師鍥犲湪浜庯細缂栬瘧鍣ㄤ細涓虹被鐢熸垚涓€涓粯璁ょ殑鏋勯€犲嚱鏁帮紝鏉ユ敮鎸佺被鐨勬嫹璐濄€傛渶鍚庢病鏈夊姙娉曪紝鎴戜滑瑕佺姝㈢被鎷疯礉鍜岀被璧嬪€硷紝绂佹绋嬪簭鍛樼敤杩欑鏂瑰紡鏉ヤ娇鐢ㄥ崟渚嬶紝褰撴椂棰嗗鐨勬剰鎬濇槸GetInstance()鍑芥暟杩斿洖涓€涓寚閽堣€屼笉鏄繑鍥炰竴涓紩鐢紝鍑芥暟鐨勪唬鐮佹敼涓哄涓嬶細 聽 class CSingleton { private: CSingleton() //鏋勯€犲嚱鏁版槸绉佹湁鐨?/p> { } public: static CSingleton * GetInstance() { static CSingleton instance; //灞€閮ㄩ潤鎬佸彉閲?/p> return &instance; } }; 浣嗘垜鎬昏鐨勪笉濂斤紝涓轰粈涔堜笉璁╃紪璇戝櫒涓嶈繖涔堝共鍛€傝繖鏃舵垜鎵嶆兂璧峰彲浠ユ樉绀虹殑鐢熷懡绫绘嫹璐濈殑鏋勯€犲嚱鏁帮紝鍜岄噸杞?= 鎿嶄綔绗︼紝鏂扮殑鍗曚緥绫诲涓嬶細 聽 class CSingleton { private: CSingleton() //鏋勯€犲嚱鏁版槸绉佹湁鐨?/p> { } CSingleton(const CSingleton &); CSingleton & operator = (const CSingleton &); public: static CSingleton & GetInstance() { static CSingleton instance; //灞€閮ㄩ潤鎬佸彉閲?/p> return instance; } };鍏充簬Singleton(const Singleton);鍜?Singleton & operate = (const Singleton&);鍑芥暟锛岄渶瑕佸0鏄庢垚绉佹湁鐨勶紝骞朵笖鍙0鏄庝笉瀹炵幇銆傝繖鏍凤紝濡傛灉鐢ㄤ笂闈㈢殑鏂瑰紡鏉ヤ娇鐢ㄥ崟渚嬫椂锛屼笉绠℃槸鍦ㄥ弸鍏冪被涓繕鏄叾浠栫殑锛岀紪璇戝櫒閮芥槸鎶ラ敊銆?涓嶇煡閬撹繖鏍风殑鍗曚緥绫绘槸鍚﹁繕浼氭湁闂锛屼絾鍦ㄧ▼搴忎腑杩欐牱瀛愪娇鐢ㄥ凡缁忓熀鏈病鏈夐棶棰樹簡銆偮?聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-14 10:08:40聽 鍘熸枃閾炬帴 闃呰锛?13 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆瀛楃涓茬殑鍏ㄦ帓鍒楀拰缁勫悎绠楁硶鍏ㄦ帓鍒楀湪绗旇瘯闈㈣瘯涓緢鐑棬锛屽洜涓哄畠闅惧害閫備腑锛屾棦鍙互鑰冨療閫掑綊瀹炵幇锛屽張鑳借繘涓€姝ヨ€冨療闈為€掑綊鐨勫疄鐜帮紝渚夸簬鍖哄垎鍑鸿€冪敓鐨勬按骞炽€傛墍浠ュ湪鐧惧害鍜岃繀闆风殑鏍″洯鎷涜仒浠ュ強绋嬪簭鍛樺拰杞欢璁捐甯堢殑鑰冭瘯涓兘鑰冨埌浜嗭紝鍥犳鏈枃瀵瑰叏鎺掑垪浣滀笅鎬荤粨甯姪澶у鏇村ソ鐨勫涔犲拰鐞嗚В銆傚鏈枃鏈変换浣曡ˉ鍏呬箣澶勶紝娆㈣繋澶у鎸囧嚭銆?棣栧厛鏉ョ湅鐪嬮鐩槸濡備綍瑕佹眰鐨勶紙鐧惧害杩呴浄鏍℃嫑绗旇瘯棰橈級銆?涓€銆佸瓧绗︿覆鐨勬帓鍒?鐢–++鍐欎竴涓嚱鏁? 濡?Foo(const char *str), 鎵撳嵃鍑?str 鐨勫叏鎺掑垪, 濡?abc 鐨勫叏鎺掑垪: abc, acb, bca, dac, cab, cba涓€銆佸叏鎺掑垪鐨勯€掑綊瀹炵幇 涓烘柟渚胯捣瑙侊紝鐢?23鏉ョず渚嬩笅銆?23鐨勫叏鎺掑垪鏈?23銆?32銆?13銆?31銆?12銆?21杩欏叚绉嶃€傞鍏堣€冭檻213鍜?21杩欎簩涓暟鏄浣曞緱鍑虹殑銆傛樉鐒惰繖浜屼釜閮芥槸123涓殑1涓庡悗闈袱鏁颁氦鎹㈠緱鍒扮殑銆傜劧鍚庡彲浠ュ皢123鐨勭浜屼釜鏁板拰姣忎笁涓暟浜ゆ崲寰楀埌132銆傚悓鐞嗗彲浠ユ牴鎹?13鍜?21鏉ュ緱231鍜?12銆傚洜姝ゅ彲浠ョ煡閬撯€斺€斿叏鎺掑垪灏辨槸浠庣涓€涓暟瀛楄捣姣忎釜鏁板垎鍒笌瀹冨悗闈㈢殑鏁板瓧浜ゆ崲銆傛壘鍒拌繖涓寰嬪悗锛岄€掑綊鐨勪唬鐮佸氨寰堝鏄撳啓鍑烘潵浜嗭細 聽 #include using namespace std; #include void Permutation(char* pStr, char* pBegin) { assert(pStr && pBegin); if(*pBegin == '\0') printf("%s\n",pStr); else { for(char* pCh = pBegin; *pCh != '\0'; pCh++) { swap(*pBegin,*pCh); Permutation(pStr, pBegin+1); swap(*pBegin,*pCh); } } } int main(void) { char str[] = "abc"; Permutation(str,str); return 0; } 鍙﹀涓€绉嶅啓娉曪細 聽 //k琛ㄧず褰撳墠閫夊彇鍒扮鍑犱釜鏁帮紝m琛ㄧず鍏辨湁澶氬皯涓暟 void Permutation(char* pStr,int k,int m) { assert(pStr); if(k == m) { static int num = 1; //灞€閮ㄩ潤鎬佸彉閲忥紝鐢ㄦ潵缁熻鍏ㄦ帓鍒楃殑涓暟 printf("绗?d涓帓鍒梊t%s\n",num++,pStr); } else { for(int i = k; i <= m; i++) { swap(*(pStr+k),*(pStr+i)); Permutation(pStr, k + 1 , m); swap(*(pStr+k),*(pStr+i)); } } } int main(void) { char str[] = "abc"; Permutation(str , 0 , strlen(str)-1); return 0; }濡傛灉瀛楃涓蹭腑鏈夐噸澶嶅瓧绗︾殑璇濓紝涓婇潰鐨勯偅涓柟娉曡偗瀹氫笉浼氱鍚堣姹傜殑锛屽洜姝ょ幇鍦ㄨ鎯冲姙娉曟潵鍘绘帀閲嶅鐨勬暟鍒椼€?浜屻€佸幓鎺夐噸澶嶇殑鍏ㄦ帓鍒楃殑閫掑綊瀹炵幇 鐢变簬鍏ㄦ帓鍒楀氨鏄粠绗竴涓暟瀛楄捣姣忎釜鏁板垎鍒笌瀹冨悗闈㈢殑鏁板瓧浜ゆ崲銆傛垜浠厛灏濊瘯鍔犱釜杩欐牱鐨勫垽鏂€斺€斿鏋滀竴涓暟涓庡悗闈㈢殑鏁板瓧鐩稿悓閭d箞杩欎簩涓暟灏变笉浜ゆ崲浜嗐€傚122锛岀涓€涓暟涓庡悗闈氦鎹㈠緱212銆?21銆傜劧鍚?22涓浜屾暟灏变笉鐢ㄤ笌绗笁涓暟浜ゆ崲浜嗭紝浣嗗212锛屽畠绗簩涓暟涓庣涓変釜鏁版槸涓嶇浉鍚岀殑锛屼氦鎹箣鍚庡緱鍒?21銆備笌鐢?22涓涓€涓暟涓庣涓変釜鏁颁氦鎹㈡墍寰楃殑221閲嶅浜嗐€傛墍浠ヨ繖涓柟娉曚笉琛屻€?鎹㈢鎬濈淮锛屽122锛岀涓€涓暟1涓庣浜屼釜鏁?浜ゆ崲寰楀埌212锛岀劧鍚庤€冭檻绗竴涓暟1涓庣涓変釜鏁?浜ゆ崲锛屾鏃剁敱浜庣涓変釜鏁扮瓑浜庣浜屼釜鏁帮紝鎵€浠ョ涓€涓暟涓嶅啀涓庣涓変釜鏁颁氦鎹€傚啀鑰冭檻212锛屽畠鐨勭浜屼釜鏁颁笌绗笁涓暟浜ゆ崲鍙互寰楀埌瑙e喅221銆傛鏃跺叏鎺掑垪鐢熸垚瀹屾瘯銆?杩欐牱鎴戜滑涔熷緱鍒颁簡鍦ㄥ叏鎺掑垪涓幓鎺夐噸澶嶇殑瑙勫垯鈥斺€斿幓閲嶇殑鍏ㄦ帓鍒楀氨鏄粠绗竴涓暟瀛楄捣姣忎釜鏁板垎鍒笌瀹冨悗闈㈤潪閲嶅鍑虹幇鐨勬暟瀛椾氦鎹€備笅闈㈢粰鍑哄畬鏁翠唬鐮侊細#include using namespace std; #include //鍦╗nBegin,nEnd)鍖洪棿涓槸鍚︽湁瀛楃涓庝笅鏍囦负pEnd鐨勫瓧绗︾浉绛?/p> bool IsSwap(char* pBegin , char* pEnd) { char *p; for(p = pBegin ; p < pEnd ; p++) { if(*p == *pEnd) return false; } return true; } void Permutation(char* pStr , char *pBegin) { assert(pStr); if(*pBegin == '\0') { static int num = 1; //灞€閮ㄩ潤鎬佸彉閲忥紝鐢ㄦ潵缁熻鍏ㄦ帓鍒楃殑涓暟 printf("绗?d涓帓鍒梊t%s\n",num++,pStr); } else { for(char *pCh = pBegin; *pCh != '\0'; pCh++) //绗琾Begin涓暟鍒嗗埆涓庡畠鍚庨潰鐨勬暟瀛椾氦鎹㈠氨鑳藉緱鍒版柊鐨勬帓鍒? { if(IsSwap(pBegin , pCh)) { swap(*pBegin , *pCh); Permutation(pStr , pBegin + 1); swap(*pBegin , *pCh); } } } } int main(void) { char str[] = "baa"; Permutation(str , str); return 0; }OK锛屽埌鐜板湪鎴戜滑宸茬粡鑳界啛缁冨啓鍑洪€掑綊鐨勬柟娉曚簡锛屽苟涓旇€冭檻浜嗗瓧绗︿覆涓殑閲嶅鏁版嵁鍙兘寮曞彂鐨勯噸澶嶆暟鍒楅棶棰樸€傞偅涔堝浣曚娇鐢ㄩ潪閫掑綊鐨勬柟娉曟潵寰楀埌鍏ㄦ帓鍒椾簡锛?涓夈€佸叏鎺掑垪鐨勯潪閫掑綊瀹炵幇 瑕佽€冭檻鍏ㄦ帓鍒楃殑闈為€掑綊瀹炵幇锛屽厛鏉ヨ€冭檻濡備綍璁$畻瀛楃涓茬殑涓嬩竴涓帓鍒椼€傚"1234"鐨勪笅涓€涓帓鍒楀氨鏄?1243"銆傚彧瑕佸瀛楃涓插弽澶嶆眰鍑轰笅涓€涓帓鍒楋紝鍏ㄦ帓鍒楃殑涔熷氨杩庡垉鑰岃В浜嗐€?濡備綍璁$畻瀛楃涓茬殑涓嬩竴涓帓鍒椾簡锛熸潵鑰冭檻"926520"杩欎釜瀛楃涓诧紝鎴戜滑浠庡悗鍚戝墠鎵剧涓€鍙岀浉閭荤殑閫掑鏁板瓧锛?20"銆?52"閮芥槸闈為€掑鐨勶紝"26 "鍗虫弧瓒宠姹傦紝绉板墠涓€涓暟瀛?涓烘浛鎹㈡暟锛屾浛鎹㈡暟鐨勪笅鏍囩О涓烘浛鎹㈢偣锛屽啀浠庡悗闈㈡壘涓€涓瘮鏇挎崲鏁板ぇ鐨勬渶灏忔暟锛堣繖涓暟蹇呯劧瀛樺湪锛夛紝0銆?閮戒笉琛岋紝5鍙互锛屽皢5鍜?浜ゆ崲寰楀埌"956220"锛岀劧鍚庡啀灏嗘浛鎹㈢偣鍚庣殑瀛楃涓?6220"棰犲€掑嵆寰楀埌"950226"銆?瀵逛簬鍍忊€?321鈥濊繖绉嶅凡缁忔槸鏈€鈥滃ぇ鈥濈殑鎺掑垪锛岄噰鐢⊿TL涓殑澶勭悊鏂规硶锛屽皢瀛楃涓叉暣涓鍊掑緱鍒版渶鈥滃皬鈥濈殑鎺掑垪"1234"骞惰繑鍥瀎alse銆傝繖鏍凤紝鍙涓€涓惊鐜啀鍔犱笂璁$畻瀛楃涓蹭笅涓€涓帓鍒楃殑鍑芥暟灏卞彲浠ヨ交鏉剧殑瀹炵幇闈為€掑綊鐨勫叏鎺掑垪绠楁硶銆傛寜涓婇潰鎬濊矾骞跺弬鑰僑TL涓殑瀹炵幇婧愮爜锛屼笉闅惧啓鎴愪竴浠借川閲忚緝楂樼殑浠g爜銆傚€煎緱娉ㄦ剰鐨勬槸鍦ㄥ惊鐜墠瑕佸瀛楃涓叉帓搴忎笅锛屽彲浠ヨ嚜宸卞啓蹇€熸帓搴忕殑浠g爜锛堣鍙傞槄銆婄櫧璇濈粡鍏哥畻娉曚箣鍏?蹇€熸帓搴?蹇€熸悶瀹氥€嬶級锛屼篃鍙互鐩存帴浣跨敤VC搴撲腑鐨勫揩閫熸帓搴忓嚱鏁帮紙璇峰弬闃呫€婁娇鐢╒C搴撳嚱鏁颁腑鐨勫揩閫熸帓搴忓嚱鏁般€嬶級銆備笅闈㈠垪鍑哄畬鏁翠唬鐮侊細 聽 #include #include #include using namespace std; #include //鍙嶈浆鍖洪棿 void Reverse(char* pBegin , char* pEnd) { while(pBegin < pEnd) swap(*pBegin++ , *pEnd--); } //涓嬩竴涓帓鍒?/p> bool Next_permutation(char a[]) { assert(a); char *p , *q , *pFind; char *pEnd = a + strlen(a) - 1; if(a == pEnd) return false; p = pEnd; while(p != a) { q = p; p--; if(*p < *q) //鎵鹃檷搴忕殑鐩搁偦2鏁?鍓嶄竴涓暟鍗虫浛鎹㈡暟 { //浠庡悗鍚戝墠鎵炬瘮鏇挎崲鐐瑰ぇ鐨勭涓€涓暟 pFind = pEnd; while(*pFind < *p) --pFind; swap(*p , *pFind); //鏇挎崲鐐瑰悗鐨勬暟鍏ㄩ儴鍙嶈浆 Reverse(q , pEnd); return true; } } Reverse(a , pEnd); //濡傛灉娌℃湁涓嬩竴涓帓鍒?鍏ㄩ儴鍙嶈浆鍚庤繑鍥瀎alse return false; } int cmp(const void *a,const void *b) { return int(*(char *)a - *(char *)b); } int main(void) { char str[] = "bac"; int num = 1; qsort(str , strlen(str),sizeof(char),cmp); do { printf("绗?d涓帓鍒梊t%s\n",num++,str); }while(Next_permutation(str)); return 0; }鑷虫鎴戜滑宸茬粡杩愮敤浜嗛€掑綊涓庨潪閫掑綊鐨勬柟娉曡В鍐充簡鍏ㄦ帓鍒楅棶棰橈紝鎬荤粨涓€涓嬪氨鏄細 1銆佸叏鎺掑垪灏辨槸浠庣涓€涓暟瀛楄捣姣忎釜鏁板垎鍒笌瀹冨悗闈㈢殑鏁板瓧浜ゆ崲銆?2銆佸幓閲嶇殑鍏ㄦ帓鍒楀氨鏄粠绗竴涓暟瀛楄捣姣忎釜鏁板垎鍒笌瀹冨悗闈㈤潪閲嶅鍑虹幇鐨勬暟瀛椾氦鎹€?3銆佸叏鎺掑垪鐨勯潪閫掑綊灏辨槸鐢卞悗鍚戝墠鎵炬浛鎹㈡暟鍜屾浛鎹㈢偣锛岀劧鍚庣敱鍚庡悜鍓嶆壘绗竴涓瘮鏇挎崲鏁板ぇ鐨勬暟涓庢浛鎹㈡暟浜ゆ崲锛屾渶鍚庨鍊掓浛鎹㈢偣鍚庣殑鎵€鏈夋暟鎹€備簩銆佸瓧绗︿覆鐨勭粍鍚?棰樼洰锛氳緭鍏ヤ竴涓瓧绗︿覆锛岃緭鍑鸿瀛楃涓蹭腑瀛楃鐨勬墍鏈夌粍鍚堛€備妇涓緥瀛愶紝濡傛灉杈撳叆abc锛屽畠鐨勭粍鍚堟湁a銆乥銆乧銆乤b銆乤c銆乥c銆乤bc銆?涓婇潰鎴戜滑璇︾粏璁ㄨ浜嗗浣曠敤閫掑綊鐨勬€濊矾姹傚瓧绗︿覆鐨勬帓鍒椼€傚悓鏍凤紝鏈涔熷彲浠ョ敤閫掑綊鐨勬€濊矾鏉ユ眰瀛楃涓茬殑缁勫悎銆?鍋囪鎴戜滑鎯冲湪闀垮害涓簄鐨勫瓧绗︿覆涓眰m涓瓧绗︾殑缁勫悎銆傛垜浠厛浠庡ご鎵弿瀛楃涓茬殑绗竴涓瓧绗︺€傞拡瀵圭涓€涓瓧绗︼紝鎴戜滑鏈変袱绉嶉€夋嫨锛氱涓€鏄妸杩欎釜瀛楃鏀惧埌缁勫悎涓幓锛屾帴涓嬫潵鎴戜滑闇€瑕佸湪鍓╀笅鐨刵-1涓瓧绗︿腑閫夊彇m-1涓瓧绗︼紱绗簩鏄笉鎶婅繖涓瓧绗︽斁鍒扮粍鍚堜腑鍘伙紝鎺ヤ笅鏉ユ垜浠渶瑕佸湪鍓╀笅鐨刵-1涓瓧绗︿腑閫夋嫨m涓瓧绗︺€傝繖涓ょ閫夋嫨閮藉緢瀹规槗鐢ㄩ€掑綊瀹炵幇銆備笅闈㈡槸杩欑鎬濊矾鐨勫弬鑰冧唬鐮侊細#include #include #include using namespace std; #include void Combination(char *string ,int number,vector void Combination(char *string) { assert(string != NULL); vector int i , length = strlen(string); for(i = 1 ; i <= length ; ++i) Combination(string , i ,result); } void Combination(char *string ,int number , vector { assert(string != NULL); if(number == 0) { static int num = 1; printf("绗?d涓粍鍚圽t",num++); vector for( ; iter != result.end() ; ++iter) printf("%c",*iter); printf("\n"); return ; } if(*string == '\0') return ; result.push_back(*string); Combination(string + 1 , number - 1 , result); result.pop_back(); Combination(string + 1 , number , result); } int main(void) { char str[] = "abc"; Combination(str); return 0; } 鐢变簬缁勫悎鍙互鏄?涓瓧绗︾殑缁勫悎锛?涓瓧绗︾殑瀛楃鈥︹€︿竴鐩村埌n涓瓧绗︾殑缁勫悎锛屽洜姝ゅ湪鍑芥暟void Combination(char* string)锛屾垜浠渶瑕佷竴涓猣or寰幆銆傚彟澶栵紝鎴戜滑涓€涓獀ector鏉ュ瓨鏀鹃€夋嫨鏀捐繘缁勫悎閲岀殑瀛楃銆?瀛楃涓插叏鎺掑垪鎵╁睍----鍏殗鍚庨棶棰樎犅犅?棰樼洰锛氬湪8脳8鐨勫浗闄呰薄妫嬩笂鎽嗘斁鍏釜鐨囧悗锛屼娇鍏朵笉鑳界浉浜掓敾鍑伙紝鍗充换鎰忎袱涓殗鍚庝笉寰楀鍦ㄥ悓涓€琛屻€佸悓涓€鍒楁垨鑰呭悓涓€瀵硅鏂滅嚎涓娿€備笅鍥句腑鐨勬瘡涓粦鑹叉牸瀛愯〃绀轰竴涓殗鍚庯紝杩欏氨鏄竴绉嶇鍚堟潯浠剁殑鎽嗘斁鏂规硶銆傝姹傚嚭鎬诲叡鏈夊灏戠鎽嗘硶銆? 聽聽聽 杩欏氨鏄湁鍚嶇殑鍏殗鍚庨棶棰樸€傝В鍐宠繖涓棶棰橀€氬父闇€瑕佺敤閫掑綊锛岃€岄€掑綊瀵圭紪绋嬭兘鍔涚殑瑕佹眰姣旇緝楂樸€傚洜姝ゆ湁涓嶅皯闈㈣瘯瀹橀潚鐫愯繖涓鐩紝鐢ㄦ潵鑰冨療搴旇仒鑰呯殑鍒嗘瀽澶嶆潅闂鐨勮兘鍔涗互鍙婄紪绋嬬殑鑳藉姏銆?鐢变簬鍏釜鐨囧悗鐨勪换鎰忎袱涓笉鑳藉鍦ㄥ悓涓€琛岋紝閭d箞杩欒偗瀹氭槸姣忎竴涓殗鍚庡崰鎹竴琛屻€備簬鏄垜浠彲浠ュ畾涔変竴涓暟缁凜olumnIndex[8]锛屾暟缁勪腑绗琲涓暟瀛楄〃绀轰綅浜庣i琛岀殑鐨囧悗鐨勫垪鍙枫€傚厛鎶奀olumnIndex鐨勫叓涓暟瀛楀垎鍒敤0-7鍒濆鍖栵紝鎺ヤ笅鏉ユ垜浠鍋氱殑浜嬫儏灏辨槸瀵规暟缁凜olumnIndex鍋氬叏鎺掑垪銆傜敱浜庢垜浠槸鐢ㄤ笉鍚岀殑鏁板瓧鍒濆鍖栨暟缁勪腑鐨勬暟瀛楋紝鍥犳浠绘剰涓や釜鐨囧悗鑲畾涓嶅悓鍒椼€傛垜浠彧闇€瑕佸垽鏂緱鍒扮殑姣忎竴涓帓鍒楀搴旂殑鍏釜鐨囧悗鏄笉鏄湪鍚屼竴瀵硅鏂滅嚎涓婏紝涔熷氨鏄暟缁勭殑涓や釜涓嬫爣i鍜宩锛屾槸涓嶆槸i-j==ColumnIndex[i]-Column[j]鎴栬€卝-i==ColumnIndex[i]-ColumnIndex[j]銆?鍏充簬鎺掑垪鐨勮缁嗚璁猴紝璇﹁涓婇潰鐨勮瑙c€?鎺ヤ笅鏉ュ氨鏄啓浠g爜浜嗐€傛€濊矾鎯虫竻妤氫箣鍚庯紝缂栫爜骞朵笉鏄緢闅剧殑浜嬫儏銆備笅闈㈡槸涓€娈靛弬鑰冧唬鐮侊細 聽 #include using namespace std; int g_number = 0; void Permutation(int * , int , int ); void Print(int * , int ); void EightQueen( ) { const int queens = 8; int ColumnIndex[queens]; for(int i = 0 ; i < queens ; ++i) ColumnIndex[i] = i; //鍒濆鍖?/p> Permutation(ColumnIndex , queens , 0); } bool Check(int ColumnIndex[] , int length) { int i,j; for(i = 0 ; i < length; ++i) { for(j = i + 1 ; j < length; ++j) { if( i - j == ColumnIndex[i] - ColumnIndex[j] || j - i == ColumnIndex[i] - ColumnIndex[j]) //鍦ㄦ銆佸壇瀵硅绾夸笂 return false; } } return true; } void Permutation(int ColumnIndex[] , int length , int index) { if(index == length) { if( Check(ColumnIndex , length) ) //妫€娴嬫鐩樺綋鍓嶇殑鐘舵€佹槸鍚﹀悎娉?/p> { ++g_number; Print(ColumnIndex , length); } } else { for(int i = index ; i < length; ++i) //鍏ㄦ帓鍒?/p> { swap(ColumnIndex[index] , ColumnIndex[i]); Permutation(ColumnIndex , length , index + 1); swap(ColumnIndex[index] , ColumnIndex[i]); } } } void Print(int ColumnIndex[] , int length) { printf("%d\n",g_number); for(int i = 0 ; i < length; ++i) printf("%d ",ColumnIndex[i]); printf("\n"); } int main(void) { EightQueen(); return 0; }杞浇锛歨ttp://zhedahht.blog.163.co聽 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-15 11:24:26聽 鍘熸枃閾炬帴 闃呰锛?544 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆C++缁忓吀闈㈣瘯棰?1銆佷互涓嬩笁鏉¤緭鍑鸿鍙ュ垎鍒緭鍑轰粈涔堬紵 聽 char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char* str5 = "abc"; const char* str6 = "abc"; cout << boolalpha << ( str1==str2 ) << endl; // 杈撳嚭浠€涔堬紵 cout << boolalpha << ( str3==str4 ) << endl; // 杈撳嚭浠€涔堬紵 cout << boolalpha << ( str5==str6 ) << endl; // 杈撳嚭浠€涔堬紵 绛旓細鍒嗗埆杈撳嚭false,false,true銆俿tr1鍜宻tr2閮芥槸瀛楃鏁扮粍锛屾瘡涓兘鏈夊叾鑷繁鐨勫瓨鍌ㄥ尯锛屽畠浠殑鍊煎垯鏄悇瀛樺偍鍖洪鍦板潃锛屼笉绛夛紱str3鍜宻tr4鍚屼笂锛屽彧鏄寜const璇箟锛屽畠浠墍鎸囧悜鐨勬暟鎹尯涓嶈兘淇敼銆俿tr5鍜宻tr6骞堕潪鏁扮粍鑰屾槸瀛楃鎸囬拡锛屽苟涓嶅垎閰嶅瓨鍌ㄥ尯锛屽叾鍚庣殑鈥渁bc鈥濅互甯搁噺褰㈠紡瀛樹簬闈欐€佹暟鎹尯锛岃€屽畠浠嚜宸变粎鏄寚鍚戣鍖洪鍦板潃鐨勬寚閽堬紝鎵€浠ョ浉绛夈€?2銆佷笅闈唬鐮佺殑杈撳嚭鏄粈涔堬紵 聽 float a = 1.0f; cout<< (int)a < cout<< (int&)a < cout << boolalpha << ( (int)a==(int&)a ) << endl; // 杈撳嚭浠€涔堬紵 float b = 0.0f; cout<< (int)b < cout<< (int&)b < cout << boolalpha << ( (int)b==(int&)b ) << endl; // 杈撳嚭浠€涔堬紵 娴偣鏁扮殑 1.0f 鍦ㄥ唴瀛橀噷鏄繖鏍疯〃绀虹殑锛毬?0011 1111 1000 0000 00000000 00000000聽 杩欎釜32浣嶄簩杩涘埗鏁拌褰撲綔鏁存暟杈撳嚭灏辨槸锛毬?1065353216聽 鑰屾暣鏁扮殑 1 鍦ㄥ唴瀛橀噷鏄繖鏍疯〃绀虹殑锛毬?0000 0000 0000 0000 00000000 00000001聽 鎵€浠?(int)a != (int&)a聽 娴偣鐨?鍜屾暣鏁扮殑0 鍦ㄥ唴瀛橀噷閮芥槸锛毬?0000 0000 0000 0000 00000000 00000000聽 鎵€浠?(int)b == (int&)b聽 3銆佷互涓嬩唬鐮佷腑鐨勪袱涓猻izeof鐢ㄦ硶鏈夐棶棰樺悧锛?聽 void UpperCase( char str[] ) // 灏唖tr 涓殑灏忓啓瀛楁瘝杞崲鎴愬ぇ鍐欏瓧姣?/p> { for( size_t i=0; i { if( 'a'<=str[i] && str[i]<='z' ) { str[i] -= ('a'-'A' ); } } } int main(void) { char str[] = "aBcDe"; cout << "str瀛楃闀垮害涓? " << sizeof(str)/sizeof(str[0]) << endl; UpperCase( str ); cout << str << endl; return 0; }4銆侀潪C++鍐呭缓鍨嬪埆A鍜孊锛屽湪鍝嚑绉嶆儏鍐典笅B鑳介殣寮忚浆鍖栦负A锛?5銆佷互涓嬩唬鐮佹湁浠€涔堥棶棰橈紵聽 struct Test { Test(int ) { } Test() { } void fun() { } }; int main(void) { Test a(1); a.fun(); Test b(); b.fun(); return 0; }6銆佷互涓嬩唬鐮佹湁浠€涔堥棶棰橈紵 聽 聽 cout<< (true?1:"0") < { unsigned int const size1 = 2; char str1[ size1 ]; unsigned int temp = 0; cin >> temp; unsigned int const size2 = temp; char str2[ size2 ]; return 0; }8銆佷互涓嬪弽鍚戦亶鍘哸rray鏁扮粍鐨勬柟娉曟湁浠€涔堥敊璇紵int main(void) { vector array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 3 ); for( vector::size_type i=array.size()-1; i>=0; --i ) // 鍙嶅悜閬嶅巻array鏁扮粍 { cout << array[i] << endl; } return 0; } 9銆佷互涓嬩唬鐮佷腑鐨勮緭鍑鸿鍙ヨ緭鍑哄悧锛屼负浠€涔堬紵 聽 struct CLS { int m_i; CLS(int i): m_i( i ) { } CLS() { CLS( 0 ); } }; int main(void) { CLS obj; cout << obj.m_i << endl; return 0; }10銆丆++涓殑绌虹被锛岄粯璁や骇鐢熷摢浜涚被鎴愬憳鍑芥暟锛?1銆?浠ヤ笅浠g爜鏈変粈涔堥棶棰樺悧锛?聽 int main(void) { typedef vector IntArray; IntArray array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 2 ); array.push_back( 3 ); // 鍒犻櫎array鏁扮粍涓墍鏈夌殑2 for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor ) { if( 2 == *itor ) { array.erase( itor ); } } return 0; }12銆?鍐欎竴涓嚱鏁帮紝瀹屾垚鍐呭瓨涔嬮棿鐨勬嫹璐濄€俒鑰冭檻闂鏄惁鍏ㄩ潰] 聽 聽 绛旀锛?2銆佸垎鍒緭鍑篺alse鍜宼rue銆傛敞鎰忚浆鎹㈢殑搴旂敤銆?int)a瀹為檯涓婃槸浠ユ诞鐐规暟a涓哄弬鏁版瀯閫犱簡涓€涓暣鍨嬫暟锛岃鏁存暟鐨勫€兼槸锛?int&)a鍒欐槸鍛婅瘔缂栬瘧鍣ㄥ皢a褰撲綔鏁存暟鐪嬶紙骞舵病鏈夊仛浠讳綍瀹炶川涓婄殑杞崲锛夈€傚洜涓轰互鏁存暟褰㈠紡瀛樻斁鍜屼互娴偣褰㈠紡瀛樻斁鍏跺唴瀛樻暟鎹槸涓嶄竴鏍风殑锛屽洜姝や袱鑰呬笉绛夈€傚b鐨勪袱绉嶈浆鎹㈡剰涔夊悓涓婏紝浣嗘槸鐨勬暣鏁板舰寮忓拰娴偣褰㈠紡鍏跺唴瀛樻暟鎹槸涓€鏍风殑锛屽洜姝ゅ湪杩欑鐗规畩鎯呭舰涓嬶紝涓よ€呯浉绛夛紙浠呬粎鍦ㄦ暟鍊兼剰涔変笂锛夈€?聽 娉ㄦ剰锛岀▼搴忕殑杈撳嚭浼氭樉绀?int&)a=1065353216锛岃繖涓€兼槸鎬庝箞鏉ョ殑鍛紵鍓嶉潰宸茬粡璇翠簡锛屼互娴偣鏁板舰寮忓瓨鏀惧湪鍐呭瓨涓紝鎸塱eee754瑙勫畾锛屽叾鍐呭涓簒0000803F锛堝凡鑰冭檻瀛楄妭鍙嶅簭锛夈€傝繖涔熷氨鏄痑杩欎釜鍙橀噺鎵€鍗犳嵁鐨勫唴瀛樺崟鍏冪殑鍊笺€傚綋(int&)a鍑虹幇鏃讹紝瀹冪浉褰撲簬鍛婅瘔瀹冪殑涓婁笅鏂囷細鈥滄妸杩欏潡鍦板潃褰撳仛鏁存暟鐪嬪緟锛佷笉瑕佺瀹冨師鏉ユ槸浠€涔堛€傗€濊繖鏍凤紝鍐呭x0000803F鎸夋暣鏁拌В閲婏紝鍏跺€兼濂藉氨鏄紙鍗佽繘鍒舵暟锛夈€?聽 閫氳繃鏌ョ湅姹囩紪浠g爜鍙互璇佸疄鈥?int)a鐩稿綋浜庨噸鏂版瀯閫犱簡涓€涓€肩瓑浜巃鐨勬暣鍨嬫暟鈥濅箣璇达紝鑰?int&)鐨勪綔鐢ㄥ垯浠呬粎鏄〃杈句簡涓€涓被鍨嬩俊鎭紝鎰忎箟鍦ㄤ簬涓篶out<<鍙?=閫夋嫨姝g‘鐨勯噸杞界増鏈€?3銆佺瓟锛氬嚱鏁板唴鐨剆izeof鏈夐棶棰樸€傛牴鎹娉曪紝sizeof濡傜敤浜庢暟缁勶紝鍙兘娴嬪嚭闈欐€佹暟缁勭殑澶у皬锛屾棤娉曟娴嬪姩鎬佸垎閰嶇殑鎴栧閮ㄦ暟缁勫ぇ灏忋€傚嚱鏁板鐨剆tr鏄竴涓潤鎬佸畾涔夌殑鏁扮粍锛屽洜姝ゅ叾澶у皬涓猴紝鍑芥暟鍐呯殑str瀹為檯鍙槸涓€涓寚鍚戝瓧绗︿覆鐨勬寚閽堬紝娌℃湁浠讳綍棰濆鐨勪笌鏁扮粍鐩稿叧鐨勪俊鎭紝鍥犳sizeof浣滅敤浜庝笂鍙皢鍏跺綋鎸囬拡鐪嬶紝涓€涓寚閽堜负涓瓧鑺傦紝鍥犳杩斿洖銆?4銆佺瓟锛?a. class B : public A { 鈥︹€ // B鍏湁缁ф壙鑷狝锛屽彲浠ユ槸闂存帴缁ф壙鐨?b. class B { operator A( ); } // B瀹炵幇浜嗛殣寮忚浆鍖栦负A鐨勮浆鍖?c. class A { A( const B& ); } // A瀹炵幇浜唍on-explicit鐨勫弬鏁颁负B锛堝彲浠ユ湁鍏朵粬甯﹂粯璁ゅ€肩殑鍙傛暟锛夋瀯閫犲嚱鏁?d. A& operator= ( const A& ); // 璧嬪€兼搷浣滐紝铏戒笉鏄瀹楃殑闅愬紡绫诲瀷杞崲锛屼絾涔熷媺寮虹畻涓€涓?5銆佺瓟锛氬彉閲廱瀹氫箟鍑洪敊銆傛寜榛樿鏋勯€犲嚱鏁板畾涔夊璞★紝涓嶉渶瑕佸姞鎷彿銆?6銆佺瓟锛氫笁鍏冭〃杈惧紡鈥?:鈥濋棶鍙峰悗闈㈢殑涓や釜鎿嶄綔鏁板繀椤讳负鍚屼竴绫诲瀷銆?7銆佺瓟锛歴tr2瀹氫箟鍑洪敊锛宻ize2闈炵紪璇戝櫒鏈熼棿甯搁噺锛岃€屾暟缁勫畾涔夎姹傞暱搴﹀繀椤讳负缂栬瘧鏈熷父閲忋€?8銆佺瓟锛氶鍏堟暟缁勫畾涔夋湁璇紝搴斿姞涓婄被鍨嬪弬鏁帮細vector { vector array.push_back(1); array.push_back(2); array.push_back(3); for(int i = array.size() - 1 ; i >= 0 ; --i) cout< return 0; }9銆佺瓟锛氫笉鑳姐€傚湪榛樿鏋勯€犲嚱鏁板唴閮ㄥ啀璋冪敤甯﹀弬鐨勬瀯閫犲嚱鏁板睘鐢ㄦ埛琛屼负鑰岄潪缂栬瘧鍣ㄨ涓猴紝浜﹀嵆浠呮墽琛屽嚱鏁拌皟鐢紝鑰屼笉浼氭墽琛屽叾鍚庣殑鍒濆鍖栬〃杈惧紡銆傚彧鏈夊湪鐢熸垚瀵硅薄鏃讹紝鍒濆鍖栬〃杈惧紡鎵嶄細闅忕浉搴旂殑鏋勯€犲嚱鏁颁竴璧疯皟鐢ㄣ€?10銆?聽 class Empty { public: Empty(); //缂虹渷鏋勯€犲嚱鏁?/p> Empty(const Empty &); //鎷疯礉鏋勯€犲嚱鏁?/p> ~Empty(); //鏋愭瀯鍑芥暟 Empty & operator=(const Empty &); //璧嬪€艰繍绠楃 Empty* operator&(); //鍙栧潃杩愮畻绗?/p> const Empty* operator&() const; //鍙栧潃杩愮畻绗onst };11銆佺瓟锛氬悓鏍锋湁缂哄皯绫诲瀷鍙傛暟鐨勯棶棰樸€傚彟澶栵紝姣忔璋冪敤鈥渁rray.erase(itor);鈥濓紝琚垹闄ゅ厓绱犱箣鍚庣殑鍐呭浼氳嚜鍔ㄥ線鍓嶇Щ锛屽鑷磋凯浠f紡椤癸紝搴斿湪鍒犻櫎涓€椤瑰悗浣縤tor--锛屼娇涔嬩粠宸茬粡鍓嶇Щ鐨勪笅涓€涓厓绱犺捣缁х画閬嶅巻銆俰nt main(void) { typedef vector IntArray array; array.push_back( 1 ); array.push_back( 2 ); array.push_back( 2 ); array.push_back( 3 ); // 鍒犻櫎array鏁扮粍涓墍鏈夌殑2 for( IntArray::iterator itor=array.begin(); itor!=array.end(); ++itor ) { if( 2 == *itor ) { itor = array.erase( itor ); itor--; } } return 0; } 12銆?聽 // 鍔熻兘锛氱敱src鎵€鎸囧唴瀛樺尯鍩熷鍒禼ount涓瓧鑺傚埌dest鎵€鎸囧唴瀛樺尯鍩熴€?/p> // 璇存槑锛歴rc鍜宒est鎵€鎸囧唴瀛樺尯鍩熷彲浠ラ噸鍙狅紝浣嗗鍒跺悗dest鍐呭浼氳鏇存敼銆傚嚱鏁拌繑鍥炴寚鍚慸est鐨勬寚閽?/p> void *memmove(void *dest , const void *src , size_t count) { assert( (dest != NULL) && (src != NULL)); //瀹夊叏妫€鏌?/p> assert( count > 0 ); char *psrc = (char *) src; char *pdest = (char *) dest; //妫€鏌ユ槸鍚︽湁閲嶅彔闂 if( pdest < psrc ) { //姝e悜鎷疯礉 while( count-- ) *pdest++ = *psrc++; } else if( psrc < pdest ) { //鍙嶅悜鎷疯礉 psrc = psrc + count - 1; pdest = pdest + count - 1; while( count-- ) *pdest-- = *psrc--; } return dest; } // 鍔熻兘锛氱敱src鎸囧悜鍦板潃涓鸿捣濮嬪湴鍧€鐨勮繛缁璶涓瓧鑺傜殑鏁版嵁澶嶅埗鍒颁互dest鎸囧悜鍦板潃涓鸿捣濮嬪湴鍧€鐨勭┖闂村唴銆?/p> // 璇存槑锛歴rc鍜宒est鎵€鎸囧唴瀛樺尯鍩熶笉鑳介噸鍙狅紝鍑芥暟杩斿洖鎸囧悜dest鐨勬寚閽?/p> void *memmcpy(void *dest , const void *src , size_t count) { assert( (dest != NULL) && (src != NULL)); //瀹夊叏妫€鏌?/p> assert( count > 0 ); char *psrc = (char *) src; char *pdest = (char *) dest; while( count-- ) *pdest++ = *psrc++; return dest; } 聽 聽 聽 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-16 20:02:43聽 鍘熸枃閾炬帴 闃呰锛?50 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆娴呰皥C++澶氭€佹€犅犅犅犅犅犅?C++缂栫▼璇█鏄竴娆惧簲鐢ㄥ箍娉涳紝鏀寔澶氱绋嬪簭璁捐鐨勮绠楁満缂栫▼璇█銆傛垜浠粖澶╁氨浼氫负澶у璇︾粏浠嬬粛鍏朵腑C++澶氭€佹€х殑涓€浜涘熀鏈煡璇嗭紝浠ユ柟渚垮ぇ瀹跺湪瀛︿範杩囩▼涓姝よ兘澶熸湁涓€涓厖鍒嗙殑鎺屾彙銆?澶氭€佹€у彲浠ョ畝鍗曞湴姒傛嫭涓衡€滀竴涓帴鍙o紝澶氱鏂规硶鈥濓紝绋嬪簭鍦ㄨ繍琛屾椂鎵嶅喅瀹氳皟鐢ㄧ殑鍑芥暟锛屽畠鏄潰鍚戝璞$紪绋嬮鍩熺殑鏍稿績姒傚康銆傚鎬?polymorphisn)锛屽瓧闈㈡剰鎬濆绉嶅舰鐘躲€?C++澶氭€佹€ф槸閫氳繃铏氬嚱鏁版潵瀹炵幇鐨勶紝铏氬嚱鏁板厑璁稿瓙绫婚噸鏂板畾涔夋垚鍛樺嚱鏁帮紝鑰屽瓙绫婚噸鏂板畾涔夌埗绫荤殑鍋氭硶绉颁负瑕嗙洊(override)锛屾垨鑰呯О涓洪噸鍐欍€傦紙杩欓噷鎴戣寰楄琛ュ厖锛岄噸鍐欑殑璇濆彲浠ユ湁涓ょ锛岀洿鎺ラ噸鍐欐垚鍛樺嚱鏁板拰閲嶅啓铏氬嚱鏁帮紝鍙湁閲嶅啓浜嗚櫄鍑芥暟鐨勬墠鑳界畻浣滄槸浣撶幇浜咰++澶氭€佹€э級鑰岄噸杞藉垯鏄厑璁告湁澶氫釜鍚屽悕鐨勫嚱鏁帮紝鑰岃繖浜涘嚱鏁扮殑鍙傛暟鍒楄〃涓嶅悓锛屽厑璁稿弬鏁颁釜鏁颁笉鍚岋紝鍙傛暟绫诲瀷涓嶅悓锛屾垨鑰呬袱鑰呴兘涓嶅悓銆傜紪璇戝櫒浼氭牴鎹繖浜涘嚱鏁扮殑涓嶅悓鍒楄〃锛屽皢鍚屽悕鐨勫嚱鏁扮殑鍚嶇О鍋氫慨楗帮紝浠庤€岀敓鎴愪竴浜涗笉鍚屽悕绉扮殑棰勫鐞嗗嚱鏁帮紝鏉ュ疄鐜板悓鍚嶅嚱鏁拌皟鐢ㄦ椂鐨勯噸杞介棶棰樸€備絾杩欏苟娌℃湁浣撶幇澶氭€佹€с€?澶氭€佷笌闈炲鎬佺殑瀹炶川鍖哄埆灏辨槸鍑芥暟鍦板潃鏄棭缁戝畾杩樻槸鏅氱粦瀹氥€傚鏋滃嚱鏁扮殑璋冪敤锛屽湪缂栬瘧鍣ㄧ紪璇戞湡闂村氨鍙互纭畾鍑芥暟鐨勮皟鐢ㄥ湴鍧€锛屽苟鐢熶骇浠g爜锛屾槸闈欐€佺殑锛屽氨鏄鍦板潃鏄棭缁戝畾鐨勩€傝€屽鏋滃嚱鏁拌皟鐢ㄧ殑鍦板潃涓嶈兘鍦ㄧ紪璇戝櫒鏈熼棿纭畾锛岄渶瑕佸湪杩愯鏃舵墠纭畾锛岃繖灏卞睘浜庢櫄缁戝畾銆?閭d箞澶氭€佺殑浣滅敤鏄粈涔堝憿锛屽皝瑁呭彲浠ヤ娇寰椾唬鐮佹ā鍧楀寲锛岀户鎵垮彲浠ユ墿灞曞凡瀛樺湪鐨勪唬鐮侊紝浠栦滑鐨勭洰鐨勯兘鏄负浜嗕唬鐮侀噸鐢ㄣ€傝€屽鎬佺殑鐩殑鍒欐槸涓轰簡鎺ュ彛閲嶇敤銆備篃灏辨槸璇达紝涓嶈浼犻€掕繃鏉ョ殑绌剁珶鏄偅涓被鐨勫璞★紝鍑芥暟閮借兘澶熼€氳繃鍚屼竴涓帴鍙h皟鐢ㄥ埌閫傚簲鍚勮嚜瀵硅薄鐨勫疄鐜版柟娉曘€傘€€銆€鏈€甯歌鐨勭敤娉曞氨鏄0鏄庡熀绫荤殑鎸囬拡锛屽埄鐢ㄨ鎸囬拡鎸囧悜浠绘剰涓€涓瓙绫诲璞★紝璋冪敤鐩稿簲鐨勮櫄鍑芥暟锛屽彲浠ユ牴鎹寚鍚戠殑瀛愮被鐨勪笉鍚岃€屽疄鐜颁笉鍚岀殑鏂规硶銆傚鏋滄病鏈変娇鐢ㄨ櫄鍑芥暟鐨勮瘽锛屽嵆娌℃湁鍒╃敤C++澶氭€佹€э紝鍒欏埄鐢ㄥ熀绫绘寚閽堣皟鐢ㄧ浉搴旂殑鍑芥暟鐨勬椂鍊欙紝灏嗘€昏闄愬埗鍦ㄥ熀绫诲嚱鏁版湰韬紝鑰屾棤娉曡皟鐢ㄥ埌瀛愮被涓閲嶅啓杩囩殑鍑芥暟銆傚洜涓烘病鏈夊鎬佹€э紝鍑芥暟璋冪敤鐨勫湴鍧€灏嗘槸涓€瀹氱殑锛岃€屽浐瀹氱殑鍦板潃灏嗗缁堣皟鐢ㄥ埌鍚屼竴涓嚱鏁帮紝杩欏氨鏃犳硶瀹炵幇涓€涓帴鍙o紝澶氱鏂规硶鐨勭洰鐨勪簡銆?绗旇瘯棰樼洰锛?聽 #include using namespace std; class A { public: void foo() { printf("1\n"); } virtual void fun() { printf("2\n"); } }; class B : public A { public: void foo() { printf("3\n"); } void fun() { printf("4\n"); } }; int main(void) { A a; B b; A *p = &a; p->foo(); p->fun(); p = &b; p->foo(); p->fun(); return 0; }聽聽聽聽聽 绗竴涓猵->foo()鍜宲->fuu()閮藉緢濂界悊瑙o紝鏈韩鏄熀绫绘寚閽堬紝鎸囧悜鐨勫張鏄熀绫诲璞★紝璋冪敤鐨勯兘鏄熀绫绘湰韬殑鍑芥暟锛屽洜姝よ緭鍑虹粨鏋滃氨鏄?銆?銆?聽銆€聽 绗簩涓緭鍑虹粨鏋滃氨鏄?銆?銆俻->foo()鍜宲->fuu()鍒欐槸鍩虹被鎸囬拡鎸囧悜瀛愮被瀵硅薄锛屾寮忎綋鐜板鎬佺殑鐢ㄦ硶锛宲->foo()鐢变簬鎸囬拡鏄釜鍩虹被鎸囬拡锛屾寚鍚戞槸涓€涓浐瀹氬亸绉婚噺鐨勫嚱鏁帮紝鍥犳姝ゆ椂鎸囧悜鐨勫氨鍙兘鏄熀绫荤殑foo()鍑芥暟鐨勪唬鐮佷簡锛屽洜姝よ緭鍑虹殑缁撴灉杩樻槸1銆傝€宲->fun()鎸囬拡鏄熀绫绘寚閽堬紝鎸囧悜鐨刦un鏄竴涓櫄鍑芥暟锛岀敱浜庢瘡涓櫄鍑芥暟閮芥湁涓€涓櫄鍑芥暟鍒楄〃锛屾鏃秔璋冪敤fun()骞朵笉鏄洿鎺ヨ皟鐢ㄥ嚱鏁帮紝鑰屾槸閫氳繃铏氬嚱鏁板垪琛ㄦ壘鍒扮浉搴旂殑鍑芥暟鐨勫湴鍧€锛屽洜姝ゆ牴鎹寚鍚戠殑瀵硅薄涓嶅悓锛屽嚱鏁板湴鍧€涔熷皢涓嶅悓锛岃繖閲屽皢鎵惧埌瀵瑰簲鐨勫瓙绫荤殑fun()鍑芥暟鐨勫湴鍧€锛屽洜姝よ緭鍑虹殑缁撴灉涔熶細鏄瓙绫荤殑缁撴灉4銆?绗旇瘯鐨勯鐩腑杩樻湁涓€涓彟绫绘祴璇曟柟娉曘€傚嵆 聽聽聽聽聽聽聽B *ptr = (B *)&a;聽 ptr->foo();聽 ptr->fun(); 闂繖涓よ皟鐢ㄧ殑杈撳嚭缁撴灉銆傝繖鏄竴涓敤瀛愮被鐨勬寚閽堝幓鎸囧悜涓€涓己鍒惰浆鎹负瀛愮被鍦板潃鐨勫熀绫诲璞°€傜粨鏋滐紝杩欎袱鍙ヨ皟鐢ㄧ殑杈撳嚭缁撴灉鏄?锛?銆?骞朵笉鏄緢鐞嗚В杩欑鐢ㄦ硶锛屼粠鍘熺悊涓婃潵瑙i噴锛岀敱浜嶣鏄瓙绫绘寚閽堬紝铏界劧琚祴浜堜簡鍩虹被瀵硅薄鍦板潃锛屼絾鏄痯tr->foo()鍦ㄨ皟鐢ㄧ殑鏃跺€欙紝鐢变簬鍦板潃鍋忕Щ閲忓浐瀹氾紝鍋忕Щ閲忔槸瀛愮被瀵硅薄鐨勫亸绉婚噺锛屼簬鏄嵆浣垮湪鎸囧悜浜嗕竴涓熀绫诲璞$殑鎯呭喌涓嬶紝杩樻槸璋冪敤鍒颁簡瀛愮被鐨勫嚱鏁帮紝铏界劧鍙兘浠庡鍒扮粓閮芥病鏈夊瓙绫诲璞$殑瀹炰緥鍖栧嚭鐜般€?鑰宲tr->fun()鐨勮皟鐢紝鍙兘杩樻槸鍥犱负C++澶氭€佹€х殑鍘熷洜锛岀敱浜庢寚鍚戠殑鏄竴涓熀绫诲璞★紝閫氳繃铏氬嚱鏁板垪琛ㄧ殑寮曠敤锛屾壘鍒颁簡鍩虹被涓璮un()鍑芥暟鐨勫湴鍧€锛屽洜姝よ皟鐢ㄤ簡鍩虹被鐨勫嚱鏁般€傜敱姝ゅ彲瑙佸鎬佹€х殑寮哄ぇ锛屽彲浠ラ€傚簲鍚勭鍙樺寲锛屼笉璁烘寚閽堟槸鍩虹被鐨勮繕鏄瓙绫荤殑锛岄兘鑳芥壘鍒版纭殑瀹炵幇鏂规硶銆?/灏忕粨锛?銆佹湁virtual鎵嶅彲鑳藉彂鐢熷鎬佺幇璞?/p> // 2銆佷笉鍙戠敓澶氭€侊紙鏃爒irtual锛夎皟鐢ㄥ氨鎸夊師绫诲瀷璋冪敤 #include using namespace std; class Base { public: virtual void f(float x) { cout<<"Base::f(float)"<< x < } void g(float x) { cout<<"Base::g(float)"<< x < } void h(float x) { cout<<"Base::h(float)"<< x < } }; class Derived : public Base { public: virtual void f(float x) { cout<<"Derived::f(float)"<< x < } void g(int x) { cout<<"Derived::g(int)"<< x < } void h(float x) { cout<<"Derived::h(float)"<< x < } }; int main(void) { Derived d; Base *pb = &d; Derived *pd = &d; // Good : behavior depends solely on type of the object pb->f(3.14f); // Derived::f(float) 3.14 pd->f(3.14f); // Derived::f(float) 3.14 // Bad : behavior depends on type of the pointer pb->g(3.14f); // Base::g(float) 3.14 pd->g(3.14f); // Derived::g(int) 3 // Bad : behavior depends on type of the pointer pb->h(3.14f); // Base::h(float) 3.14 pd->h(3.14f); // Derived::h(float) 3.14 return 0; }C++绾櫄鍑芥暟 聽涓€銆佸畾涔?聽 绾櫄鍑芥暟鏄湪鍩虹被涓0鏄庣殑铏氬嚱鏁帮紝瀹冨湪鍩虹被涓病鏈夊畾涔夛紝浣嗚姹備换浣曟淳鐢熺被閮借瀹氫箟鑷繁鐨勫疄鐜版柟娉曘€傚湪鍩虹被涓疄鐜扮函铏氬嚱鏁扮殑鏂规硶鏄湪鍑芥暟鍘熷瀷鍚庡姞鈥?0鈥澛?聽 virtual void funtion()=0聽 浜屻€佸紩鍏ュ師鍥?聽聽 1銆佷负浜嗘柟渚夸娇鐢ㄥ鎬佺壒鎬э紝鎴戜滑甯稿父闇€瑕佸湪鍩虹被涓畾涔夎櫄鎷熷嚱鏁般€偮?聽聽 2銆佸湪寰堝鎯呭喌涓嬶紝鍩虹被鏈韩鐢熸垚瀵硅薄鏄笉鍚堟儏鐞嗙殑銆備緥濡傦紝鍔ㄧ墿浣滀负涓€涓熀绫诲彲浠ユ淳鐢熷嚭鑰佽檸銆佸瓟闆€绛夊瓙绫伙紝浣嗗姩鐗╂湰韬敓鎴愬璞℃槑鏄句笉鍚堝父鐞嗐€偮?聽 涓轰簡瑙e喅涓婅堪闂锛屽紩鍏ヤ簡绾櫄鍑芥暟鐨勬蹇碉紝灏嗗嚱鏁板畾涔変负绾櫄鍑芥暟锛堟柟娉曪細virtual ReturnType Function()= 0;锛夛紝鍒欑紪璇戝櫒瑕佹眰鍦ㄦ淳鐢熺被涓繀椤讳簣浠ラ噸鍐欎互瀹炵幇澶氭€佹€с€傚悓鏃跺惈鏈夌函铏氭嫙鍑芥暟鐨勭被绉颁负鎶借薄绫伙紝瀹冧笉鑳界敓鎴愬璞°€傝繖鏍峰氨寰堝ソ鍦拌В鍐充簡涓婅堪涓や釜闂銆?涓夈€佺浉浼兼蹇?聽聽 1銆佸鎬佹€?聽 鎸囩浉鍚屽璞℃敹鍒颁笉鍚屾秷鎭垨涓嶅悓瀵硅薄鏀跺埌鐩稿悓娑堟伅鏃朵骇鐢熶笉鍚岀殑瀹炵幇鍔ㄤ綔銆侰++鏀寔涓ょ澶氭€佹€э細缂栬瘧鏃跺鎬佹€э紝杩愯鏃跺鎬佹€с€偮犅?a銆佺紪璇戞椂澶氭€佹€э細閫氳繃閲嶈浇鍑芥暟瀹炵幇聽 聽 b銆佽繍琛屾椂澶氭€佹€э細閫氳繃铏氬嚱鏁板疄鐜般€偮?聽 2銆佽櫄鍑芥暟聽 聽 铏氬嚱鏁版槸鍦ㄥ熀绫讳腑琚0鏄庝负virtual锛屽苟鍦ㄦ淳鐢熺被涓噸鏂板畾涔夌殑鎴愬憳鍑芥暟锛屽彲瀹炵幇鎴愬憳鍑芥暟鐨勫姩鎬佽鐩栵紙Override锛?聽 3銆佹娊璞$被聽 聽 鍖呭惈绾櫄鍑芥暟鐨勭被绉颁负鎶借薄绫汇€傜敱浜庢娊璞$被鍖呭惈浜嗘病鏈夊畾涔夌殑绾櫄鍑芥暟锛屾墍浠ヤ笉鑳藉畾涔夋娊璞$被鐨勫璞°€偮?聽 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-18 22:45:14聽 鍘熸枃閾炬帴 闃呰锛?53 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆N*N鍖归┈锛孨涓禌閬擄紝姹傚嚭鏈€蹇玁鍖归┈鐨勮В娉曞叆闂ㄧ骇锛?1鍖归┈锛?涓禌閬擄紝涓嶈鏃讹紝鏈€灏戣璧涘嚑鍦哄彲浠ユ眰鍑烘渶蹇洓鍖归┈锛?棣栧厛锛氬垎涓?缁勫垎鍒繘琛屾瘮璧涘悗寰楀埌姣忎竴缁勭殑姣旇禌鍚嶆锛屾瘮璧涘満娆★細9锛?鐒跺悗锛氬皢9缁勭殑姣忕粍绗竴鍚嶆瘮璧涳紝寰楀埌绗竴鍚嶏紝鑲畾鏄墍鏈夐┈鐨勭涓€鍚嶏紱姣旇禌鍦烘锛? 鏈€鍚庯細鍓╀笅椹腑鏈夎祫鏍艰閫愬墠鍥涘悕鐨勯┈鏈堿2銆丄3銆丄4銆丅1銆丅2銆丅3銆丆1銆丆2銆丏1锛屽垰濂芥湁9鍖归┈锛屽湪杩涜涓€鍦烘瘮璧涘氨鍙互浜嗭紝姣旇禌鍦烘锛?鎵€浠ユ渶灏戣繘琛?1鍦烘瘮璧涖€?鎻愰珮绾э細闂鏄繖鏍风殑锛氫竴鍏辨湁25鍖归┈锛屾湁涓€涓禌鍦猴紝璧涘満鏈?涓禌閬擄紝灏辨槸璇存渶澶氬悓鏃跺彲浠ユ湁5鍖归┈涓€璧锋瘮璧涖€傚亣璁炬瘡鍖归┈閮借窇鐨勫緢绋冲畾锛屼笉鐢ㄤ换浣曞叾浠栧伐鍏凤紝鍙€氳繃椹笌椹箣闂寸殑姣旇禌锛岃瘯闂渶灏?寰楁瘮澶氬皯鍦烘墠鑳界煡閬撹窇寰楁渶蹇殑5鍖归┈銆?娉ㄦ剰锛?"鍋囪姣忓尮椹兘璺戠殑寰堢ǔ瀹? 鐨勬剰鎬濇槸鍦ㄤ笂涓€鍦烘瘮璧涗腑A椹瘮B椹揩锛屽垯涓嬩竴鍦烘瘮璧涗腑A椹緷鐒舵瘮B椹揩銆傜◢寰兂涓€涓嬶紝鍙互閲囩敤涓€绉?绔炴爣璧涙帓搴?Tournament Sort)鐨勬€濊矾銆?瑙併€婇€夋嫨鎺掑簭 銆?(1) 棣栧厛灏?5鍖归┈鍒嗘垚5缁勶紝骞跺垎鍒繘琛?鍦烘瘮璧涗箣鍚庡緱鍒扮殑鍚嶆鎺掑垪濡備笅锛?聽聽聽聽聽聽聽聽聽聽聽聽聽 A缁勶細 [A1 A2 A3聽聽 A4 A5] 聽聽聽聽聽聽聽聽聽聽聽聽聽 B缁勶細 [B1 B2 B3聽聽 B4 B5] 聽聽聽聽聽聽聽聽聽聽聽聽聽 C缁勶細 [C1 C2 C3 C4 C5] 聽聽聽聽聽聽聽聽聽聽聽聽聽 D缁勶細 [D1 D2 D3 D4 D5] 聽聽聽聽聽聽聽聽聽聽聽聽聽 E缁勶細 [E1 E2 E3聽聽 E4 E5] 聽聽聽聽聽 鍏朵腑锛屾瘡涓皬缁勬渶蹇殑椹负[A1銆丅1銆丆1銆丏1銆丒1]銆?(2) 灏哰A1銆丅1銆丆1銆丏1銆丒1]杩涜绗?鍦猴紝閫夊嚭绗?鍚嶇殑椹紝涓嶅Θ璁?A1>B1>C1>D1>E1. 姝ゆ椂绗?鍚嶇殑椹负A1銆?(3) 灏哰A2銆丅1銆丆1銆丏1銆丒1]杩涜绗?鍦猴紝姝ゆ椂閫夋嫨鍑烘潵鐨勫繀瀹氭槸绗?鍚嶇殑椹紝涓嶅Θ鍋囪涓築1銆傚洜涓鸿繖5鍖归┈鏄櫎鍘籄1涔嬪姣忎釜灏忕粍褰撳墠鏈€蹇殑椹€?(3) 杩涜绗?鍦猴紝閫夋嫨[A2銆丅2銆丆1銆丏1銆丒1]瑙掗€愬嚭绗?鍚嶇殑椹€?(4) 渚濇绫绘帹锛岀9锛?0鍦哄彲浠ュ垎鍒喅鍑虹4锛?鍚嶇殑鍚椼€?鍥犳锛屼緷鐓ц繖绉嶇珵鏍囪禌鎺掑簭鎬濇兂锛岄渶瑕?0鍦烘瘮璧涙槸涓€瀹氬彲浠ュ彇鍑哄墠5鍚嶇殑銆備粩缁嗘兂涓€涓嬶紝濡傛灉闇€瑕佸噺灏戞瘮璧涘満娆★紝灏变竴瀹氶渶瑕佸湪鏌愪竴娆℃瘮璧涗腑鍚屾椂鍐冲嚭2涓悕娆★紝鑰屼笖姣忎竴鍦烘瘮璧涗箣鍚庯紝鏈変竴浜涗笉鍙兘杩涘叆鍓?鍚嶇殑椹彲浠ユ彁鍓嶅嚭灞€銆?褰撶劧瑕佸仛鍒拌繖涓€鐐癸紝灏卞繀椤诲皬蹇冮€夋嫨姣忎竴鍦烘瘮璧涚殑椹尮銆傛垜浠湪涓婇潰鐨勬柟娉曞熀纭€涓婅繘涓€姝ユ€濊€冭繖涓棶棰橈紝甯屾湜鑳藉寰楀埌瑙e喅銆?(1) 棣栧厛鍒╃敤5鍦烘瘮璧涜閫愬嚭姣忎釜灏忕粍鐨勬帓鍚嶆搴忔槸缁濆蹇呰鐨勩€?(2) 绗?鍦烘瘮璧涢€夊嚭绗?鍚嶇殑椹篃鏄繀涓嶅彲灏戠殑銆傚亣濡備粛鐒舵槸A1椹?A1>B1>C1>D1>E1)銆傞偅涔堟鏃舵垜浠彲浠ュ緱鍒颁竴涓噸瑕佺殑缁撹锛氭湁涓€浜涢┈鍦ㄥ墠6鍦烘瘮璧涗箣鍚庡氨鍐冲畾鍑哄眬鐨勫懡杩愪簡(涓嬮潰钃濊壊瀛椾綋鏍囧織鍑哄眬)銆?聽聽聽聽 A缁勶細 [A1聽 A2聽 A3聽聽 A4聽 A5] 聽聽聽聽 B缁勶細 [B1聽 B2聽聽 B3聽聽 B4聽聽B5聽] 聽聽聽聽 C缁勶細 [C1聽 C2聽 C3 聽聽C4聽 C5聽] 聽聽聽聽 D缁勶細 [D1 D2聽聽D3聽聽 D4聽 D5] 聽聽聽聽 E缁勶細聽 [E1聽聽E2聽 E3聽聽聽 E4聽 E5聽] (3) 绗?鍦烘瘮璧涙槸鍏抽敭锛岃兘鍚﹀悓鏃跺喅鍑虹2锛?鍚嶇殑椹憿锛熸垜浠鍏堝仛涓嬪垎鏋愶細 聽聽聽聽 鍦ㄤ笂闈㈢殑鏂规硶涓紝绗?鍦烘瘮璧沎A2銆丅1銆丆1銆丏1銆丒1]鏄负浜嗗喅瀹氱2鍚嶇殑椹€備絾鏄湪绗?鍦烘瘮璧涗腑鎴戜滑宸茬粡寰楀埌(B1>C1>D1>E1)锛岃瘯闂紵鏈塀1鍦ㄧ殑姣旇禌锛孋1銆丏1銆丒1杩樻湁鍙兘浜夊ず绗?鍚嶅悧锛熉犲綋鐒朵笉鍙兘锛屼篃灏辨槸璇寸2鍚嶅彧鑳藉湪A2銆丅1涓嚭鐜般€傚疄闄呬笂鍙渶瑕?鏉¤窇閬撳氨鍙互鍐冲嚭绗?鍚嶏紝鍓╀笅C1銆丏1銆丒1鐨?鏉¤窇閬撻兘鍙兘鐢ㄦ潵鍑戠儹闂圭殑鍚楋紵 聽聽聽聽 鑳藉浼樺寲鐨勫叧閿嚭鏉ヤ簡锛屾垜浠槸鍚﹁兘澶熼€氳繃鍓╀笅鐨?涓窇閬撴潵鍐冲嚭绗?鍚嶅憿锛熷綋鐒跺彲浠ワ紝鎴戜滑鏉ヨ繘涓€姝ュ垎鏋愮3鍚嶇殑鎯呭喌锛?聽聽聽聽 鈼?濡傛灉A2>B1(鍗崇2鍚嶄负A2)锛岄偅涔堟牴鎹6鍦烘瘮璧涗腑鐨?B1>C1>D1>E1)銆偮犲彲浠ユ柇瀹氱3鍚嶅彧鑳藉湪A3鍜孊1涓骇鐢熴€?聽聽聽聽 鈼?濡傛灉B1>A2(鍗崇2鍚嶄负B1)锛岄偅涔堝彲浠ユ柇瀹氱殑绗?鍚嶅彧鑳藉湪A2銆丅2銆丆1 涓骇鐢熴€?聽聽聽聽 濂戒簡锛岀粨璁轰篃鍑烘潵浜嗭紝鍙鎴戜滑鎶奫A2銆丅1銆丄3銆丅2銆丆1]浣滀负绗?鍦烘瘮璧涚殑椹紝閭d箞杩欏満姣旇禌鐨勭2锛?鍚嶄竴瀹氭槸鏁翠釜25鍖归┈涓殑绗?锛?鍚嶃€?聽聽聽聽 鎴戜滑鍦ㄨ繖閲屽垪涓惧嚭绗?鍦虹殑2锛?鍚嶆鐨勬墍鏈夊彲鑳芥儏鍐碉細 聽聽聽聽 鈶?绗?鍚?A2锛岀3鍚?A3 聽聽聽聽 鈶?绗?鍚?A2锛岀3鍚?B1 聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?A2 聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?B2 聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?C1 (4) 绗?鍦烘瘮璧涘緢澶嶆潅锛屾垜浠鏍规嵁绗?鍦虹殑鎵€鏈夊彲鑳界殑姣旇禌鎯呭喌杩涜鍒嗘瀽銆?聽聽聽聽聽 鈶?绗?鍚?A2锛岀3鍚?A3銆傞偅涔堟绉嶆儏鍐典笅绗?鍚嶅彧鑳藉湪A4鍜孊1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?A4锛岄偅涔堢5鍚嶅彧鑳藉湪A5銆丅1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?B1锛岄偅涔堢5鍚嶅彧鑳藉湪A4銆丅2銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽涓嶇缁撴灉濡備綍锛屾绉嶆儏鍐典笅锛岀4銆?鍚嶉兘鍙互鍦ㄧ8鍦烘瘮璧涗腑鍐冲嚭銆傚叾涓瘮璧涢┈鍖逛负[A4銆丄5銆丅1銆丅2銆丆1] 聽聽聽聽聽 鈶?绗?鍚?A2锛岀3鍚?B1銆傞偅涔堟绉嶆儏鍐典笅绗?鍚嶅彧鑳藉湪A3銆丅2銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?A3锛岄偅涔堢5鍚嶅彧鑳藉湪A4銆丅2銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?B2锛岄偅涔堢5鍚嶅彧鑳藉湪A3銆丅3銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?C1锛岄偅涔堢5鍚嶅彧鑳藉湪A3銆丅2銆丆2銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽閭d箞锛岀4銆?鍚嶉渶瑕佸湪椹尮[A3銆丅2銆丅3銆丆1銆丄4銆丆2銆丏1]涓冨尮椹腑浜х敓锛屽垯蹇呴』姣旇禌涓ゅ満鎵嶈锛屼篃灏辨槸鍒扮9鍦鸿閫愬嚭鍏ㄩ儴鐨勫墠5鍚嶃€?聽聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?A2銆傞偅涔堟绉嶆儏鍐典笅绗?鍚嶅彧鑳藉湪A3銆丅2銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鎯呭喌鍜屸憽涓€鏍凤紝蹇呴』瑙掗€愮9鍦?聽聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?B2銆?閭d箞姝ょ鎯呭喌涓嬬4鍚嶅彧鑳藉湪A2銆丅3銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?A2锛岄偅涔堢5鍚嶅彧鑳藉湪A3銆丅3銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?B3锛岄偅涔堢5鍚嶅彧鑳藉湪A2銆丅4銆丆1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?C1锛岄偅涔堢5鍚嶅彧鑳藉湪A2銆丅3銆丆2銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽聽閭d箞锛岀4銆?鍚嶉渶瑕佸湪椹尮[A2銆丅3銆丅4銆丆1銆丄3銆丆2銆丏1]涓冨尮椹腑浜х敓锛屽垯蹇呴』姣旇禌涓ゅ満鎵嶈锛屼篃灏辨槸鍒扮9鍦鸿閫愬嚭鍏ㄩ儴鐨勫墠5鍚嶃€?聽聽聽聽聽聽聽 鈶?绗?鍚?B1锛岀3鍚?C1銆傞偅涔堟绉嶆儏鍐典笅绗?鍚嶅彧鑳藉湪A2銆丅2銆丆2銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?A2锛岄偅涔堢5鍚嶅彧鑳藉湪A3銆丅2銆丆2銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?B2锛岄偅涔堢5鍚嶅彧鑳藉湪A2銆丅3銆丆2銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?C2锛岄偅涔堢5鍚嶅彧鑳藉湪A2銆丅2銆丆3銆丏1涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽 鈼?濡傛灉绗?鍚?D1锛岄偅涔堢5鍚嶅彧鑳藉湪A2銆丅2銆丆2銆丏2銆丒2涓骇鐢熴€?聽聽聽聽聽聽聽聽聽聽聽聽聽閭d箞锛岀4銆?鍚嶉渶瑕佸湪椹尮[A2銆丅2銆丆2銆丏1銆丄3銆丅3銆丆3銆丏2銆丒1]涔濆尮椹腑浜х敓锛屽洜姝や篃蹇呴』姣旇禌涓ゅ満锛屼篃灏辨槸鍒扮9闀垮喅鍑鸿儨璐熴€傛€荤粨锛氭渶濂芥儏鍐靛彲浠ュ湪绗?鍦鸿閫愬嚭鍓?鍚嶏紝鏈€宸篃鍙互鍦ㄧ9鍦烘悶瀹氥€?/p> 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-20 14:40:08聽 鍘熸枃閾炬帴 闃呰锛?82 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆鍒嗘不绠楁硶姹傛渶杩戠偣瀵?聽聽聽聽聽http://acm.hdu.edu.cn/showproblem.php?pid=1007 聽聽聽聽聽聽聽聽聽鍏堣涓嬮鎰忥紝寰堢畝鍗曪紝缁檔涓偣鐨勫潗鏍囷紝姹傝窛绂绘渶杩戠殑涓€瀵圭偣涔嬮棿璺濈鐨勪竴鍗娿€傜涓€琛屾槸涓€涓暟n琛ㄧず鏈塶涓偣锛屾帴涓嬫潵n琛屾槸n涓偣鐨剎鍧愭爣鍜寉鍧愭爣锛屽疄鏁般€?聽聽聽聽聽 杩欎釜棰樼洰鍏跺疄灏辨槸姹傛渶杩戠偣瀵圭殑璺濈銆傘€婄畻娉曞璁恒€嬩笂鏈夎缁嗚瑙o紝鐜嬫檽涓滅殑涔︿笂涔熸湁浠g爜銆備富瑕佹€濇兂灏辨槸鍒嗘不銆傚厛鎶妌涓偣鎸墄鍧愭爣鎺掑簭锛岀劧鍚庢眰宸﹁竟n/2涓拰鍙宠竟n/2涓殑鏈€杩戣窛绂伙紝鏈€鍚庡悎骞躲€傚悎骞惰閲嶇偣璇翠竴涓嬶紝姣旇緝楹荤儲銆?聽聽聽聽聽 棣栧厛锛屽亣璁剧偣鏄痭涓紝缂栧彿涓?鍒皀銆傛垜浠鍒嗘不姹傦紝鍒欐壘涓€涓腑闂寸殑缂栧彿mid锛屽厛姹傚嚭1鍒癿id鐐圭殑鏈€杩戣窛绂昏涓篸1锛岃繕鏈塵id+1鍒皀鐨勬渶杩戣窛绂昏涓篸2銆傝繖閲岀殑鐐归渶瑕佹寜x鍧愭爣鐨勯『搴忔帓濂斤紝骞朵笖鍋囪杩欎簺鐐逛腑锛屾病鏈?鐐瑰湪鍚屼竴涓綅缃€傦紙鑻ユ湁锛屽垯鐩存帴鏈€灏忚窛绂讳负0浜嗭級銆?聽聽聽聽聽 鐒跺悗锛屼护d涓篸1, d2涓緝灏忕殑閭d釜鐐广€傚鏋滆鏈€杩戠偣瀵逛腑鐨勪袱鐐归兘鍦?-mid闆嗗悎涓紝鎴栬€卪id+1鍒皀闆嗗悎涓紝鍒檇灏辨槸鏈€灏忚窛绂讳簡銆備絾鏄繕鏈夊彲鑳界殑鏄渶杩戠偣瀵逛腑鐨勪袱鐐瑰垎灞炶繖涓や釜闆嗗悎锛屾墍浠ユ垜浠繀椤诲厛妫€娴嬩竴涓嬭繖绉嶆儏鍐垫槸鍚︿細瀛樺湪锛岃嫢瀛樺湪锛屽垯鎶婅繖涓渶杩戠偣瀵圭殑璺濈璁板綍涓嬫潵锛屽幓鏇存柊d銆傝繖鏍锋垜浠氨鍙互寰楅亾鏈€灏忕殑璺濈d浜嗐€?聽聽聽聽聽 鍏抽敭鏄鍘绘娴嬫渶杩戠偣瀵癸紝鐞嗚涓婃瘡涓偣閮借鍜屽闈㈤泦鍚堢殑鐐瑰尮閰嶄竴娆★紝閭f晥鐜囪繕鏄笉鑳芥弧瓒虫垜浠殑瑕佹眰銆傛墍浠ヨ繖閲岃浼樺寲銆傛€庝箞浼樺寲鍛紵鑰冭檻涓€涓嬶紝鍋囧浠ユ垜浠墍閫夌殑鍒嗗壊鐐筸id涓虹晫锛屽鏋滄煇涓€鐐圭殑妯潗鏍囧埌鐐筸id鐨勬í鍧愭爣鐨勭粷瀵瑰€艰秴杩嘾1骞朵笖瓒呰繃d2锛岄偅涔堣繖涓偣鍒癿id鐐圭殑璺濈蹇呯劧瓒呰繃d1鍜宒2涓殑灏忚€咃紝鎵€浠ヨ繖涓偣鍒板鏂归泦鍚堢殑浠绘剰鐐圭殑璺濈蹇呯劧涓嶆槸鎵€鏈夌偣涓渶灏忕殑銆?聽聽聽聽聽 鎵€浠ユ垜浠厛鎶婂湪mid涓虹晫宸﹀彸涓€涓寖鍥村唴鐨勭偣鍏ㄩ儴绛涢€夊嚭鏉ワ紝鏀惧埌涓€涓泦鍚堥噷銆傜瓫閫夊ソ浠ュ悗锛屽綋鐒跺彲浠ユ妸杩欎簺鐐逛袱涓ゆ眰璺濈鍘绘洿鏂癲浜嗭紝涓嶈繃杩欐牱杩樻槸寰堟參锛屼竾涓€婊¤冻鏉′欢鐨勭偣寰堝鍛€傝繖閲岃繕寰楃户缁紭鍖栥€傞鍏堟妸杩欎簺鐐规寜y鍧愭爣鎺掑簭銆傚亣璁炬帓搴忓ソ浠ュ悗鏈塩nt涓偣锛岀紪鍙蜂负0鍒癱nt-1銆傞偅涔堟垜浠敤0鍙峰幓鍜?鍒癱nt-1鍙风殑鐐规眰涓€涓嬭窛绂伙紝鐒跺悗1鍙峰拰2鍒癱nt-1鍙风殑鐐规眰涓€涓嬭窛绂汇€傘€傘€傚鏋滄煇涓や釜鐐箉杞磋窛绂诲凡缁忚秴杩囦簡d锛岃繖娆″惊鐜氨鍙互鐩存帴break浜嗭紝寮€濮嬩粠涓嬩竴涓偣鏌ユ壘浜嗐€?聽 // 鍒嗘不绠楁硶姹傛渶杩戠偣瀵?/p> #include #include #include using namespace std; struct point { double x , y; }p[100005]; int a[100005]; //淇濆瓨绛涢€夌殑鍧愭爣鐐圭殑绱㈠紩 int cmpx(const point &a , const point &b) { return a.x < b.x; } int cmpy(int &a , int &b) //杩欓噷鐢ㄧ殑鏄笅鏍囩储寮?/p> { return p[a].y < p[b].y; } inline double dis(point &a , point &b) { return sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y)); } inline double min(double a , double b) { return a < b ? a : b; } double closest(int low , int high) { if(low + 1 == high) return dis(p[low] , p[high]); if(low + 2 == high) return min(dis(p[low] , p[high]) , min( dis(p[low] , p[low+1]) , dis(p[low+1] , p[high]) )); int mid = (low + high)>>1; double ans = min( closest(low , mid) , closest(mid + 1 , high) ); //鍒嗘不娉曡繘琛岄€掑綊姹傝В int i , j , cnt = 0; for(i = low ; i <= high ; ++i) //鎶妜鍧愭爣鍦╬[mid].x-ans~p[mid].x+ans鑼冨洿鍐呯殑鐐瑰彇鍑烘潵 { if(p[i].x >= p[mid].x - ans && p[i].x <= p[mid].x + ans) a[cnt++] = i; //淇濆瓨鐨勬槸涓嬫爣绱㈠紩 } sort(a , a + cnt , cmpy); //鎸墆鍧愭爣杩涜鍗囧簭鎺掑簭 for(i = 0 ; i < cnt ; ++i) { for(j = i+1 ; j < cnt ; ++j) { if(p[a[j]].y - p[a[i]].y >= ans) //娉ㄦ剰涓嬫爣绱㈠紩 break; ans = min(ans , dis(p[a[i]] , p[a[j]])); } } return ans; } int main(void) { int i,n; while(scanf("%d",&n) != EOF) { if(!n) break; for(i = 0 ; i < n ; ++i) scanf("%lf %lf",&p[i].x,&p[i].y); sort(p , p + n , cmpx); printf("%.2lf\n",closest(0 , n - 1)/2); } return 0; } 鎸夌収y鍊艰繘琛屽崌搴忔帓鍒楀悗锛岃繕鍙互杩涗竴姝ヨ繘琛屼紭鍖栫殑锛屽氨鏄瘡娆¢€夊彇7涓偣灏監K浜嗭紝鍏蜂綋鍘熷洜缂栫▼涔嬬編涓婇潰鏈変粙缁嶇殑銆?聽 for(i = 0 ; i < cnt ; ++i) { int k = (i+7) > cnt ? cnt :(i+7); //鍙閫夊彇鍑?涓偣(璇佹槑杩囩▼娌$湅鎳? for(j = i+1 ; j < k ; ++j) { if(p[a[j]].y - p[a[i]].y >= ans) //娉ㄦ剰涓嬫爣绱㈠紩 break; ans = min(ans , dis(p[a[i]] , p[a[j]])); } } 聽 聽 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-20 17:19:15聽 鍘熸枃閾炬帴 闃呰锛?12 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆瀵绘壘鏈€杩滅偣瀵归棶棰?缁欏畾骞抽潰涓奛涓偣鐨勫潗鏍囷紝鎵惧嚭璺濈鏈€杩滅殑涓や釜鐐广€?鍒嗘瀽 绫讳技浜庘€滄渶杩戠偣瀵归棶棰樷€濓紝杩欎釜闂涔熷彲浠ョ敤鏋氫妇鐨勬柟娉曟眰瑙o紝鏃堕棿澶嶆潅搴(n^2)銆?鈥滃鎵炬渶杩戠偣瀵光€濇槸鐢ㄥ埌鍒嗘不绛栫暐闄嶄綆澶嶆潅搴︼紝鑰屸€滃鎵炬渶杩滅偣瀵光€濆彲鍒╃敤鍑犱綍鎬ц川銆傛敞鎰忓埌锛氬浜庡钩闈笂鏈塶涓偣锛岃繖涓€瀵规渶杩滅偣蹇呯劧瀛樺湪浜庤繖n涓偣鎵€鏋勬垚鐨勪竴涓嚫鍖呬笂锛堣瘉鏄庣暐锛夛紝閭d箞鍙互鎺掗櫎澶ч噺鐐癸紝濡備笅鍥炬墍绀猴細鍦ㄥ緱鍒板嚫鍖呬互鍚庯紝鍙互鍙湪椤剁偣涓婇潰鎵炬渶杩滅偣浜嗐€傚悓鏍凤紝濡傛灉涓峅(n^2)涓や袱鏋氫妇锛屽彲浠ユ兂璞℃湁涓ゆ潯骞宠绾匡紝 鈥滃崱鈥濅綇杩欎釜鍑稿寘锛岀劧鍚庡崱绱х殑鎯呭喌涓嬫棆杞竴鍦堬紝鑲畾灏辫兘鎵惧埌鍑稿寘鐩村緞锛屼篃灏辨壘鍒颁簡鏈€杩滅殑鐐瑰銆傛垨璁歌繖灏辨槸涓哄暐鍙€滄棆杞崱澹虫硶鈥濄€? 鎬荤粨璧锋潵锛岄棶棰樿В鍐虫楠や负锛?1銆佺敤Graham's Scanning姹傚嚫鍖?2銆佺敤Rotating Calipers姹傚嚫鍖呯洿寰勶紝涔熷氨鎵惧埌浜嗘渶杩滅偣瀵广€?璇ョ畻娉曠殑骞冲潎澶嶆潅搴︿负O(nlogn) 銆傛渶鍧忕殑鎯呭喌涓嬶紝濡傛灉杩檔涓偣鏈韩灏辨瀯鎴愪簡涓€涓嚫鍖咃紝鏃堕棿澶嶆潅搴︿负O(n^2)銆傛棆杞崱澹冲彲浠ョ敤浜庢眰鍑稿寘鐨勭洿寰勩€佸搴︼紝涓や釜涓嶇浉浜ゅ嚫鍖呴棿鐨勬渶澶ц窛绂诲拰鏈€灏忚窛绂荤瓑銆傝櫧鐒剁畻娉曠殑鎬濇兂涓嶉毦鐞嗚В锛屼絾鏄疄鐜拌捣鏉ョ湡鐨勫緢瀹规槗璁╀汉鈥滃崱澹斥€濄€? 閫嗗悜鎬濊€冿紝濡傛灉qa锛宷b鏄嚫鍖呬笂鏈€杩滀袱鐐癸紝蹇呯劧鍙互鍒嗗埆杩噏a锛宷b鐢诲嚭涓€瀵瑰钩琛岀嚎銆傞€氳繃鏃嬭浆杩欏骞宠绾匡紝鎴戜滑鍙互璁╁畠鍜屽嚫鍖呬笂鐨勪竴鏉¤竟閲嶅悎,濡傚浘涓摑鑹茬洿绾匡紝鍙互娉ㄦ剰鍒帮紝qa鏄嚫鍖呬笂绂籶鍜宷b鎵€鍦ㄧ洿绾挎渶杩滅殑鐐广€備簬鏄垜浠殑鎬濊矾灏辨槸鏋氫妇鍑稿寘涓婄殑鎵€鏈夎竟锛屽姣忎竴鏉¤竟鎵惧嚭鍑稿寘涓婄璇ヨ竟鏈€杩滅殑椤剁偣锛岃绠楄繖涓《鐐瑰埌璇ヨ竟涓や釜绔偣鐨勮窛绂伙紝骞惰褰曟渶澶х殑鍊笺€傜洿瑙備笂杩欐槸涓€涓狾(n2)鐨勭畻娉曪紝鍜岀洿鎺ユ灇涓句换鎰忎袱涓《鐐逛竴鏍蜂簡銆備絾鏄敞鎰忓埌褰撴垜浠€嗘椂閽堟灇涓捐竟鐨勬椂鍊欙紝鏈€杩滅偣鐨勫彉鍖栦篃鏄€嗘椂閽堢殑锛岃繖鏍峰氨鍙互涓嶇敤浠庡ご璁$畻鏈€杩滅偣锛岃€屽彲浠ョ揣鎺ョ潃涓婁竴娆$殑鏈€杩滅偣缁х画璁$畻锛屼簬鏄垜浠緱鍒颁簡O(n)鐨勭畻娉曘€?http://poj.org/problem?id=2187 聽 // 姹傛渶杩滅偣瀵?/p> #include #include using namespace std; struct point { int x , y; }p[50005]; int top , stack[50005]; // 鍑稿寘鐨勭偣瀛樺湪浜巗tack[]涓?/p> inline double dis(const point &a , const point &b) { return (a.x - b.x)*(a.x - b.x)+(a.y - b.y)*(a.y - b.y); } inline int max(int a , int b) { return a > b ? a : b; } inline int xmult(const point &p1 , const point &p2 , const point &p0) { //璁$畻鍙変箻--绾挎鏃嬭浆鏂瑰悜鍜屽搴旂殑鍥涜竟褰㈢殑闈㈢Н--杩斿洖(p1-p0)*(p2-p0)鍙夌Н //if鍙夌Н涓烘--p0p1鍦╬0p2鐨勯『鏃堕拡鏂瑰悜; if(x==0)鍏辩嚎 return (p1.x-p0.x)*(p2.y-p0.y) - (p1.y-p0.y)*(p2.x-p0.x); } int cmp(const void * a , const void * b) //閫嗘椂閽堟帓搴?杩斿洖姝f暟瑕佷氦鎹?/p> { struct point *p1 = (struct point *)a; struct point *p2 = (struct point *)b; int ans = xmult(*p1 , *p2 , p[0]); //鍚戦噺鍙変箻 if(ans < 0) //p0p1绾挎鍦╬0p2绾挎鐨勪笂鏂癸紝闇€瑕佷氦鎹?/p> return 1; else if(ans == 0 && ( (*p1).x >= (*p2).x)) //鏂滅巼鐩哥瓑鏃讹紝璺濈杩戠殑鐐瑰湪鍏?/p> return 1; else return -1; } void graham(int n) //褰㈡垚鍑稿寘 { qsort(p+1 , n-1 , sizeof(point) , cmp); int i; stack[0] = 0 , stack[1] = 1; top = 1; for(i = 2 ; i < n ; ++i) { while(top > 0 && xmult( p[stack[top]] , p[i] , p[stack[top-1]]) <= 0) top--; //椤烘椂閽堟柟鍚?-鍒犻櫎鏍堥《鍏冪礌 stack[++top] = i; //鏂板厓绱犲叆鏍?/p> } int temp = top; for(i = n-2 ; i >= 0 ; --i) { while(top > temp && xmult(p[stack[top]] , p[i] , p[stack[top-1]]) <= 0) top--; stack[++top] = i; //鏂板厓绱犲叆鏍?/p> } } int rotating_calipers() //鍗″3 { int i , q=1; int ans = 0; stack[top]=0; for(i = 0 ; i < top ; i++) { while( xmult( p[stack[i+1]] , p[stack[q+1]] , p[stack[i]] ) > xmult( p[stack[i+1]] , p[stack[q]] , p[stack[i]] ) ) q = (q+1)%(top); ans = max(ans , max( dis(p[stack[i]] , p[stack[q]]) , dis(p[stack[i+1]] , p[stack[q+1]]))); } return ans; } int main(void) { int i , n , leftdown; while(scanf("%d",&n) != EOF) { leftdown = 0; for(i = 0 ; i < n ; ++i) { scanf("%d %d",&p[i].x,&p[i].y); if(p[i].y < p[leftdown].y || (p[i].y == p[leftdown].y && p[i].x < p[leftdown].x)) //鎵惧埌鏈€宸︿笅瑙掔殑鐐?/p> leftdown = i; } swap(p[0] , p[leftdown]); graham(n); printf("%d\n",rotating_calipers()); } return 0; } 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-21 17:28:38聽 鍘熸枃閾炬帴 闃呰锛?96 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆闅忔満鏁拌寖鍥存墿灞曟柟娉曟€荤粨棰樼洰锛?宸茬煡鏈変釜rand7()鐨勫嚱鏁帮紝杩斿洖1鍒?闅忔満鑷劧鏁帮紝璁╁埄鐢ㄨ繖涓猺and7()鏋勯€爎and10() 闅忔満1~10銆?鍒嗘瀽锛氳淇濊瘉rand10()鍦ㄦ暣鏁?-10鐨勫潎鍖€鍒嗗竷锛屽彲浠ユ瀯閫犱竴涓?-10*n鐨勫潎鍖€鍒嗗竷鐨勯殢鏈烘暣鏁板尯闂达紙n涓轰换浣曟鏁存暟锛夈€傚亣璁緓鏄繖涓?-10*n鍖洪棿涓婄殑涓€涓殢鏈烘暣鏁帮紝閭d箞x%10+1灏辨槸鍧囧寑鍒嗗竷鍦?-10鍖洪棿涓婄殑鏁存暟銆傜敱浜?rand7()-1)*7+rand7()鍙互鏋勯€犲嚭鍧囧寑鍒嗗竷鍦?-49鐨勯殢鏈烘暟锛堝師鍥犺涓嬮潰鐨勮鏄庯級锛屽彲浠ュ皢41锝?9杩欐牱鐨勯殢鏈烘暟鍓旈櫎鎺夛紝寰楀埌鐨勬暟1-40浠嶇劧鏄潎鍖€鍒嗗竷鍦?-40鐨勶紝杩欐槸鍥犱负姣忎釜鏁伴兘鍙互鐪嬫垚涓€涓嫭绔嬩簨浠躲€?涓嬮潰璇存槑涓轰粈涔?rand7()-1)*7+rand7()鍙互鏋勯€犲嚭鍧囧寑鍒嗗竷鍦?-49鐨勯殢鏈烘暟: 棣栧厛rand7()-1寰楀埌涓€涓鏁f暣鏁伴泦鍚坽0锛?锛?锛?锛?锛?锛?}锛屽叾涓瘡涓暣鏁扮殑鍑虹幇姒傜巼閮芥槸1/7銆傞偅涔?rand7()-1)*7寰楀埌涓€涓鏁f暣鏁伴泦鍚圓={0锛?锛?4锛?1锛?8锛?5锛?2}锛屽叾涓瘡涓暣鏁扮殑鍑虹幇姒傜巼涔熼兘鏄?/7銆傝€宺and7()寰楀埌鐨勯泦鍚圔={1锛?锛?锛?锛?锛?锛?}涓瘡涓暣鏁板嚭鐜扮殑姒傜巼涔熸槸1/7銆傛樉鐒堕泦鍚圓鍜孊涓换浣曚袱涓厓绱犵粍鍚堝彲浠ヤ笌1-49涔嬮棿鐨勪竴涓暣鏁颁竴涓€瀵瑰簲锛屼篃灏辨槸璇?-49涔嬮棿鐨勪换浣曚竴涓暟锛屽彲浠ュ敮涓€纭畾A鍜孊涓袱涓厓绱犵殑涓€绉嶇粍鍚堟柟寮忥紝鍙嶈繃鏉ヤ篃鎴愮珛銆傜敱浜嶢鍜孊涓厓绱犲彲浠ョ湅鎴愭槸鐙珛浜嬩欢锛屾牴鎹嫭绔嬩簨浠剁殑姒傜巼鍏紡P(AB)=P(A)P(B)锛屽緱鍒版瘡涓粍鍚堢殑姒傜巼鏄?/7*1/7=1/49銆傚洜姝?rand7()-1)*7+rand7()鐢熸垚鐨勬暣鏁板潎鍖€鍒嗗竷鍦?-49涔嬮棿锛屾瘡涓暟鐨勬鐜囬兘鏄?/49銆?绋嬪簭锛毬?int rand_10() { int x = 0; do { x = 7 * (rand7() - 1) + rand7(); }while(x > 40); return x % 10 + 1; }娉細鐢辨湅鍙嬮棶涓轰粈涔堢敤while(x>40)鑰屼笉鐢╳hile(x>10锛夊憿锛熷師鍥犳槸濡傛灉鐢╳hile(x>10锛夊垯鏈?0/49鐨勬鐜囬渶瑕佸惊鐜痺hile锛屽緢鏈夊彲鑳芥寰幆浜嗐€?闂鎻忚堪 宸茬煡random3()杩欎釜闅忔満鏁颁骇鐢熷櫒鐢熸垚[1, 3]鑼冨洿鐨勯殢鏈烘暟锛岃鐢╮andom3()鏋勯€爎andom5()鍑芥暟锛岀敓鎴怺1, 5]鐨勯殢鏈烘暟锛?闂鍒嗘瀽 濡備綍浠嶽1-3]鑼冨洿鐨勬暟鏋勯€犳洿澶ц寖鍥寸殑鏁板憿锛熷悓鏃舵弧瓒宠繖涓洿澶ц寖鍥寸殑鏁板嚭鐜版鐜囨槸鐩稿悓鐨勶紝鍙互鎯冲埌鐨勮繍绠楀寘鎷袱绉嶏細鍔犳硶鍜屼箻娉?鑰冭檻涓嬮潰鐨勮〃杈惧紡锛?3 * (random3() 鈥?1) + random3(); 鍙互璁$畻寰楀埌涓婅堪琛ㄨ揪寮忕殑鑼冨洿鏄痆1, 9]聽 鑰屼笖鏁扮殑鍑虹幇姒傜巼鏄浉鍚岀殑锛屽嵆1/9 涓嬮潰鑰冭檻濡備綍浠嶽1, 9]鑼冨洿鐨勬暟鐢熸垚[1, 5]鐨勬暟鍛紵 鍙互鎯冲埌鐨勬柟娉曞氨鏄?rejection sampling 鏂规硶锛屽嵆鐢熸垚[1, 9]鐨勯殢鏈烘暟锛屽鏋滄暟鐨勮寖鍥翠笉鍦╗1, 5]鍐咃紝鍒欓噸鏂板彇鏍?瑙e喅鏂规硶聽 int random5() { int val = 0; do { val = 3 * (random3() - 1) + random3(); }while(val > 5); return val; }褰掔撼鎬荤粨 灏嗚繖涓棶棰樿繘涓€姝ユ娊璞★紝宸茬煡random_m()闅忔満鏁扮敓鎴愬櫒鐨勮寖鍥存槸[1, m] 姹俽andom_n()鐢熸垚[1, n]鑼冨洿鐨勫嚱鏁帮紝m < n && n <= m *m 涓€鑸В娉曪細 聽 聽 int random_n() { int val = 0; int t; //t涓簄鐨勬渶澶у€嶆暟锛屼笖婊¤冻t do { val = m * (random_m() - 1) + random_m(); }while(val > t); return val; } 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-22 15:40:08聽 鍘熸枃閾炬帴 闃呰锛?45 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆绛夋鐜囬殢鏈哄嚱鏁扮殑瀹炵幇 棰樼洰锛氬凡鐭ラ殢鏈哄嚱鏁皉and(),浠鐨勬鐜囦骇鐢?锛屼互1-p鐨勬鐜囦骇鐢?锛岀幇鍦ㄨ姹傝璁′竴涓柊鐨勯殢鏈哄嚱鏁皀ewRand(), 浣垮叾浠?/n鐨勭瓑姒傜巼浜х敓1~n涔嬮棿鐨勪换鎰忎竴涓暟銆傝В鍐虫€濊矾锛氬彲浠ラ€氳繃宸茬煡闅忔満鍑芥暟rand()浜х敓绛夋鐜囦骇鐢?鍜?鐨勬柊闅忔満鍑芥暟Rand()锛岀劧鍚庤皟鐢╧锛坘涓烘暣鏁皀鐨勪簩杩涘埗琛ㄧず鐨勪綅鏁帮級娆and()鍑芥暟锛屽緱鍒颁竴涓暱搴︿负k鐨?鍜?搴忓垪锛屼互姝ゅ簭鍒楁墍褰㈡垚鐨勬暣鏁板嵆涓?--n涔嬮棿鐨勬暟瀛椼€傛敞鎰忥細浠庝骇鐢熷簭鍒楀緱鍒扮殑鏁存暟鏈夊彲鑳藉ぇ浜巒锛屽鏋滃ぇ浜巒鐨勮瘽锛屽垯閲嶆柊浜х敓鐩磋嚦寰楀埌鐨勬暣鏁颁笉澶т簬n銆?绗竴姝ワ細鐢眗and()鍑芥暟浜х敓Rand()鍑芥暟锛孯and()鍑芥暟绛夋鐜囦骇鐢?鍜?銆?int Rand() { int i1 = rand(); int i2 = rand(); if(i1==0 && i2==1) return 1; else if(i1==1 && i2==0) return 0; else return Rand(); return -1; }绗簩姝ワ細璁$畻鏁存暟n鐨勪簩杩涘埗琛ㄧず鎵€鎷ユ湁鐨勪綅鏁発锛宬 = 1 +log2n锛坙og浠?涓哄簳n锛?绗笁姝ワ細璋冪敤锝嬫Rand()浜х敓闅忔満鏁般€偮?int newRand() { int result = 0; for(int i = 0 ; i < k ; ++i) { if(Rand() == 1) result |= (1< } if(result > n) return newRand(); return result; } 聽 棰樼洰锛?缁欏畾涓€涓嚱鏁皉and5()锛岃鍑芥暟鍙互闅忔満鐢熸垚1-5鐨勬暣鏁帮紝涓旂敓鎴愭鐜囦竴鏍枫€傜幇瑕佹眰浣跨敤璇ュ嚱鏁版瀯閫犲嚱鏁皉and7()锛屼娇鍑芥暟rand7()鍙互闅忔満绛夋鐜囩殑鐢熸垚1-7鐨勬暣鏁般€傛€濊矾锛?寰堝浜虹殑绗竴鍙嶅簲鏄埄鐢╮and5() + rand()%3鏉ュ疄鐜皉and7()鍑芥暟锛岃繖涓柟娉曠‘瀹炲彲浠ヤ骇鐢?-7涔嬮棿鐨勯殢鏈烘暟锛屼絾鏄粩缁嗘兂鎯冲彲浠ュ彂鐜版暟瀛楃敓鎴愮殑姒傜巼鏄笉鐩哥瓑鐨勩€俽and()%3 浜х敓0鐨勬鐜囨槸1/5锛岃€屼骇鐢?鍜?鐨勬鐜囬兘鏄?/5锛屾墍浠ヨ繖涓柟娉曚骇鐢?鍜?鐨勬鐜囧ぇ浜庝骇鐢?鐨勬鐜囥€?姝g‘鐨勬柟娉曟槸鍒╃敤rand5()鍑芥暟鐢熸垚1-25涔嬮棿鐨勬暟瀛楋紝鐒跺悗灏嗗叾涓殑1-21鏄犲皠鎴?-7锛屼涪寮?2-25銆備緥濡傜敓鎴?1锛?)锛?1锛?)锛?1锛?)锛屽垯鐪嬫垚rand7()涓殑1锛屽鏋滃嚭鐜板墿涓嬬殑4绉嶏紝鍒欎涪寮冮噸鏂扮敓鎴愩€傜畝鍗曞疄鐜帮細 聽 int rand7() { int x = 0; do { x = 5 * (rand5() - 1) + rand5(); }while(x > 21); return 1 + x%7; }鎴戠殑澶囨敞锛?聽聽聽 杩欑鎬濇兂鏄熀浜庯紝rand()浜х敓[0,N-1]锛屾妸rand()瑙嗕负N杩涘埗鐨勪竴浣嶆暟浜х敓鍣紝閭d箞鍙互浣跨敤rand()*N+rand()鏉ヤ骇鐢?浣嶇殑N杩涘埗鏁帮紝浠ユ绫绘帹锛屽彲浠ヤ骇鐢?浣嶏紝4浣嶏紝5浣?..鐨凬杩涘埗鏁般€傝繖绉嶆寜鏋勯€燦杩涘埗鏁扮殑鏂瑰紡鐢熸垚鐨勯殢鏈烘暟锛屽繀瀹氳兘淇濊瘉闅忔満锛岃€岀浉鍙嶏紝鍊熷姪鍏朵粬鏂瑰紡鏉ヤ娇鐢╮and()浜х敓闅忔満鏁?濡?rand5() + rand()%3 )閮芥槸涓嶈兘淇濊瘉姒傜巼骞冲潎鐨勩€?聽聽聽 姝ら涓璑涓?锛屽洜姝ゅ彲浠ヤ娇鐢╮and5()*5+rand5()鏉ヤ骇鐢?浣嶇殑5杩涘埗鏁帮紝鑼冨洿灏辨槸1鍒?5銆傚啀鍘绘帀22-25锛屽墿浣欑殑闄?锛屼互姝や綔涓簉and7()鐨勪骇鐢熷櫒銆?缁欏畾涓€涓嚱鏁皉and()鑳戒骇鐢?鍒皀-1涔嬮棿鐨勭瓑姒傜巼闅忔満鏁帮紝闂浣曚骇鐢?鍒癿-1涔嬮棿绛夋鐜囩殑闅忔満鏁帮紵 int random(int m , int n) { int k = rand(); int max = n-1; while(k < m) { k = k*n + rand(); max = max*n + n-1; } return k/(max/n); }濡備綍浜х敓濡備笅姒傜巼鐨勯殢鏈烘暟锛?鍑?娆★紝1鍑虹幇2娆★紝2鍑虹幇3娆★紝n-1鍑虹幇n娆★紵 聽 聽 int random(int size) { while(true) { int m = rand(size); int n = rand(size); if(m + n < size) return m+n; } } 聽 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-22 15:55:31聽 鍘熸枃閾炬帴 闃呰锛?91 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆Google闈㈣瘯棰樷€斺€斿強绛旀1銆?鏉戝瓙閲屾湁100瀵瑰か濡伙紝鍏朵腑姣忎釜涓堝か閮界瀿鐫€鑷繁鐨勫瀛愬伔鎯呫€傘€傘€傛潙閲岀殑姣忎釜濡诲瓙閮借兘绔嬪嵆鍙戠幇闄よ嚜宸变笀澶箣澶栫殑鍏朵粬鐢蜂汉鏄惁鍋锋儏锛屽敮鐙笉鐭ラ亾濂硅嚜宸辩殑涓堝か鍒板簳鏈夋病鏈夊伔鎯呫€傛潙閲岀殑瑙勭煩涓嶅蹇嶉€氬ジ銆備换浣曚竴涓瀛愶紝涓€鏃﹁兘璇佹槑鑷繁鐨勭敺浜哄伔鎯咃紝灏卞繀椤诲綋澶╂妸浠栨潃姝汇€傛潙閲岀殑濂充汉鍏ㄩ兘涓ユ牸鐓ф瑙勭煩鍔炰簨銆備竴澶╋紝濂冲ご棰嗗嚭鏉ュ甯冿紝鏉戦噷鑷冲皯鏈変竴涓笀澶伔鎯呫€傝闂帴涓嬫潵浼氬彂鐢熶粈涔堜簨锛?绛旀锛氳繖鏄竴涓吀鍨嬬殑閫掑綊闂銆備竴鏃︽墍鏈夌殑濡诲瓙閮界煡閬撹嚦灏戞湁涓€涓敺浜哄嚭杞紝鎴戜滑灏卞彲浠ユ寜閫掑綊鏂瑰紡鏉ョ湅寰呰繖涓祦绋嬨€傚厛璁╂垜浠亣璁惧彧鏈変竴涓笀澶伔鎯呫€傚垯浠栫殑濡诲瓙瑙佷笉鍒颁换浣曞伔鎯呯殑鐢蜂汉锛屽洜姝ょ煡閬撹繖涓汉灏辨槸鑷繁涓堝か锛屽ス褰撳ぉ灏变細鏉€浜嗕粬銆傚亣濡傛湁涓や釜涓堝か鍋锋儏锛屽垯浠栦咯鐨勫瀛愬彧鐭ラ亾涓嶆槸鑷繁涓堝か鐨勯偅涓€涓敺浜哄伔鎯呫€傚洜姝ゅス浼氱瓑涓婁竴澶╃湅閭d釜浜烘湁娌℃湁琚潃姝汇€傚亣濡傜涓€澶╂病浜鸿鏉€姝伙紝濂瑰氨鑳界‘瀹氬ス鑷繁鐨勪笀澶篃鍋蜂簡鎯呫€備緷姝ょ被鎺紝鍋囧鏈?00涓笀澶伔鎯咃紝鍒欎粬浠兘瀹夊叏娲讳笂99澶╋紝鐩村埌100澶╂椂锛屾墍鏈夊瀛愭妸浠栦滑鍏ㄩ兘鏉€姝汇€傚簲鑱樿亴浣嶏細浜у搧缁忕悊 2銆佸亣璁惧湪涓€娈甸珮閫熷叕璺笂锛?0鍒嗛挓涔嬪唴瑙佸埌姹借溅缁忚繃鐨勬鐜囨槸0.95銆傞偅涔堬紝鍦?0鍒嗛挓鍐呰鍒版苯杞︾粡杩囩殑姒傜巼鏄灏戯紵锛堝亣璁剧己鐪佹鐜囧浐瀹氾級绛旀锛氳繖棰樼殑鍏抽敭鍦ㄤ簬0.95鏄鍒颁竴杈嗘垨澶氳締姹借溅鐨勬鐜囷紝鑰屼笉鏄粎瑙佸埌涓€杈嗘苯杞︾殑姒傜巼銆傚湪30鍒嗛挓鍐咃紝瑙佷笉鍒颁换浣曡溅杈嗙殑姒傜巼涓?.05銆傚洜姝ゅ湪10鍒嗛挓鍐呰涓嶅埌浠讳綍杞﹁締鐨勬鐜囨槸杩欎釜鍊肩殑绔嬫柟鏍癸紝鑰屽湪10鍒嗛挓鍐呰鍒颁竴杈嗚溅鐨勬鐜囧垯涓?鍑忓幓姝ょ珛鏂规牴锛屼篃灏辨槸澶х害63%銆?搴旇仒鑱屼綅锛氫骇鍝佺粡鐞?3銆佹湁鍥涗釜浜鸿鍦ㄥ閲岀┛杩囦竴鏉℃偓绱㈡ˉ鍥炲埌瀹胯惀鍦般€傚彲鏄粬浠彧鏈変竴鏀墜鐢碉紝鐢垫睜鍙鍐嶄寒17鍒嗛挓銆傝繃妗ュ繀椤昏鏈夋墜鐢碉紝鍚﹀垯澶嵄闄┿€傛ˉ鏈€澶氬彧鑳芥壙鍙椾袱涓汉鍚屾椂閫氳繃鐨勯噸閲忋€傝繖鍥涗釜浜虹殑杩囨ˉ閫熷害閮戒笉涓€鏍凤細涓€涓渶瑕?鍒嗛挓锛屼竴涓渶瑕?鍒嗛挓锛屼竴涓渶瑕?鍒嗛挓锛岃繕鏈変竴涓渶瑕?0鍒嗛挓銆備粬浠浣曟墠鑳藉湪17鍒嗛挓涔嬪唴鍏ㄩ儴杩囨ˉ锛熺瓟妗堬細1鍜?涓€璧疯繃锛?鍒嗛挓锛夛紱1杩斿洖锛?鍒嗛挓锛夛紱5鍜?0涓€璧疯繃锛?3鍒嗛挓锛夛紱2杩斿洖锛?5鍒嗛挓锛夛紱1鍜?涓€璧疯繃锛?7鍒嗛挓锛夈€傚叏浣撳畨鍏ㄨ繃妗ャ€?搴旇仒鑱屼綅锛氫骇鍝佺粡鐞?4銆佷綘鍜屼竴涓湅鍙嬪幓鍙傚姞鑱氫細銆傝仛浼氱畻涓婁綘浠竴鍏?0浜恒€傘€傘€備綘鐨勬湅鍙嬫兂瑕佽窡浣犳墦涓祵锛氫綘鍦ㄨ繖浜涗汉姣忔壘鍒颁竴涓拰浣犵敓鏃ョ浉鍚岀殑锛屼綘灏辫耽1鍧楅挶銆備粬鍦ㄨ繖浜涗汉閲屾瘡鎵惧埌涓€涓拰浣犵敓鏃ヤ笉鍚岀殑浜猴紝浠栧氨璧?鍧楅挶銆備綘璇ヤ笉璇ユ墦杩欎釜璧岋紵绛旀锛氫笉绠楅棸骞寸殑璇濓紝鍒汉璺熶綘鐢熸棩鐩稿悓鐨勬鐜囨槸1/365锛涜窡浣犵敓鏃ヤ笉鍚岀殑姒傜巼鏄?64/365銆傚洜姝や笉瑕佹墦杩欎釜璧屻€?搴旇仒鑱屼綅锛氫骇鍝佺粡鐞?5銆佸鏋滀綘鐪嬪埌鏃堕挓涓婇潰鐨勬椂闂存槸3锛?5锛岄偅涔堝叾鏃堕拡鍜屽垎閽堜箣闂寸殑瑙掑害鏄灏戯紵锛堢瓟妗堜笉鏄浂锛?绛旀锛?.5搴︺€傛椂閽熶笂姣忎竴鍒嗛挓鏄?搴︼紙360搴?60鍒嗛挓锛夈€傛椂閽堟瘡灏忔椂浠庝竴涓暟瀛楄蛋鍒颁笅涓€涓暟瀛楋紙姝や緥涓负浠?鐐瑰埌4鐐癸級锛屼篃灏辨槸30搴︺€傚洜涓烘棰樹腑鏃堕棿鍒氬ソ璧拌繃1/4灏忔椂锛屽洜姝ゆ椂閽堣蛋瀹?0搴︾殑1/4锛屼篃灏辨槸7.5搴︺€?搴旇仒鑱屼綅锛氫骇鍝佺粡鐞?6銆佸皢涓€鏍规湪鏉℃姌鎴?娈典箣鍚庯紝鍙互褰㈡垚涓€涓笁瑙掑舰鐨勬鐜囨湁澶氬ぇ锛?绛旀锛氬洜涓洪鐩腑娌℃湁璇磋姹傛湪鏉″繀椤婚灏剧浉杩炵殑鍋氭垚涓夎褰紝鍥犳绛旀鏄?00%銆備换浣曢暱搴︾殑涓夋牴鏈ㄦ潯閮藉彲浠ュ舰鎴愪竴涓笁瑙掑舰銆?搴旇仒鑱屼綅锛氫骇鍝佺粡鐞?7銆佸崡闈炴湁涓欢鏃堕棶棰樸€傝瀵瑰叾鍔犱互鍒嗘瀽銆?绛旀锛氳繖鏄剧劧鏄釜闈炲父妯$硦鐨勯棶棰橈紝鍥犳娌℃湁鍞竴鐨勬纭瓟妗堛€傛瘮杈冨ソ鐨勫洖绛斿簲璇ユ槸鐢辫闈㈣瘯鑰呭睍绀鸿嚜宸卞鈥滃欢鏃垛€濇蹇电殑鐔熸倝绋嬪害浠ュ強鍙戞尌鑷繁鐨勬兂璞″姏锛屾瀯鎯冲嚭涓€涓湁瓒g殑寤舵椂闂骞跺鍏舵彁渚涗竴涓湁瓒g殑瑙e喅鏂规銆傚簲鑱樿亴浣嶏細浜у搧缁忕悊 8銆佸湪涓€涓袱缁村钩闈笂鏈変笁涓笉鍦ㄤ竴鏉$洿绾夸笂鐨勭偣銆傝闂兘澶熶綔鍑哄嚑鏉′笌杩欎簺鐐硅窛绂荤浉鍚岀殑绾匡紵绛旀锛氫笁鏉°€傚皢涓ょ偣涔嬮棿鑱旀垚涓€鏉$嚎娈点€傚湪杩欐潯绾挎涓庣涓夌偣涔嬮棿姝d腑鐨勪綅缃紝鍋氫竴鏉′笌姝ょ嚎娈靛钩琛岀殑鐩寸嚎锛屽嵆涓轰竴鏉¤窛涓夌偣绛夎窛鐨勭嚎銆傜劧鍚庢寜姝ゆ柟娉曞鍏朵綑涓ょ偣鐨勭粍鍚堝仛鍑哄彟澶栦袱鏉℃潵銆?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 9銆?鐨?4娆℃柟鏄灏戯紵绛旀锛氬鏋滀綘涓嶆槸鍥犱负鍧愬湪闈㈣瘯瀹ら噷锛屾墜杈规病鏈夎绠楀櫒鐨勮瘽锛屽簲璇ュ彲浠ュ緢瀹规槗鎵惧埌绛旀锛屽嵆1.84467441 涔樹互10鐨?9娆℃柟銆?銆愯鏄垜锛屽氨鍐欎竴涓?锛屽悗闈㈠姞涓?4涓浂锛岀畻鏄?杩涘埗绛旀锛屽搱鍝堛€傗€斺€旇瘧鑰呮敞銆?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 10銆佸亣璁句綘鍦ㄨ。姗遍噷鎸傛弧琛~锛屽緢闅句粠涓寫鍑烘煇涓€浠舵潵銆傝闂綘鎵撶畻鎬庢牱鏁寸悊涓€涓嬶紝浣垮緱瀹冧滑瀹规槗鎸戦€夛紵绛旀锛氭棰樻病鏈夊浐瀹氱瓟妗堛€傝€冮獙鐨勬槸琚潰璇曡€呭湪瑙e喅闂鏂归潰鐨勬兂璞″姏鍜屽垱閫犳€с€傛垜浠寰楄鑰呪€滵ude鈥濈殑杩欎釜绛旀鍙兘浼氱粰Google鐣欎笅娣卞埢鍗拌薄锛氭妸瀹冧滑鎸夊竷鏂欑殑绉嶇被杩涜鍝堝笇锛圚ASH锛夌粍鍚堛€傜劧鍚庢瘡绫诲啀鎸?-3-4鏍戞垨绾㈤粦鏍戯紙閮芥槸璁$畻鏈虹畻娉曪級鎺掑簭銆?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 11銆佺粰浣犱竴鍓簳瀛楁锛圱ic Tac Toe锛夈€傘€傘€備綘鏉ュ啓涓€涓▼搴忥紝浠ユ暣涓父鎴忓拰涓€涓帺瀹剁殑鍚嶅瓧涓哄弬鏁般€傛鍑芥暟闇€杩斿洖娓告垙缁撴灉锛屽嵆姝ょ帺瀹舵槸鍚﹁耽浜嗐€傞鍏堜綘瑕佸喅瀹氫娇鐢ㄥ摢绉嶆暟鎹粨鏋勫鐞嗘父鎴忋€備綘杩樿鍏堣鍑轰娇鐢ㄥ摢绉嶇畻娉曪紝鐒跺悗鍐欏嚭浠g爜銆傛敞鎰忥細杩欎釜娓告垙涓殑鏌愪簺鏍煎瓙閲屽彲鑳芥槸绌虹殑銆備綘鐨勬暟鎹粨鏋勯渶瑕佽€冭檻鍒拌繖涓潯浠躲€傜瓟妗堬細鎵€闇€瑕佺殑鏁版嵁缁撴瀯搴斾负浜屽厓瀛楃鏁板垪銆傝皟鐢ㄦ鍑芥暟妫€鏌?绉嶆潯浠讹紝鍒ゆ柇鏄惁鏈夎耽瀹躲€傚叾涓6绉嶆潯浠跺氨鏄湅鏄惁杩樻湁绌烘牸銆傚鏋滄湁璧㈠锛屽垯瀛楃鍒ゆ柇鐜╁鏄疿杩樻槸O銆傚洜姝や綘闇€瑕佷竴涓棗鏍囥€傚鏋滄湁璧㈠鍒欒繑鍥炴鍊煎苟缁撴潫娓告垙锛屽鏋滄病鏈夊垯缁х画娓告垙銆?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 12銆佷负1涓囦嚎涓暟鎺掑簭闇€瑕佸闀挎椂闂达紵璇疯鍑轰竴涓潬璋辩殑浼拌銆傜瓟妗堬細杩欏張鏄竴涓病鏈夋爣鍑嗙瓟妗堢殑棰樼洰銆傜洰鐨勬槸鑰冨療琚潰璇曡€呯殑鍒涢€犳€с€傛垜浠€惧悜浜庝袱浣嶈鑰呯粰鍑虹殑绠€鍗曠瓟妗堬細鐢ㄥ綊骞舵帓搴忔硶锛圡erge Sort锛夋帓搴忋€傚钩鍧囨儏鍐典笅涓篛(1,000,000,000,000 Log 1,000,000,000,000)銆傛渶宸儏鍐典笅涓篛(1,000,000,000,000 Log 1,000,000,000,000)銆愪袱鑰呯浉鍚屻€傗€斺€旇瘧鑰呮敞銆戙€傜幇鍦ㄥ彲浠ュ仛鍒版瘡绉?0浜挎鐨勮繍绠楋紝鎵€浠ュぇ绾﹀簲闇€瑕?000绉掋€?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 13銆佽璁捐涓€涓€滆洐璺斥€濇父鎴忕殑绠楁硶锛屽苟鍐欏嚭鏂规鐨勪唬鐮併€傘€傘€傜瓟妗堬細杩欎釜娓告垙鐨勭洰鏍囨槸寮曞涓€涓潚铔欓伩寮€鏉ュ線杞﹁締锛屾í绌夸竴鏉$箒蹇欑殑鍏矾銆備綘鍙互鐢ㄤ竴涓暟鍒楁潵浠h〃涓€鏉¤溅閬撱€傚皢鏂规绠€鍖栨垚涓€鏉杞﹂亾鐨勫叕璺€傛垜浠彧鎵惧埌涓€涓姝ら棶棰樼殑瑙g瓟锛屽畠鏉ヨ嚜Glassdoor.com缃戠珯锛氣€滀竴涓柟娉曟槸鍐欎竴涓€掑綊绠楁硶鏉ュ喅瀹氫綍鏃剁瓑寰咃紝浣曟椂璺宠繘涓嬩竴涓溅閬撱€傝繖鐢变笅鏉¤溅閬撲腑鏄惁鏈夐€愭笎鎺ヨ繎鐨勯殰纰嶇墿鏉ュ喅瀹氥€傗€?搴旇仒鑱屼綅锛氳蒋浠跺伐绋嬪笀 14銆丟oogle姣忓勾鏀跺埌澶氬皯浠借蒋浠跺伐绋嬪笀鐨勭畝鍘嗭紵杩欎篃鏄湪鑰冨療搴旇瘯鑰呮槸鍚︽湁鑳藉姏鎶婇棶棰樼畝鍗曟槑纭寲锛屽苟鎻愬嚭鍒涢€犳€х殑瑙e喅鏂规銆傜瓟妗堬細涓€涓€滈噺鍖栨姤閰垎鏋愬笀鈥濊亴浣嶇殑姹傝亴鑰咃紝搴旇鐭ラ亾2008骞碐oogle闆囦剑浜?400浜恒€備及璁″叾涓?5%锛屽嵆2550浜猴紝搴旇鏄伐绋嬪笀锛屽苟涓擥oogle鍜屽搱浣涚殑褰曞彇鐜囩被浼硷紝鍗充粠鐢宠浜轰腑鍙?%銆傜敱姝ゅ彲鐭ュ簲璇ユ敹鍒板ぇ绾?5000绠€鍘嗭紙85000 x 3% = 2550锛?搴旇仒鑱屼綅锛氶噺鍖栨姤閰垎鏋愬笀 15銆佺粰浣犱竴涓暟瀛楅摼琛ㄣ€傘€傘€傞摼琛ㄥ埌澶翠箣鍚庡張浼氫粠澶村紑濮嬶紙寰幆閾捐〃锛夈€傝鍐欏嚭瀵绘壘閾捐〃涓渶灏忔暟瀛楃殑鏈€楂樻晥绠楁硶銆傛壘鍑烘閾捐〃涓殑浠绘剰缁欏畾鏁板瓧銆傞摼琛ㄤ腑鐨勬暟瀛楁€绘槸涓嶆柇澧炲ぇ鐨勶紝浣嗘槸浣犱笉鐭ラ亾寰幆閾捐〃浠庝綍澶勫紑濮嬨€備緥锛?8, 40, 55, 89, 6, 13, 20, 23, 36銆傜瓟妗堬細鎴戜滑鏈€鍠滄鐨勭瓟妗堟潵鑷鑰呪€漝ude鈥濓細寤虹珛涓存椂鎸囬拡骞朵粠鏍逛笂寮€濮嬨€傦紙寰幆閾捐〃澶у鏁版儏鍐典笅閮芥湁鍚戝墠鎴栧悜鍚庢寚閽堛€傦級鍒ゆ柇鏄悜鍓嶆洿澶ц繕鏄悜鍚庢洿澶с€傚鏋滃悜鍓嶆洿澶у垯鐭ラ亾宸茶揪鍒伴摼琛ㄦ渶鍚庯紝鍙堥噸鏂颁綅浜庨摼琛ㄥ紑濮嬩綅缃€傚鏋滃悜鍓嶆洿澶с€愬師鏂囧姝わ紝浼煎簲涓衡€滃悜鍓嶆洿灏忊€濄€傗€斺€旇瘧鑰呮敞銆戯紝閭d綘鍙互鍚戝悗鎼滃骞惰繘琛屾暟瀛楁瘮杈冦€傚鏋滄棦娌℃湁鏍逛篃娌℃湁鎸囬拡鎸囧悜閾捐〃锛岄偅涔堜綘鐨勬暟鎹氨涓㈠け鍦ㄥ唴瀛樹腑浜嗐€?/p> 浣滆€咃細Hackbuteer1 鍙戣〃浜?012-4-22 16:27:06聽 鍘熸枃閾炬帴 闃呰锛?42 璇勮锛?聽 鏌ョ湅璇勮 聽[鍘焆C++涓殑static鍏抽敭瀛桟++鐨剆tatic鏈変袱绉嶇敤娉曪細闈㈠悜杩囩▼绋嬪簭璁捐涓殑static鍜岄潰鍚戝璞$▼搴忚璁′腑鐨剆tatic銆傚墠鑰呭簲鐢ㄤ簬鏅€氬彉閲忓拰鍑芥暟锛屼笉娑夊強绫伙紱鍚庤€呬富瑕佽鏄巗tatic鍦ㄧ被涓殑浣滅敤銆?涓€銆侀潰鍚戣繃绋嬭璁′腑鐨剆tatic 1銆侀潤鎬佸叏灞€鍙橀噺 鍦ㄥ叏灞€鍙橀噺鍓嶏紝鍔犱笂鍏抽敭瀛梥tatic锛岃鍙橀噺灏辫瀹氫箟鎴愪负涓€涓潤鎬佸叏灞€鍙橀噺銆傛垜浠厛涓句竴涓潤鎬佸叏灞€鍙橀噺鐨勪緥瀛愶紝濡備笅锛毬?#include using namespace std; static int n; //瀹氫箟闈欐€佸叏灞€鍙橀噺 void fn() { n++; cout< } int main(void) { n = 20; cout< fn(); return 0; }闈欐€佸叏灞€鍙橀噺鏈変互涓嬬壒鐐癸細 聽 璇ュ彉閲忓湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛橈紱鏈粡鍒濆鍖栫殑闈欐€佸叏灞€鍙橀噺浼氳绋嬪簭鑷姩鍒濆鍖栦负0锛堣嚜鍔ㄥ彉閲忕殑鍊兼槸闅忔満鐨勶紝闄ら潪瀹冭鏄惧紡鍒濆鍖栵級锛涢潤鎬佸叏灞€鍙橀噺鍦ㄥ0鏄庡畠鐨勬暣涓枃浠堕兘鏄彲瑙佺殑锛岃€屽湪鏂囦欢涔嬪鏄笉鍙鐨勶紱銆€ 闈欐€佸彉閲忛兘鍦ㄥ叏灞€鏁版嵁鍖哄垎閰嶅唴瀛橈紝鍖呮嫭鍚庨潰灏嗚鎻愬埌鐨勯潤鎬佸眬閮ㄥ彉閲忋€傚浜庝竴涓畬鏁寸殑绋嬪簭锛屽湪鍐呭瓨涓殑鍒嗗竷鎯呭喌濡備笅鍥撅細 浠g爜鍖哄叏灞€鏁版嵁鍖哄爢鍖烘爤鍖恒€€銆€涓€鑸▼搴忕殑鐢眓ew浜х敓鐨勫姩鎬佹暟鎹瓨鏀惧湪鍫嗗尯锛屽嚱鏁板唴閮ㄧ殑鑷姩鍙橀噺瀛樻斁鍦ㄦ爤鍖恒€傝嚜鍔ㄥ彉閲忎竴鑸細闅忕潃鍑芥暟鐨勯€€鍑鸿€岄噴鏀剧┖闂达紝闈欐€佹暟鎹紙鍗充娇鏄嚱鏁板唴閮ㄧ殑闈欐€佸眬閮ㄥ彉閲忥級涔熷瓨鏀惧湪鍏ㄥ眬鏁版嵁鍖恒€傚叏灞€鏁版嵁鍖虹殑鏁版嵁骞朵笉浼氬洜涓哄嚱鏁扮殑閫€鍑鸿€岄噴鏀剧┖闂淬€傜粏蹇冪殑璇昏€呭彲鑳戒細鍙戠幇锛孍xample 1涓殑浠g爜涓皢 聽 static int n; //瀹氫箟闈欐€佸叏灞€鍙橀噺鏀逛负 聽 聽 int n; //瀹氫箟鍏ㄥ眬鍙橀噺绋嬪簭鐓ф牱姝e父杩愯銆?鐨勭‘锛屽畾涔夊叏灞€鍙橀噺灏卞彲浠ュ疄鐜板彉閲忓湪鏂囦欢涓殑鍏变韩锛屼絾瀹氫箟闈欐€佸叏灞€鍙橀噺杩樻湁浠ヤ笅濂藉锛?聽聽聽聽聽聽 闈欐€佸叏灞€鍙橀噺涓嶈兘琚叾瀹冩枃浠舵墍鐢紱 聽聽聽聽聽聽 鍏跺畠鏂囦欢涓彲浠ュ畾涔夌浉鍚屽悕瀛楃殑鍙橀噺锛屼笉浼氬彂鐢熷啿绐侊紱 鎮ㄥ彲浠ュ皢涓婅堪绀轰緥浠g爜鏀逛负濡備笅锛?/File1 #include using namespace std; void fn(); static int n; //瀹氫箟闈欐€佸叏灞€鍙橀噺 int main(void) { n = 20; cout< fn(); return 0; } //File2 #include using namespace std; extern int n; void fn() { n++; cout< } 缂栬瘧骞惰繍琛岃繖涓▼搴忥紝鎮ㄥ氨浼氬彂鐜颁笂杩颁唬鐮佸彲浠ュ垎鍒€氳繃缂栬瘧锛屼絾杩愯鏃跺嚭鐜伴敊璇€傝瘯鐫€灏?聽 static int n; //瀹氫箟闈欐€佸叏灞€鍙橀噺鏀逛负 聽 int n; //瀹氫箟鍏ㄥ眬鍙橀噺鍐嶆缂栬瘧杩愯绋嬪簭锛岀粏蹇冧綋浼氬叏灞€鍙橀噺鍜岄潤鎬佸叏灞€鍙橀噺鐨勫尯鍒€?2銆侀潤鎬佸眬閮ㄥ彉閲?鍦ㄥ眬閮ㄥ彉閲忓墠锛屽姞涓婂叧閿瓧static锛岃鍙橀噺灏辫瀹氫箟鎴愪负涓€涓潤鎬佸眬閮ㄥ彉閲忋€?鎴戜滑鍏堜妇涓€涓潤鎬佸眬閮ㄥ彉閲忕殑渚嬪瓙锛屽涓嬶細#include using namespace std; void fn(); int main(void) { fn(); fn(); fn(); return 0; } void fn() { static int n = 10; cout< n++; }閫氬父锛屽湪鍑芥暟浣撳唴瀹氫箟浜嗕竴涓彉閲忥紝姣忓綋绋嬪簭杩愯鍒拌璇彞鏃堕兘浼氱粰璇ュ眬閮ㄥ彉閲忓垎閰嶆爤鍐呭瓨銆備絾闅忕潃绋嬪簭閫€鍑哄嚱鏁颁綋锛岀郴缁熷氨浼氭敹鍥炴爤鍐呭瓨锛屽眬閮ㄥ彉閲忎篃鐩稿簲澶辨晥銆?浣嗘湁鏃跺€欐垜浠渶瑕佸湪涓ゆ璋冪敤涔嬮棿瀵瑰彉閲忕殑鍊艰繘琛屼繚瀛樸€傞€氬父鐨勬兂娉曟槸瀹氫箟涓€涓叏灞€鍙橀噺鏉ュ疄鐜般€備絾杩欐牱涓€鏉ワ紝鍙橀噺宸茬粡涓嶅啀灞炰簬鍑芥暟鏈韩浜嗭紝涓嶅啀浠呭彈鍑芥暟鐨勬帶鍒讹紝缁欑▼搴忕殑缁存姢甯︽潵涓嶄究銆?闈欐€佸眬閮ㄥ彉閲忔濂藉彲浠ヨВ鍐宠繖涓棶棰樸€傞潤鎬佸眬閮ㄥ彉閲忎繚瀛樺湪鍏ㄥ眬鏁版嵁鍖猴紝鑰屼笉鏄繚瀛樺湪鏍堜腑锛屾瘡娆$殑鍊间繚鎸佸埌涓嬩竴娆¤皟鐢紝鐩村埌涓嬫璧嬫柊鍊笺€?闈欐€佸眬閮ㄥ彉閲忔湁浠ヤ笅鐗圭偣锛?聽聽聽 璇ュ彉閲忓湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛橈紱 聽聽聽 闈欐€佸眬閮ㄥ彉閲忓湪绋嬪簭鎵ц鍒拌瀵硅薄鐨勫0鏄庡鏃惰棣栨鍒濆鍖栵紝鍗充互鍚庣殑鍑芥暟璋冪敤涓嶅啀杩涜鍒濆鍖栵紱 聽聽聽 闈欐€佸眬閮ㄥ彉閲忎竴鑸湪澹版槑澶勫垵濮嬪寲锛屽鏋滄病鏈夋樉寮忓垵濮嬪寲锛屼細琚▼搴忚嚜鍔ㄥ垵濮嬪寲涓?锛?聽聽聽 瀹冨缁堥┗鐣欏湪鍏ㄥ眬鏁版嵁鍖猴紝鐩村埌绋嬪簭杩愯缁撴潫銆備絾鍏朵綔鐢ㄥ煙涓哄眬閮ㄤ綔鐢ㄥ煙锛屽綋瀹氫箟瀹冪殑鍑芥暟鎴栬鍙ュ潡缁撴潫鏃讹紝鍏朵綔鐢ㄥ煙闅忎箣缁撴潫锛?3銆侀潤鎬佸嚱鏁?鍦ㄥ嚱鏁扮殑杩斿洖绫诲瀷鍓嶅姞涓妔tatic鍏抽敭瀛?鍑芥暟鍗宠瀹氫箟涓洪潤鎬佸嚱鏁般€傞潤鎬佸嚱鏁颁笌鏅€氬嚱鏁颁笉鍚岋紝瀹冨彧鑳藉湪澹版槑瀹冪殑鏂囦欢褰撲腑鍙锛屼笉鑳借鍏跺畠鏂囦欢浣跨敤銆?闈欐€佸嚱鏁扮殑渚嬪瓙锛?include using namespace std; static void fn(); //澹版槑闈欐€佸嚱鏁?/p> int main(void) { fn(); return 0; } void fn() //瀹氫箟闈欐€佸嚱鏁?/p> { int n = 10; cout< }瀹氫箟闈欐€佸嚱鏁扮殑濂藉锛?聽聽聽聽聽聽 闈欐€佸嚱鏁颁笉鑳借鍏跺畠鏂囦欢鎵€鐢紱 聽聽聽聽聽聽 鍏跺畠鏂囦欢涓彲浠ュ畾涔夌浉鍚屽悕瀛楃殑鍑芥暟锛屼笉浼氬彂鐢熷啿绐侊紱 浜屻€侀潰鍚戝璞$殑static鍏抽敭瀛楋紙绫讳腑鐨剆tatic鍏抽敭瀛楋級 1銆侀潤鎬佹暟鎹垚鍛?鍦ㄧ被鍐呮暟鎹垚鍛樼殑澹版槑鍓嶅姞涓婂叧閿瓧static锛岃鏁版嵁鎴愬憳灏辨槸绫诲唴鐨勯潤鎬佹暟鎹垚鍛樸€傚厛涓句竴涓潤鎬佹暟鎹垚鍛樼殑渚嬪瓙銆?include using namespace std; class Myclass { private: int a , b , c; static int sum; //澹版槑闈欐€佹暟鎹垚鍛?/p> public: Myclass(int a , int b , int c); void GetSum(); }; int Myclass::sum = 0; //瀹氫箟骞跺垵濮嬪寲闈欐€佹暟鎹垚鍛?/p> Myclass::Myclass(int a , int b , int c) { this->a = a; this->b = b; this->c = c; sum += a+b+c; } void Myclass::GetSum() { cout<<"sum="< } int main(void) { Myclass M(1 , 2 , 3); M.GetSum(); Myclass N(4 , 5 , 6); N.GetSum(); M.GetSum(); return 0; }鍙互鐪嬪嚭锛岄潤鎬佹暟鎹垚鍛樻湁浠ヤ笅鐗圭偣锛? 瀵逛簬闈為潤鎬佹暟鎹垚鍛橈紝姣忎釜绫诲璞¢兘鏈夎嚜宸辩殑鎷疯礉銆傝€岄潤鎬佹暟鎹垚鍛樿褰撲綔鏄被鐨勬垚鍛樸€傛棤璁鸿繖涓被鐨勫璞¤瀹氫箟浜嗗灏戜釜锛岄潤鎬佹暟鎹垚鍛樺湪绋嬪簭涓篃鍙湁涓€浠芥嫹璐濓紝鐢辫绫诲瀷鐨勬墍鏈夊璞″叡浜闂€備篃灏辨槸璇达紝闈欐€佹暟鎹垚鍛樻槸璇ョ被鐨勬墍鏈夊璞℃墍鍏辨湁鐨勩€傚璇ョ被鐨勫涓璞℃潵璇达紝闈欐€佹暟鎹垚鍛樺彧鍒嗛厤涓€娆″唴瀛橈紝渚涙墍鏈夊璞″叡鐢ㄣ€傛墍浠ワ紝闈欐€佹暟鎹垚鍛樼殑鍊煎姣忎釜瀵硅薄閮芥槸涓€鏍风殑锛屽畠鐨勫€煎彲浠ユ洿鏂帮紱闈欐€佹暟鎹垚鍛樺瓨鍌ㄥ湪鍏ㄥ眬鏁版嵁鍖恒€傞潤鎬佹暟鎹垚鍛樺畾涔夋椂瑕佸垎閰嶇┖闂达紝鎵€浠ヤ笉鑳藉湪绫诲0鏄庝腑瀹氫箟銆傚湪Example 5涓紝璇彞int Myclass::Sum=0;鏄畾涔夐潤鎬佹暟鎹垚鍛橈紱闈欐€佹暟鎹垚鍛樺拰鏅€氭暟鎹垚鍛樹竴鏍烽伒浠巔ublic,protected,private璁块棶瑙勫垯锛涘洜涓洪潤鎬佹暟鎹垚鍛樺湪鍏ㄥ眬鏁版嵁鍖哄垎閰嶅唴瀛橈紝灞炰簬鏈被鐨勬墍鏈夊璞″叡浜紝鎵€浠ワ紝瀹冧笉灞炰簬鐗瑰畾鐨勭被瀵硅薄锛屽湪娌℃湁浜х敓绫诲璞℃椂鍏朵綔鐢ㄥ煙灏卞彲瑙侊紝鍗冲湪娌℃湁浜х敓绫荤殑瀹炰緥鏃讹紝鎴戜滑灏卞彲浠ユ搷浣滃畠锛涢潤鎬佹暟鎹垚鍛樺垵濮嬪寲涓庝竴鑸暟鎹垚鍛樺垵濮嬪寲涓嶅悓銆傞潤鎬佹暟鎹垚鍛樺垵濮嬪寲鐨勬牸寮忎负锛?锛滄暟鎹被鍨嬶紴锛滅被鍚嶏紴::锛滈潤鎬佹暟鎹垚鍛樺悕锛?锛滃€硷紴绫荤殑闈欐€佹暟鎹垚鍛樻湁涓ょ璁块棶褰㈠紡锛?锛滅被瀵硅薄鍚嶏紴.锛滈潤鎬佹暟鎹垚鍛樺悕锛?鎴?锛滅被绫诲瀷鍚嶏紴::锛滈潤鎬佹暟鎹垚鍛樺悕锛?濡傛灉闈欐€佹暟鎹垚鍛樼殑璁块棶鏉冮檺鍏佽鐨勮瘽锛堝嵆public鐨勬垚鍛橈級锛屽彲鍦ㄧ▼搴忎腑锛屾寜涓婅堪鏍煎紡鏉ュ紩鐢ㄩ潤鎬佹暟鎹垚鍛?锛涢潤鎬佹暟鎹垚鍛樹富瑕佺敤鍦ㄥ悇涓璞¢兘鏈夌浉鍚岀殑鏌愰」灞炴€х殑鏃跺€欍€傛瘮濡傚浜庝竴涓瓨娆剧被锛屾瘡涓疄渚嬬殑鍒╂伅閮芥槸鐩稿悓鐨勩€傛墍浠ワ紝搴旇鎶婂埄鎭涓哄瓨娆剧被鐨勯潤鎬佹暟鎹垚鍛樸€傝繖鏈変袱涓ソ澶勶紝绗竴锛屼笉绠″畾涔夊灏戜釜瀛樻绫诲璞★紝鍒╂伅鏁版嵁鎴愬憳閮藉叡浜垎閰嶅湪鍏ㄥ眬鏁版嵁鍖虹殑鍐呭瓨锛屾墍浠ヨ妭鐪佸瓨鍌ㄧ┖闂淬€傜浜岋紝涓€鏃﹀埄鎭渶瑕佹敼鍙樻椂锛屽彧瑕佹敼鍙樹竴娆★紝鍒欐墍鏈夊瓨娆剧被瀵硅薄鐨勫埄鎭叏鏀瑰彉杩囨潵浜嗭紱鍚屽叏灞€鍙橀噺鐩告瘮锛屼娇鐢ㄩ潤鎬佹暟鎹垚鍛樻湁涓や釜浼樺娍锛?/p> 闈欐€佹暟鎹垚鍛樻病鏈夎繘鍏ョ▼搴忕殑鍏ㄥ眬鍚嶅瓧绌洪棿锛屽洜姝や笉瀛樺湪涓庣▼搴忎腑鍏跺畠鍏ㄥ眬鍚嶅瓧鍐茬獊鐨勫彲鑳芥€э紱鍙互瀹炵幇淇℃伅闅愯棌銆傞潤鎬佹暟鎹垚鍛樺彲浠ユ槸private鎴愬憳锛岃€屽叏灞€鍙橀噺涓嶈兘锛?2銆侀潤鎬佹垚鍛樺嚱鏁般€€銆€涓庨潤鎬佹暟鎹垚鍛樹竴鏍凤紝鎴戜滑涔熷彲浠ュ垱寤轰竴涓潤鎬佹垚鍛樺嚱鏁帮紝瀹冧负绫荤殑鍏ㄩ儴鏈嶅姟鑰屼笉鏄负鏌愪竴涓被鐨勫叿浣撳璞℃湇鍔°€傞潤鎬佹垚鍛樺嚱鏁颁笌闈欐€佹暟鎹垚鍛樹竴鏍凤紝閮芥槸绫荤殑鍐呴儴瀹炵幇锛屽睘浜庣被瀹氫箟鐨勪竴閮ㄥ垎銆傛櫘閫氱殑鎴愬憳鍑芥暟涓€鑸兘闅愬惈浜嗕竴涓猼his鎸囬拡锛宼his鎸囬拡鎸囧悜绫荤殑瀵硅薄鏈韩锛屽洜涓烘櫘閫氭垚鍛樺嚱鏁版€绘槸鍏蜂綋鐨勫睘浜庢煇涓被鐨勫叿浣撳璞$殑銆傞€氬父鎯呭喌涓嬶紝this鏄己鐪佺殑銆傚鍑芥暟fn()瀹為檯涓婃槸this->fn()銆備絾鏄笌鏅€氬嚱鏁扮浉姣旓紝闈欐€佹垚鍛樺嚱鏁扮敱浜庝笉鏄笌浠讳綍鐨勫璞$浉鑱旂郴锛屽洜姝ゅ畠涓嶅叿鏈塼his鎸囬拡銆備粠杩欎釜鎰忎箟涓婅锛屽畠鏃犳硶璁块棶灞炰簬绫诲璞$殑闈為潤鎬佹暟鎹垚鍛橈紝涔熸棤娉曡闂潪闈欐€佹垚鍛樺嚱鏁帮紝瀹冨彧鑳借皟鐢ㄥ叾浣欑殑闈欐€佹垚鍛樺嚱鏁般€備笅闈妇涓潤鎬佹垚鍛樺嚱鏁扮殑渚嬪瓙銆?聽 #include using namespace std; class Myclass { private: int a , b , c; static int sum; //澹版槑闈欐€佹暟鎹垚鍛?/p> public: Myclass(int a , int b , int c); static void GetSum(); //澹版槑闈欐€佹垚鍛樺嚱鏁?/p> }; int Myclass::sum = 0; //瀹氫箟骞跺垵濮嬪寲闈欐€佹暟鎹垚鍛?/p> Myclass::Myclass(int a , int b , int c) { this->a = a; this->b = b; this->c = c; sum += a+b+c; //闈為潤鎬佹垚鍛樺嚱鏁板彲浠ヨ闂潤鎬佹暟鎹垚鍛?/p> } void Myclass::GetSum() //闈欐€佹垚鍛樺嚱鏁扮殑瀹炵幇 {