tag:blogger.com,1999:blog-27690600683685178932024-03-28T20:28:35.416-07:00alex9ufo 聰明人求知心切alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.comBlogger3744125tag:blogger.com,1999:blog-2769060068368517893.post-82342917711793726062024-03-26T06:01:00.000-07:002024-03-27T06:09:40.194-07:00DHT11 (Node-Red) +PostgreSQL 模擬<p><span style="font-size: x-large;"> DHT11 (Node-Red) +PostgreSQL 模擬</span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhxNTx5SPaH7R69bRVNZ0vlMSKvjMl2EiY-tU0lZGVbImB1yA6z6bkX3ovezbXLv6eKPXa3rBxHxiSm2vhGk5nmgCWjDNRM_7xIpCUlQ9tqvPlfhtD19TNN52ottHhDFIxZvkT58XpLPnlXAzLuGl1pGBxrhFwM0aNaZQTrrcFOYl0F_3plsFXhmYBtY/s1872/2024-03-26%2020%2054%2045.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="1872" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkhxNTx5SPaH7R69bRVNZ0vlMSKvjMl2EiY-tU0lZGVbImB1yA6z6bkX3ovezbXLv6eKPXa3rBxHxiSm2vhGk5nmgCWjDNRM_7xIpCUlQ9tqvPlfhtD19TNN52ottHhDFIxZvkT58XpLPnlXAzLuGl1pGBxrhFwM0aNaZQTrrcFOYl0F_3plsFXhmYBtY/w640-h308/2024-03-26%2020%2054%2045.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigfsyP4XGKiuNck9LjvvuUQ1ziqX74urIneC-JAlwhXCfDre54Wov1IxboVR86L941atyLcOufiS_CZeHAjFUos1teu1z5lVJCrsDoh_LHHMhtJv4aqrfmTbawoB7aIoAnspS7EWtJRIzPq1N0-BxoHbfi4PWcOFeTL29sXyg_5kU7om7wVXguT024Gho/s1051/2024-03-26%2020%2056%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="623" data-original-width="1051" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigfsyP4XGKiuNck9LjvvuUQ1ziqX74urIneC-JAlwhXCfDre54Wov1IxboVR86L941atyLcOufiS_CZeHAjFUos1teu1z5lVJCrsDoh_LHHMhtJv4aqrfmTbawoB7aIoAnspS7EWtJRIzPq1N0-BxoHbfi4PWcOFeTL29sXyg_5kU7om7wVXguT024Gho/w640-h380/2024-03-26%2020%2056%2031.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZ2U0k8B-vkW_wVcDlzx-p1-vgsETtX6-WcvFloLiswAcX4g2cWzC8jDprw93egTd-BoxKgDpkJ0JzamE1wM7rNaFVrRFsdpxv-yrxgSXshlskDDQ0RyjLbuOzmJ3meR2thyphenhypheng2Dli-0Ln8HWM52iIN_ps1G1tzW3Q06n8mbnAyx-xKivQulTmO8lqHU/s1082/2024-03-26%2020%2057%2033.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="683" data-original-width="1082" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRFZ2U0k8B-vkW_wVcDlzx-p1-vgsETtX6-WcvFloLiswAcX4g2cWzC8jDprw93egTd-BoxKgDpkJ0JzamE1wM7rNaFVrRFsdpxv-yrxgSXshlskDDQ0RyjLbuOzmJ3meR2thyphenhypheng2Dli-0Ln8HWM52iIN_ps1G1tzW3Q06n8mbnAyx-xKivQulTmO8lqHU/w640-h404/2024-03-26%2020%2057%2033.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5mMuTElx3_9xdlTs2y_pDjbtsEIdzhh8ZDu4irKXvI-pmbcbD8PX5mGu7WzaeW_vMhrzgRJGnQlu7QzK497_tTlfNmHmJ8awt8zZwKvHSKNiygz5wSF-mxHyyLmtaYxyG9TrM2An8DV2SbP5NzlHtHmdEF09mauxE-jgmsj9-ZrG8_RsVeUm7RRQSds/s1029/2024-03-26%2020%2058%2057.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="593" data-original-width="1029" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM5mMuTElx3_9xdlTs2y_pDjbtsEIdzhh8ZDu4irKXvI-pmbcbD8PX5mGu7WzaeW_vMhrzgRJGnQlu7QzK497_tTlfNmHmJ8awt8zZwKvHSKNiygz5wSF-mxHyyLmtaYxyG9TrM2An8DV2SbP5NzlHtHmdEF09mauxE-jgmsj9-ZrG8_RsVeUm7RRQSds/w640-h368/2024-03-26%2020%2058%2057.png" width="640" /></a></div><br /><p><br /></p><p><br /></p><p>[{"id":"acddd911a6412f0a","type":"inject","z":"08dc41d47d4d9e09","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"15","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":130,"y":140,"wires":[["60f82608b91e1010","a7941c012545db2a"]]},{"id":"60f82608b91e1010","type":"postgrestor","z":"08dc41d47d4d9e09","name":"DHT11","query":"SELECT * FROM DHT11sensor order by time desc limit 1;","postgresDB":"b98af31e5c23d7ac","output":true,"outputs":1,"throwErrors":false,"x":290,"y":140,"wires":[["2536c7ad0157dbf2","cd48a2caa41c4e6d","7c706fad4771614c"]]},{"id":"2536c7ad0157dbf2","type":"ui_gauge","z":"08dc41d47d4d9e09","name":"","group":"49ca43fc9b95bcc1","order":2,"width":"6","height":"4","gtype":"gage","title":"Temperature","label":"C","format":"{{payload.rows[0].temp}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":510,"y":140,"wires":[]},{"id":"cd48a2caa41c4e6d","type":"ui_gauge","z":"08dc41d47d4d9e09","name":"","group":"49ca43fc9b95bcc1","order":3,"width":"6","height":"4","gtype":"gage","title":"Humidity","label":"%","format":"{{payload.rows[0].humidity}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":500,"y":180,"wires":[]},{"id":"cd4adcf359d66588","type":"ui_text","z":"08dc41d47d4d9e09","group":"49ca43fc9b95bcc1","order":1,"width":0,"height":0,"name":"","label":"Update Time: ","format":"{{msg.payload}}","layout":"row-left","className":"","x":730,"y":100,"wires":[]},{"id":"a7941c012545db2a","type":"postgrestor","z":"08dc41d47d4d9e09","name":"DHT11","query":"select TO_CHAR(time, 'YYYY-MM-DD HH:mm:ss') as time,temp,humidity from (SELECT * FROM DHT11sensor order by time desc limit 30) as data order by time;","postgresDB":"b98af31e5c23d7ac","output":true,"outputs":1,"throwErrors":false,"x":290,"y":220,"wires":[["de934747674f4abc","b6869634764c8604","15f7b694306c2f80"]]},{"id":"bc052292a6aa1f41","type":"ui_chart","z":"08dc41d47d4d9e09","name":"","group":"6879ef9ca30c1e34","order":0,"width":"13","height":"4","label":"Temperature","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":690,"y":220,"wires":[[]]},{"id":"de934747674f4abc","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var data = [];\nvar label = [];\nvar i;\ndata.push([]);\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n data[0].push(msg.payload.rows[i]['temp']);\n}\n\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n label.push(msg.payload.rows[i]['time']);\n}\n\nvar m={\n \"series\":[\"Temperature\"],\n \"data\":data,\n \"labels\":label\n};\n\nreturn {payload:[m]};\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":220,"wires":[["bc052292a6aa1f41"]]},{"id":"864f41576f8d37a8","type":"ui_chart","z":"08dc41d47d4d9e09","name":"","group":"6879ef9ca30c1e34","order":0,"width":"13","height":"4","label":"Humidity","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":680,"y":260,"wires":[[]]},{"id":"b6869634764c8604","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var data = [];\nvar label = [];\nvar i;\ndata.push([]);\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n data[0].push(msg.payload.rows[i]['humidity']);\n}\n\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n label.push(msg.payload.rows[i]['time']);\n}\n\nvar m={\n \"series\":[\"Humidity\"],\n \"data\":data,\n \"labels\":label\n};\n\nreturn {payload:[m]};\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":260,"wires":[["864f41576f8d37a8"]]},{"id":"15f7b694306c2f80","type":"function","z":"08dc41d47d4d9e09","name":"create array","func":"\nvar i;\nvar list_data = [];\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n list_data.push({\"No\":i+1,\"Time\":msg.payload.rows[i]['time'],\"Temperature\":msg.payload.rows[i]['temp'],\n \"Humidity\":msg.payload.rows[i]['humidity']});\n}\n\nmsg.payload = list_data;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":300,"wires":[["997a83e59f6a3cdc"]]},{"id":"997a83e59f6a3cdc","type":"ui_table","z":"08dc41d47d4d9e09","group":"756d53853a29259a","name":"","order":0,"width":"8","height":"14","columns":[],"outputs":1,"cts":true,"x":670,"y":300,"wires":[["7fd94d3ea87889b9"]]},{"id":"7fd94d3ea87889b9","type":"template","z":"08dc41d47d4d9e09","name":"","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"Time: {{payload.Time}}<br>\nTemperature: {{payload.Temperature}}<br>\nHumidity: {{payload.Humidity}}<br>","output":"str","x":790,"y":300,"wires":[["5d991cfa9fbd5624"]]},{"id":"5d991cfa9fbd5624","type":"ui_toast","z":"08dc41d47d4d9e09","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"","raw":true,"className":"","topic":"Data","name":"","x":950,"y":300,"wires":[]},{"id":"b7a62274d2e3e00a","type":"inject","z":"08dc41d47d4d9e09","name":"CREATE","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":400,"wires":[["7b87c1255de70067"]]},{"id":"47c2279e27890264","type":"inject","z":"08dc41d47d4d9e09","name":"INSERT 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":480,"wires":[["77ce9a8be017a108","b1e6cd67c3efbc9a","6bad2a6dc37cea5d"]]},{"id":"77ce9a8be017a108","type":"random","z":"08dc41d47d4d9e09","name":"temp","low":"10","high":"45","inte":"true","property":"payload","x":310,"y":440,"wires":[["a2b84168d315fcb0"]]},{"id":"6bad2a6dc37cea5d","type":"function","z":"08dc41d47d4d9e09","name":"function name","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\nvar date_time = yyyy+'/'+MM+'/'+dd+ ' '+h+':'+m+':'+s;\n\nmsg.payload=date_time;\nflow.set('time',date_time);\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":520,"wires":[["90ba57a6962cd376"]]},{"id":"a2b84168d315fcb0","type":"function","z":"08dc41d47d4d9e09","name":"function temp","func":"var temp=msg.payload;\nflow.set('temp',temp);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":440,"wires":[[]]},{"id":"d28a9b235c2408b3","type":"postgres","z":"08dc41d47d4d9e09","postgresdb":"d02a35f8c3a63a7c","name":"DHT11","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":490,"y":400,"wires":[["eee469a9a3490ab3"]]},{"id":"7b87c1255de70067","type":"function","z":"08dc41d47d4d9e09","name":"function ","func":"msg.payload = `CREATE TABLE DHT11sensor(\n user_id serial PRIMARY KEY,\n time timestamp,\n temp float4,\n humidity float4\n)`\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":400,"wires":[["d28a9b235c2408b3"]]},{"id":"90ba57a6962cd376","type":"function","z":"08dc41d47d4d9e09","name":"function","func":"var time1=flow.get('time');\nvar temp1=flow.get('temp');\nvar humidity1=flow.get('humidity');\n\n\nmsg.payload={\n time: time1,\n temp: temp1,\n humidity: humidity1\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":520,"wires":[["4f835c264a3542bb","c6e36a0b21561204"]]},{"id":"eee469a9a3490ab3","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":750,"y":400,"wires":[]},{"id":"4f835c264a3542bb","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":520,"wires":[]},{"id":"c6e36a0b21561204","type":"function","z":"08dc41d47d4d9e09","name":"function Add db ","func":"msg.payload = `INSERT INTO DHT11sensor( time, temp, humidity)\nVALUES (\n '${msg.payload.time}',\n '${msg.payload.temp}', \n '${msg.payload.humidity}')\n returning *\n`\nreturn msg;\n\n\n//msg.payload = `CREATE TABLE DHT11sensor(\n// user_id serial PRIMARY KEY,\n// time timestamp,\n// temp float4,\n// humidity float4\n//)`\n\n//return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":620,"wires":[["e621d8a99137d96f"]]},{"id":"e621d8a99137d96f","type":"postgres","z":"08dc41d47d4d9e09","postgresdb":"d02a35f8c3a63a7c","name":"DHT11","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":730,"y":620,"wires":[["89398818c2863b22"]]},{"id":"89398818c2863b22","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":620,"wires":[]},{"id":"b1e6cd67c3efbc9a","type":"random","z":"08dc41d47d4d9e09","name":"humidity","low":"25","high":"100","inte":"true","property":"payload","x":320,"y":480,"wires":[["b2012bfbe7bb4b05"]]},{"id":"b2012bfbe7bb4b05","type":"function","z":"08dc41d47d4d9e09","name":"function humidity","func":"var humidity=msg.payload;\nflow.set('humidity',humidity);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":480,"wires":[[]]},{"id":"7c706fad4771614c","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var time2 =msg.payload.rows[0].time;\n\nmsg.payload=time2;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":100,"wires":[["cd4adcf359d66588"]]},{"id":"b98af31e5c23d7ac","type":"postgresDB","name":"DHT11","throwErrors":true,"throwErrorsFieldType":"bool","host":"127.0.0.1","hostFieldType":"str","port":"5432","portFieldType":"num","database":"DHT11","databaseFieldType":"str","ssl":"false","sslFieldType":"bool","max":"10","maxFieldType":"num","min":"1","minFieldType":"num","idle":"1000","idleFieldType":"num","connectionTimeout":"10000","connectionTimeoutFieldType":"num","user":"postgres","userFieldType":"str","password":"Alex9981","passwordFieldType":"str"},{"id":"49ca43fc9b95bcc1","type":"ui_group","name":"Current Temperature & Humidity","tab":"50b4e86120098aeb","order":1,"disp":true,"width":"13","collapse":false,"className":""},{"id":"6879ef9ca30c1e34","type":"ui_group","name":"Chart","tab":"50b4e86120098aeb","order":2,"disp":true,"width":"13","collapse":false,"className":""},{"id":"756d53853a29259a","type":"ui_group","name":"Raw Data Table","tab":"50b4e86120098aeb","order":3,"disp":true,"width":"8","collapse":false,"className":""},{"id":"d02a35f8c3a63a7c","type":"postgresdb","cfgname":"DHT11","hostname":"localhost","port":"5432","db":"DHT11","ssl":false},{"id":"50b4e86120098aeb","type":"ui_tab","name":"DHT-11","icon":"dashboard","order":7,"disabled":false,"hidden":false}]</p><p><br /></p><p>更新後</p><p><br /></p><p>[{"id":"acddd911a6412f0a","type":"inject","z":"08dc41d47d4d9e09","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"15","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":130,"y":140,"wires":[["60f82608b91e1010","a7941c012545db2a"]]},{"id":"60f82608b91e1010","type":"postgrestor","z":"08dc41d47d4d9e09","name":"DHT11","query":"SELECT * FROM DHT11sensor order by time desc limit 1;","postgresDB":"b98af31e5c23d7ac","output":true,"outputs":1,"throwErrors":false,"x":290,"y":140,"wires":[["2536c7ad0157dbf2","cd48a2caa41c4e6d","7c706fad4771614c","16216b92fe56954d"]]},{"id":"2536c7ad0157dbf2","type":"ui_gauge","z":"08dc41d47d4d9e09","name":"","group":"49ca43fc9b95bcc1","order":2,"width":"6","height":"4","gtype":"gage","title":"Temperature","label":"C","format":"{{payload.rows[0].temp}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":510,"y":140,"wires":[]},{"id":"cd48a2caa41c4e6d","type":"ui_gauge","z":"08dc41d47d4d9e09","name":"","group":"49ca43fc9b95bcc1","order":3,"width":"6","height":"4","gtype":"gage","title":"Humidity","label":"%","format":"{{payload.rows[0].humidity}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":500,"y":180,"wires":[]},{"id":"cd4adcf359d66588","type":"ui_text","z":"08dc41d47d4d9e09","group":"49ca43fc9b95bcc1","order":1,"width":0,"height":0,"name":"","label":"Update Time: ","format":"{{msg.payload}}","layout":"row-left","className":"","x":730,"y":100,"wires":[]},{"id":"a7941c012545db2a","type":"postgrestor","z":"08dc41d47d4d9e09","name":"DHT11","query":"select TO_CHAR(time, 'YYYY-MM-DD HH:mm:ss') as time,temp,humidity from (SELECT * FROM DHT11sensor order by time desc limit 30) as data order by time;","postgresDB":"b98af31e5c23d7ac","output":true,"outputs":1,"throwErrors":false,"x":290,"y":220,"wires":[["de934747674f4abc","b6869634764c8604","15f7b694306c2f80"]]},{"id":"bc052292a6aa1f41","type":"ui_chart","z":"08dc41d47d4d9e09","name":"","group":"6879ef9ca30c1e34","order":0,"width":"13","height":"4","label":"Temperature","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":690,"y":220,"wires":[[]]},{"id":"de934747674f4abc","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var data = [];\nvar label = [];\nvar i;\ndata.push([]);\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n data[0].push(msg.payload.rows[i]['temp']);\n}\n\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n label.push(msg.payload.rows[i]['time']);\n}\n\nvar m={\n \"series\":[\"Temperature\"],\n \"data\":data,\n \"labels\":label\n};\n\nreturn {payload:[m]};\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":220,"wires":[["bc052292a6aa1f41"]]},{"id":"864f41576f8d37a8","type":"ui_chart","z":"08dc41d47d4d9e09","name":"","group":"6879ef9ca30c1e34","order":0,"width":"13","height":"4","label":"Humidity","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"","ymax":"","removeOlder":1,"removeOlderPoints":"","removeOlderUnit":"3600","cutout":0,"useOneColor":false,"useUTC":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"outputs":1,"useDifferentColor":false,"className":"","x":680,"y":260,"wires":[[]]},{"id":"b6869634764c8604","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var data = [];\nvar label = [];\nvar i;\ndata.push([]);\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n data[0].push(msg.payload.rows[i]['humidity']);\n}\n\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n label.push(msg.payload.rows[i]['time']);\n}\n\nvar m={\n \"series\":[\"Humidity\"],\n \"data\":data,\n \"labels\":label\n};\n\nreturn {payload:[m]};\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":260,"wires":[["864f41576f8d37a8"]]},{"id":"15f7b694306c2f80","type":"function","z":"08dc41d47d4d9e09","name":"create array","func":"\nvar i;\nvar list_data = [];\nfor (i = 0; i < msg.payload.rows.length; i++) \n{\n list_data.push({\"No\":i+1,\"Time\":msg.payload.rows[i]['time'],\"Temperature\":msg.payload.rows[i]['temp'],\n \"Humidity\":msg.payload.rows[i]['humidity']});\n}\n\nmsg.payload = list_data;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":300,"wires":[["997a83e59f6a3cdc"]]},{"id":"997a83e59f6a3cdc","type":"ui_table","z":"08dc41d47d4d9e09","group":"756d53853a29259a","name":"","order":0,"width":"8","height":"14","columns":[],"outputs":1,"cts":true,"x":670,"y":300,"wires":[[]]},{"id":"7fd94d3ea87889b9","type":"template","z":"08dc41d47d4d9e09","name":"","field":"payload","fieldType":"msg","format":"html","syntax":"mustache","template":"\nTime: {{payload.time}} <br>\nTemperature: {{payload.temp}} <br>\nHumidity: {{payload.humidity}} <br>\n","output":"str","x":670,"y":40,"wires":[["5d991cfa9fbd5624"]]},{"id":"5d991cfa9fbd5624","type":"ui_toast","z":"08dc41d47d4d9e09","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"","raw":true,"className":"","topic":"Data","name":"","x":830,"y":40,"wires":[]},{"id":"b7a62274d2e3e00a","type":"inject","z":"08dc41d47d4d9e09","name":"CREATE","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":400,"wires":[["7b87c1255de70067"]]},{"id":"47c2279e27890264","type":"inject","z":"08dc41d47d4d9e09","name":"INSERT 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"5","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":130,"y":480,"wires":[["77ce9a8be017a108","b1e6cd67c3efbc9a","6bad2a6dc37cea5d"]]},{"id":"77ce9a8be017a108","type":"random","z":"08dc41d47d4d9e09","name":"temp","low":"10","high":"45","inte":"true","property":"payload","x":310,"y":440,"wires":[["a2b84168d315fcb0"]]},{"id":"6bad2a6dc37cea5d","type":"function","z":"08dc41d47d4d9e09","name":"function name","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\nvar date_time = yyyy+'/'+MM+'/'+dd+ ' '+h+':'+m+':'+s;\n\nmsg.payload=date_time;\nflow.set('time',date_time);\nreturn msg;\n\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":520,"wires":[["90ba57a6962cd376"]]},{"id":"a2b84168d315fcb0","type":"function","z":"08dc41d47d4d9e09","name":"function temp","func":"var temp=msg.payload;\nflow.set('temp',temp);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":440,"wires":[[]]},{"id":"d28a9b235c2408b3","type":"postgres","z":"08dc41d47d4d9e09","postgresdb":"d02a35f8c3a63a7c","name":"DHT11","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":490,"y":400,"wires":[["eee469a9a3490ab3"]]},{"id":"7b87c1255de70067","type":"function","z":"08dc41d47d4d9e09","name":"function ","func":"msg.payload = `CREATE TABLE DHT11sensor(\n user_id serial PRIMARY KEY,\n time timestamp,\n temp float4,\n humidity float4\n)`\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":400,"wires":[["d28a9b235c2408b3"]]},{"id":"90ba57a6962cd376","type":"function","z":"08dc41d47d4d9e09","name":"function","func":"var time1=flow.get('time');\nvar temp1=flow.get('temp');\nvar humidity1=flow.get('humidity');\n\n\nmsg.payload={\n time: time1,\n temp: temp1,\n humidity: humidity1\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":520,"wires":[["4f835c264a3542bb","c6e36a0b21561204"]]},{"id":"eee469a9a3490ab3","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":750,"y":400,"wires":[]},{"id":"4f835c264a3542bb","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":520,"wires":[]},{"id":"c6e36a0b21561204","type":"function","z":"08dc41d47d4d9e09","name":"function Add db ","func":"msg.payload = `INSERT INTO DHT11sensor( time, temp, humidity)\nVALUES (\n '${msg.payload.time}',\n '${msg.payload.temp}', \n '${msg.payload.humidity}')\n returning *\n`\nreturn msg;\n\n\n//msg.payload = `CREATE TABLE DHT11sensor(\n// user_id serial PRIMARY KEY,\n// time timestamp,\n// temp float4,\n// humidity float4\n//)`\n\n//return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":620,"wires":[["e621d8a99137d96f"]]},{"id":"e621d8a99137d96f","type":"postgres","z":"08dc41d47d4d9e09","postgresdb":"d02a35f8c3a63a7c","name":"DHT11","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":730,"y":620,"wires":[["89398818c2863b22"]]},{"id":"89398818c2863b22","type":"debug","z":"08dc41d47d4d9e09","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":620,"wires":[]},{"id":"b1e6cd67c3efbc9a","type":"random","z":"08dc41d47d4d9e09","name":"humidity","low":"25","high":"100","inte":"true","property":"payload","x":320,"y":480,"wires":[["b2012bfbe7bb4b05"]]},{"id":"b2012bfbe7bb4b05","type":"function","z":"08dc41d47d4d9e09","name":"function humidity","func":"var humidity=msg.payload;\nflow.set('humidity',humidity);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":480,"wires":[[]]},{"id":"7c706fad4771614c","type":"function","z":"08dc41d47d4d9e09","name":"Format chart","func":"var time2 =msg.payload.rows[0].time;\n\nmsg.payload=time2;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":100,"wires":[["cd4adcf359d66588"]]},{"id":"16216b92fe56954d","type":"function","z":"08dc41d47d4d9e09","name":"function 96","func":"\nvar time2 =msg.payload.rows[0].time;\nvar temp2 =msg.payload.rows[0].temp;\nvar humidity2 =msg.payload.rows[0].humidity;\n\nmsg.payload.time=time2;\nmsg.payload.temp=temp2;\nmsg.payload.humidity=humidity2;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":40,"wires":[["7fd94d3ea87889b9"]]},{"id":"b98af31e5c23d7ac","type":"postgresDB","name":"DHT11","throwErrors":true,"throwErrorsFieldType":"bool","host":"127.0.0.1","hostFieldType":"str","port":"5432","portFieldType":"num","database":"DHT11","databaseFieldType":"str","ssl":"false","sslFieldType":"bool","max":"10","maxFieldType":"num","min":"1","minFieldType":"num","idle":"1000","idleFieldType":"num","connectionTimeout":"10000","connectionTimeoutFieldType":"num","user":"postgres","userFieldType":"str","password":"Alex9981","passwordFieldType":"str"},{"id":"49ca43fc9b95bcc1","type":"ui_group","name":"Current Temperature & Humidity","tab":"50b4e86120098aeb","order":1,"disp":true,"width":"13","collapse":false,"className":""},{"id":"6879ef9ca30c1e34","type":"ui_group","name":"Chart","tab":"50b4e86120098aeb","order":2,"disp":true,"width":"13","collapse":false,"className":""},{"id":"756d53853a29259a","type":"ui_group","name":"Raw Data Table","tab":"50b4e86120098aeb","order":3,"disp":true,"width":"8","collapse":false,"className":""},{"id":"d02a35f8c3a63a7c","type":"postgresdb","cfgname":"DHT11","hostname":"localhost","port":"5432","db":"DHT11","ssl":false},{"id":"50b4e86120098aeb","type":"ui_tab","name":"DHT-11","icon":"dashboard","order":7,"disabled":false,"hidden":false}]</p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-17549663654607003322024-03-26T05:06:00.000-07:002024-03-26T05:07:14.957-07:00PostgerSQL 與 Node-Red<p><span style="font-size: large;"> PostgerSQL DataBase 與 Node-Red</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhraH3mxR5Kd0Pl4FXWHQheDE9jMv9nqbEKdUIyp99tS1redKMbcMgBt6OWz0WMSAm_LV4z9VEyk_STRXma4cOApDw9ZCzIXWH9FmbjCSYGu319jP6095_J_vif2nJlRZOnuZQZzHfmZdj83bqZiz56mMcqQWr37J7K0HV_79eATC3pgM3BYnZlQxGn8Zk/s706/2024-03-26%2010%2051%2046.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="636" data-original-width="706" height="576" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhraH3mxR5Kd0Pl4FXWHQheDE9jMv9nqbEKdUIyp99tS1redKMbcMgBt6OWz0WMSAm_LV4z9VEyk_STRXma4cOApDw9ZCzIXWH9FmbjCSYGu319jP6095_J_vif2nJlRZOnuZQZzHfmZdj83bqZiz56mMcqQWr37J7K0HV_79eATC3pgM3BYnZlQxGn8Zk/w640-h576/2024-03-26%2010%2051%2046.png" width="640" /></a></div><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSEvJgjPNz5-73MraASwgA7nxeZZbRHBvZNYeKeYAAM1LVIn-8NVWBgUBqSVidCd8IvYNcriIxhdx22sMpcQ2B0pHJSmXqFUakgmxsuWzSuXpeq_XjM-qdw1guwVOb8VGu-Mv-0Gu-AWE5WaEc_t3JNsj08qMeR0k6EMzlc4xb6xlsYq75ON5ZQ3FohP0/s984/2024-03-26%2008%2044%2004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="752" data-original-width="984" height="490" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSEvJgjPNz5-73MraASwgA7nxeZZbRHBvZNYeKeYAAM1LVIn-8NVWBgUBqSVidCd8IvYNcriIxhdx22sMpcQ2B0pHJSmXqFUakgmxsuWzSuXpeq_XjM-qdw1guwVOb8VGu-Mv-0Gu-AWE5WaEc_t3JNsj08qMeR0k6EMzlc4xb6xlsYq75ON5ZQ3FohP0/w640-h490/2024-03-26%2008%2044%2004.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpRXA7NwGow6xRJHIk9Hw_zOfsvbhBUvfK7pmVZMKcBV0z-6YQM-C26frZ1SnKXklmnQKPxrZwXBpyz2KiZA9crsagfzLpxviSrbUIAPLaHlkGNburcQNZEiOpZa1zlXzqRXXqx43Spz22nzq1QJLk8RkALmGY-7ezCB-KvaWWeuTvzL43cVkIVnfYAJI/s715/2024-03-26%2008%2044%2043.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="482" data-original-width="715" height="432" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpRXA7NwGow6xRJHIk9Hw_zOfsvbhBUvfK7pmVZMKcBV0z-6YQM-C26frZ1SnKXklmnQKPxrZwXBpyz2KiZA9crsagfzLpxviSrbUIAPLaHlkGNburcQNZEiOpZa1zlXzqRXXqx43Spz22nzq1QJLk8RkALmGY-7ezCB-KvaWWeuTvzL43cVkIVnfYAJI/w640-h432/2024-03-26%2008%2044%2043.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJONUCBJMAT-bkqPwRHTXcr84QeSaCiZQx1c_ywAcK0MKc4536dzwtLYepPcQcLkHCoWq2y9LkOrbckgFW1pooSMy-mxR1Eh67oIFkEX2YVRHAMlqTIZaZVjBjCNsb18cb8jmBxZtBRw9tSObI6fuJDKA4yP1w64gm49sF50Aj9HaIwDIirp4CsqVQZk/s733/2024-03-26%2008%2056%2032.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="616" data-original-width="733" height="538" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguJONUCBJMAT-bkqPwRHTXcr84QeSaCiZQx1c_ywAcK0MKc4536dzwtLYepPcQcLkHCoWq2y9LkOrbckgFW1pooSMy-mxR1Eh67oIFkEX2YVRHAMlqTIZaZVjBjCNsb18cb8jmBxZtBRw9tSObI6fuJDKA4yP1w64gm49sF50Aj9HaIwDIirp4CsqVQZk/w640-h538/2024-03-26%2008%2056%2032.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnI7XnkSIHqxumnmj5xFBWDKQ87BhVtZTdI2hBcj4uyPL3q70fn1m4ucfQ6XqHutYDHCY4wgyQbPtf-hSMqoO4zkmLSX8CtxL6fZQskpHlooLAhUs7KERYHVQ1ozj1hyphenhyphen74PVeTLdQ5_Du2rgJPso-Bx2WO7eaAfrxWCUpL7Gf1wvD_wicWOyUorZOAhsk/s1366/2024-03-26%2008%2056%2050.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="698" data-original-width="1366" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnI7XnkSIHqxumnmj5xFBWDKQ87BhVtZTdI2hBcj4uyPL3q70fn1m4ucfQ6XqHutYDHCY4wgyQbPtf-hSMqoO4zkmLSX8CtxL6fZQskpHlooLAhUs7KERYHVQ1ozj1hyphenhyphen74PVeTLdQ5_Du2rgJPso-Bx2WO7eaAfrxWCUpL7Gf1wvD_wicWOyUorZOAhsk/w640-h328/2024-03-26%2008%2056%2050.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgssu2UNNUlUoHR9dxn9vXVYtT73vVBQiUme7boTmqEZOhf01pypm7Qk9rWbTcE-A2eqn-ct7Wk2v1vVXKo5759oxe24TKp2oVYPxizvD244eQNYmTdgdvlEp-fzRMjVax6QAPdvdSk82J5r_ZUUll7-VySTHSWsH2jUuJ6cC_tYoM4WSORAim2LtDxYHk/s1006/2024-03-26%2008%2057%2027.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="767" data-original-width="1006" height="488" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgssu2UNNUlUoHR9dxn9vXVYtT73vVBQiUme7boTmqEZOhf01pypm7Qk9rWbTcE-A2eqn-ct7Wk2v1vVXKo5759oxe24TKp2oVYPxizvD244eQNYmTdgdvlEp-fzRMjVax6QAPdvdSk82J5r_ZUUll7-VySTHSWsH2jUuJ6cC_tYoM4WSORAim2LtDxYHk/w640-h488/2024-03-26%2008%2057%2027.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQkaXN3HQFHlQOVPm6MW6wN9C_-RCbZ5epVKth9xAHYFoUl1Sj3bEFzvwWVkkEXHJemma1tKAfuF6NOY0u6HVWqEm4yVsuNu0VAWdQ1PqMMLicCfbXa8Msof9x1w_ohjCgUOQs1uJK24HwkHhvk0ny01zShG3qM2hmz4LnfvDYkIHH_13O3zmJr2aeNf8/s851/2024-03-26%2010%2033%2054.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="612" data-original-width="851" height="460" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQkaXN3HQFHlQOVPm6MW6wN9C_-RCbZ5epVKth9xAHYFoUl1Sj3bEFzvwWVkkEXHJemma1tKAfuF6NOY0u6HVWqEm4yVsuNu0VAWdQ1PqMMLicCfbXa8Msof9x1w_ohjCgUOQs1uJK24HwkHhvk0ny01zShG3qM2hmz4LnfvDYkIHH_13O3zmJr2aeNf8/w640-h460/2024-03-26%2010%2033%2054.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0koyXK4Q5_x5cpM39UOyi32cSfZwJqIdpx4h__K_0u4Ncdiun2aK_srw_c5Eluwt_kAE0SoJCdQdjhJLenfyKVi4IrCqAeFCnOI1nL-e-fphEAbiCiaywgziuvnrngWVj726x4otr2K91nvizziZXWJTz-IooQ8gPUaLYjShwi79-9G8bDFrSsNim_A/s691/2024-03-26%2010%2035%2029.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="691" data-original-width="543" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX0koyXK4Q5_x5cpM39UOyi32cSfZwJqIdpx4h__K_0u4Ncdiun2aK_srw_c5Eluwt_kAE0SoJCdQdjhJLenfyKVi4IrCqAeFCnOI1nL-e-fphEAbiCiaywgziuvnrngWVj726x4otr2K91nvizziZXWJTz-IooQ8gPUaLYjShwi79-9G8bDFrSsNim_A/w502-h640/2024-03-26%2010%2035%2029.png" width="502" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifSnOuGBKlzJ4S6mlEf0mBnKwCx_YOdYLu7C3uH_YNFvFefYkjrq2VVc6_JrcpAAOGAuPqStuv57oLjnBNbkVEG5-y4NXiL80-0kSa_8Bsvz4nZC2MN7FG70ZTvoQLbWxrYqB2Mqc2hNMObXkMANo9t-KalSmf3YtE65ldRlh0SPetwti070gfI2atOdg/s1257/2024-03-26%2010%2037%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="728" data-original-width="1257" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifSnOuGBKlzJ4S6mlEf0mBnKwCx_YOdYLu7C3uH_YNFvFefYkjrq2VVc6_JrcpAAOGAuPqStuv57oLjnBNbkVEG5-y4NXiL80-0kSa_8Bsvz4nZC2MN7FG70ZTvoQLbWxrYqB2Mqc2hNMObXkMANo9t-KalSmf3YtE65ldRlh0SPetwti070gfI2atOdg/w640-h370/2024-03-26%2010%2037%2031.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6suM5eDeChpzRzuzk1XVCAqxw3Bvo7iysFrpGGv4VeZldU3Uh_A4R4mZLt5dxntDfJ63JZbYvwC6QniMopQHElEIpNknJ1TC3xei1Bzq1Gt3gFCDNlzdr0QTUmV8tUNEeA5BlK10XOXZ8UPaulCSs5NWhESS7xE8SAd2-PImaku4OCf3ebCUwss4O9tc/s1238/2024-03-26%2010%2038%2017.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="721" data-original-width="1238" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6suM5eDeChpzRzuzk1XVCAqxw3Bvo7iysFrpGGv4VeZldU3Uh_A4R4mZLt5dxntDfJ63JZbYvwC6QniMopQHElEIpNknJ1TC3xei1Bzq1Gt3gFCDNlzdr0QTUmV8tUNEeA5BlK10XOXZ8UPaulCSs5NWhESS7xE8SAd2-PImaku4OCf3ebCUwss4O9tc/w640-h372/2024-03-26%2010%2038%2017.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjORtP6GKpg2WXRcxU5yjTXtKCQH897-hXWpAKGH6ssBtqn_BgBrBD-Yoo-N2UhJfcFW0VGmeb599_JsV63Desz7A3Q8Kt9pnmsaB9ou965xW_rqvXx2Jg-IkyKJSSJG_e2DAs-SB5k4xhTVBfIUaNwBNdSvvhkAzj_q0lm72oP1z8HY515cUtSi_hCud0/s1052/2024-03-26%2010%2040%2035.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="881" data-original-width="1052" height="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjORtP6GKpg2WXRcxU5yjTXtKCQH897-hXWpAKGH6ssBtqn_BgBrBD-Yoo-N2UhJfcFW0VGmeb599_JsV63Desz7A3Q8Kt9pnmsaB9ou965xW_rqvXx2Jg-IkyKJSSJG_e2DAs-SB5k4xhTVBfIUaNwBNdSvvhkAzj_q0lm72oP1z8HY515cUtSi_hCud0/w640-h536/2024-03-26%2010%2040%2035.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgENiN60xM_Awdnx9jDKwqywAbX4n1nk_L9UIonR1c9XxIGTTrvlj-tptoKkN5Pkr4AMTYBsui7mNgjEVuyooOOtg07Y50aXVeLXRvcsZH8hDprxWt6o3V6OffAaVTj3p0QotX6bhofMRbnJlnUL7L6j5Vytj0GfKtmXupXlHU2LHr91yYmIcSXbUIh6AE/s1361/2024-03-26%2010%2042%2044.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="862" data-original-width="1361" height="406" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgENiN60xM_Awdnx9jDKwqywAbX4n1nk_L9UIonR1c9XxIGTTrvlj-tptoKkN5Pkr4AMTYBsui7mNgjEVuyooOOtg07Y50aXVeLXRvcsZH8hDprxWt6o3V6OffAaVTj3p0QotX6bhofMRbnJlnUL7L6j5Vytj0GfKtmXupXlHU2LHr91yYmIcSXbUIh6AE/w640-h406/2024-03-26%2010%2042%2044.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsEMVg4ua4a-p4p4LE2Tc87doZk9ncN-kiTF-u-uZ6IB7uv0genNZe2J5bbzLP8XxtRFDudPJ-Y-O_71GtPlirjVYw59bjAd2tkEXDwYHbGIw5WUZR5loNQGxoqwZudonkK9QQInUHZG98pApA8UAkGBMJj_mbDFr-ryJO1nfr58G0E5M7PsvzcPYqALA/s1378/2024-03-26%2010%2044%2023.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="858" data-original-width="1378" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsEMVg4ua4a-p4p4LE2Tc87doZk9ncN-kiTF-u-uZ6IB7uv0genNZe2J5bbzLP8XxtRFDudPJ-Y-O_71GtPlirjVYw59bjAd2tkEXDwYHbGIw5WUZR5loNQGxoqwZudonkK9QQInUHZG98pApA8UAkGBMJj_mbDFr-ryJO1nfr58G0E5M7PsvzcPYqALA/w640-h398/2024-03-26%2010%2044%2023.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeDWzB81aYa24LfaEabUPxJ5FxRNjUAGkngrODw2u4MxVa6j2KVv3x8lfWLFVNDNso_m1-9Lpt3y4PsI-TmEWRc7PuiEPyrMub3QQheLp-UB4wt4Fq8BWJWEZi2HX6bLwJ3n1HguMJ1qSjxF5ExE9lC-foH265cBnUHssNjsQCtajv5FjtdVpxDDDBAc/s876/2024-03-26%2015%2035%2057.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="696" data-original-width="876" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeDWzB81aYa24LfaEabUPxJ5FxRNjUAGkngrODw2u4MxVa6j2KVv3x8lfWLFVNDNso_m1-9Lpt3y4PsI-TmEWRc7PuiEPyrMub3QQheLp-UB4wt4Fq8BWJWEZi2HX6bLwJ3n1HguMJ1qSjxF5ExE9lC-foH265cBnUHssNjsQCtajv5FjtdVpxDDDBAc/w640-h508/2024-03-26%2015%2035%2057.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKM8UufwAKI4W3qIRqnMaeetjGmM0bUlGbCdVyiQcSv_4Gyd4alBlycobXJuf1YVOXVxlbhzfhVXdttqmUtgFnze3XxBySf4-6KnwAAYOc7Mo1KgSv7smaZMcJo_hZoUcCBum_sn2siQ_33bCHEc9Y53qn6gjmcu3SlPyrAjEIsu77lfP21wjyHxH7y9c/s1220/2024-03-26%2015%2037%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="1220" height="368" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKM8UufwAKI4W3qIRqnMaeetjGmM0bUlGbCdVyiQcSv_4Gyd4alBlycobXJuf1YVOXVxlbhzfhVXdttqmUtgFnze3XxBySf4-6KnwAAYOc7Mo1KgSv7smaZMcJo_hZoUcCBum_sn2siQ_33bCHEc9Y53qn6gjmcu3SlPyrAjEIsu77lfP21wjyHxH7y9c/w640-h368/2024-03-26%2015%2037%2012.png" width="640" /></a></div><br /><span style="font-size: large;"><br /></span><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmEzLyl04XSkvkbZK-aouP_4dvpp60vvw1TEXUsbVMJQW9lWmewI74Vfhn8n5byrnavhZ25ldig3tCrfiv25eM3IgFvQ5nJ7HcTt63jrRYnU_YOSFgbLgLpxBZ8hKHJYKPZxrxyFBqADgtEj8qHI3a70AyV-w3-M1gjWrqZxe1pswXLDhOYOErbvFUGnw/s534/2024-03-26%2011%2004%2020.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="447" data-original-width="534" height="536" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmEzLyl04XSkvkbZK-aouP_4dvpp60vvw1TEXUsbVMJQW9lWmewI74Vfhn8n5byrnavhZ25ldig3tCrfiv25eM3IgFvQ5nJ7HcTt63jrRYnU_YOSFgbLgLpxBZ8hKHJYKPZxrxyFBqADgtEj8qHI3a70AyV-w3-M1gjWrqZxe1pswXLDhOYOErbvFUGnw/w640-h536/2024-03-26%2011%2004%2020.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPffGhYdcsSDg8jPo4BOEIsqVoQ8Xro11u3N16a0T9a8r2vD5IrbVhky_Tcf9Fx2w5K7jriFFRRGHO6q_MuYl2w3xDUyRc3Cwy4f2h9I3-QAhbft5s3l-SY7BgQoGua_Y3Gwm93GXIKoVuWCS_Wq9IBxpkZsNt0fG0OYhjuXi8mITVAiDDZrKqv9whWgY/s638/2024-03-26%2011%2005%2024.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="638" data-original-width="565" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPffGhYdcsSDg8jPo4BOEIsqVoQ8Xro11u3N16a0T9a8r2vD5IrbVhky_Tcf9Fx2w5K7jriFFRRGHO6q_MuYl2w3xDUyRc3Cwy4f2h9I3-QAhbft5s3l-SY7BgQoGua_Y3Gwm93GXIKoVuWCS_Wq9IBxpkZsNt0fG0OYhjuXi8mITVAiDDZrKqv9whWgY/w566-h640/2024-03-26%2011%2005%2024.png" width="566" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0t7IO5ZOBLnlPYHKguh-MskpaIbVj0DS0vndS6LgH5KVxUATxMbR4SQQVz9DhWICg5h24cGPCsPeuOpFqt4q0lL_NacfciI8xQwGAxsnWg4sN9PphJW1M22fq_9hlZPES1o1QF6oSlwCXQw4uDligLdV8XGbyU2Syt2D9ORqhUFUiuKyQl2KjRUDzzAs/s911/2024-03-26%2011%2014%2020.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="664" data-original-width="911" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0t7IO5ZOBLnlPYHKguh-MskpaIbVj0DS0vndS6LgH5KVxUATxMbR4SQQVz9DhWICg5h24cGPCsPeuOpFqt4q0lL_NacfciI8xQwGAxsnWg4sN9PphJW1M22fq_9hlZPES1o1QF6oSlwCXQw4uDligLdV8XGbyU2Syt2D9ORqhUFUiuKyQl2KjRUDzzAs/w640-h466/2024-03-26%2011%2014%2020.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9RCguZFLriKDnfyqniLTwsMV6KjER_orIDCEp0TFi93rnfc_mVJ6NCrHe_tEYSyVSYqt_ikvYuiyAQVX3WEjlQzL5iGcCvH8B9fNq7Klfkjrz0csnL_5V6nXmaVNCarQqj3mQsuSA29K3AuCpAIdSqJu4qdDkIXIe0-nIl-X7ncUSe_b-xAL2_ikD24c/s922/2024-03-26%2011%2016%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="542" data-original-width="922" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9RCguZFLriKDnfyqniLTwsMV6KjER_orIDCEp0TFi93rnfc_mVJ6NCrHe_tEYSyVSYqt_ikvYuiyAQVX3WEjlQzL5iGcCvH8B9fNq7Klfkjrz0csnL_5V6nXmaVNCarQqj3mQsuSA29K3AuCpAIdSqJu4qdDkIXIe0-nIl-X7ncUSe_b-xAL2_ikD24c/w640-h376/2024-03-26%2011%2016%2012.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCzHKsIpnMtzrz9q413cv3q3ybWSvTUj6K9xaHmT7MMAo3AlmYNF_RVg1FMBJeKjq50aNKdQR0mpjqnkYVPnjKY3I8E_e0vGOMigR-ORpKgLxDTUuxS_Q4al5SQThEVjT-xJh2RXyjDyK5UlcCur6t2ksp1V4YfGKbno9UtO5EsJsKAeak0a7sJKYN7pA/s936/2024-03-26%2011%2017%2037.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="667" data-original-width="936" height="456" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCzHKsIpnMtzrz9q413cv3q3ybWSvTUj6K9xaHmT7MMAo3AlmYNF_RVg1FMBJeKjq50aNKdQR0mpjqnkYVPnjKY3I8E_e0vGOMigR-ORpKgLxDTUuxS_Q4al5SQThEVjT-xJh2RXyjDyK5UlcCur6t2ksp1V4YfGKbno9UtO5EsJsKAeak0a7sJKYN7pA/w640-h456/2024-03-26%2011%2017%2037.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh5qU3A6IqtlxBZsw-G5hXI3yu-Jaol84HtckgxGR4iMpYd0lgt9A4tmqvFBh-t2UArMU1PuYOYerBB11TfPAV8C3hTpVgQBeMf_P-Ul8eLXshD8STYlvNB0mr0c4H5GQ543LhQcz1nOs0NUQvHn4LwGDkr6tih4LyYeDp227Kr25M1VOzyGec2t9iTiU/s991/2024-03-26%2014%2043%2035.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="584" data-original-width="991" height="378" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh5qU3A6IqtlxBZsw-G5hXI3yu-Jaol84HtckgxGR4iMpYd0lgt9A4tmqvFBh-t2UArMU1PuYOYerBB11TfPAV8C3hTpVgQBeMf_P-Ul8eLXshD8STYlvNB0mr0c4H5GQ543LhQcz1nOs0NUQvHn4LwGDkr6tih4LyYeDp227Kr25M1VOzyGec2t9iTiU/w640-h378/2024-03-26%2014%2043%2035.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZCylaa6rsqlmh3YnG6kTtXqT8Vu7ALP0uZw-ZZlLgLqu4FGZQH9duWLNLzjmTBbs5pX7YqXvE2dhZm_kduYgHHf_1VFzOpR_YS1ga7DnnDMsAcIc-j8T3FK_j_xx0CxHNSNg-xoYgu_Ca1Svgpiwltgva4BqAiEV6anhpYpryUvoCtVOXUXKmktNo3k/s1022/2024-03-26%2015%2034%2014.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="698" data-original-width="1022" height="438" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjSZCylaa6rsqlmh3YnG6kTtXqT8Vu7ALP0uZw-ZZlLgLqu4FGZQH9duWLNLzjmTBbs5pX7YqXvE2dhZm_kduYgHHf_1VFzOpR_YS1ga7DnnDMsAcIc-j8T3FK_j_xx0CxHNSNg-xoYgu_Ca1Svgpiwltgva4BqAiEV6anhpYpryUvoCtVOXUXKmktNo3k/w640-h438/2024-03-26%2015%2034%2014.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJZpkMccxCLKj1gpr4TMKmIgBMShXs-KV2dFQtBv6kjWtiiTA8z_uvjRN36FZBSjeBgAGUyuuuHwCZ3l9Nty_P6-8m2ZfcdYtPItxLbjjuicOcgsJaAsAdOTF_hPkCjcm42R4m4WJpCwn5rGUwzHaIu-nUwwuwTzwcZo2KtPVoBIUHWap4NiiE00xRr3Y/s1390/2024-03-26%2016%2015%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="705" data-original-width="1390" height="324" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJZpkMccxCLKj1gpr4TMKmIgBMShXs-KV2dFQtBv6kjWtiiTA8z_uvjRN36FZBSjeBgAGUyuuuHwCZ3l9Nty_P6-8m2ZfcdYtPItxLbjjuicOcgsJaAsAdOTF_hPkCjcm42R4m4WJpCwn5rGUwzHaIu-nUwwuwTzwcZo2KtPVoBIUHWap4NiiE00xRr3Y/w640-h324/2024-03-26%2016%2015%2012.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV92phZjQRbWuKgxOWcO0-prdnXEPZkCkuh7aPXzztPZgzrgl8L0gVBc9OfTllNg6bhg4of6Aj0ZbZRtqIwAyomiy8JHl84D88GejPz6Xi9HBp7TNxle-h2-l9Tth6J_eVtzG6ljJ7k5y_t9ooZ5UlrAcuzgTCf8lgz_ObjBaSzS8gardM8vDFaFML4Cg/s998/2024-03-26%2017%2012%2044.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="884" data-original-width="998" height="566" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV92phZjQRbWuKgxOWcO0-prdnXEPZkCkuh7aPXzztPZgzrgl8L0gVBc9OfTllNg6bhg4of6Aj0ZbZRtqIwAyomiy8JHl84D88GejPz6Xi9HBp7TNxle-h2-l9Tth6J_eVtzG6ljJ7k5y_t9ooZ5UlrAcuzgTCf8lgz_ObjBaSzS8gardM8vDFaFML4Cg/w640-h566/2024-03-26%2017%2012%2044.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3zX1bL2BfLRAueF8IQ6NoL4iFtMQl_Fndpm4zn2Mw2_hNyUumbreK-NF7-rw9v5Edqv12yXg6hwoCdC5Efus8PAm8IhAegEbqBR7TafEVIn7bl76l_q8mrQ4WPt3Z9JaMZ1Vm6BBfAgvFOIEe5We6XN-e_v5PDxsdIOkg8OB7xyQ83TKT3oZIhwJPPU/s1043/2024-03-26%2017%2014%2044.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="869" data-original-width="1043" height="534" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS3zX1bL2BfLRAueF8IQ6NoL4iFtMQl_Fndpm4zn2Mw2_hNyUumbreK-NF7-rw9v5Edqv12yXg6hwoCdC5Efus8PAm8IhAegEbqBR7TafEVIn7bl76l_q8mrQ4WPt3Z9JaMZ1Vm6BBfAgvFOIEe5We6XN-e_v5PDxsdIOkg8OB7xyQ83TKT3oZIhwJPPU/w640-h534/2024-03-26%2017%2014%2044.png" width="640" /></a></div><br /><span style="font-size: medium;"><br /></span><p></p><p><span style="font-size: medium;">[{"id":"368fd7c606e21cb8","type":"function","z":"332ada08f7c3884c","name":"function ","func":"msg.payload = `CREATE TABLE users(\n user_id serial PRIMARY KEY,\n name TEXT,\n age INTEGER,\n country TEXT\n)`\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":80,"wires":[["022940eec34e041c"]]},{"id":"a6fd40995423c258","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":770,"y":80,"wires":[]},{"id":"dbf51f2fcc3b143f","type":"function","z":"332ada08f7c3884c","name":"function Add db ","func":"msg.payload = `INSERT INTO users(name, age, country)\nVALUES (\n '${msg.payload.name}',\n '${msg.payload.age}', \n '${msg.payload.counrty}')\n returning *\n`\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":300,"wires":[["7599576986151811","dd33360f7276583f"]]},{"id":"5d3303b659ae7f6a","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":300,"wires":[]},{"id":"5aa6c63c158de02d","type":"inject","z":"332ada08f7c3884c","name":"SELECT","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":360,"wires":[["4cbfc7dcace15357"]]},{"id":"60a1d235017ebe03","type":"inject","z":"332ada08f7c3884c","name":"DELETE","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":520,"wires":[["94046098bbf1addc"]]},{"id":"c844e70b99dcd33a","type":"inject","z":"332ada08f7c3884c","name":"DROP TABLE","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"DROP TABLE LEDSTATUS","payload":"","payloadType":"date","x":150,"y":620,"wires":[["0a43d4e75df79b55"]]},{"id":"3a4d50f5cdcd3f0c","type":"inject","z":"332ada08f7c3884c","name":"View Records","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":150,"y":680,"wires":[["509b81485d309434"]]},{"id":"82d575b127105d8d","type":"ui_template","z":"332ada08f7c3884c","group":"eac63b546871af8c","name":"UI Table","order":1,"width":6,"height":6,"format":"<table style=\"width:100%\">\n <tr>\n <th>user_id</th> \n <th>name</th> \n <th>age</th> \n <th>country</th>\n </tr>\n <tr ng-repeat=\"x in msg.payload | limitTo:20\">\n <td>{{msg.payload[$index].user_id}}</td>\n <td>{{msg.payload[$index].name}}</td> \n <td>{{msg.payload[$index].age}}</td>\n <td>{{msg.payload[$index].country}}</td> \n </tr>\n</table>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","className":"","x":640,"y":680,"wires":[["4d536e61de01044f"]]},{"id":"99e2ec5923c2c192","type":"inject","z":"332ada08f7c3884c","name":"CREATE","props":[{"p":"payload"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":100,"wires":[["368fd7c606e21cb8"]]},{"id":"73088c78162be0b5","type":"inject","z":"332ada08f7c3884c","name":"INSERT","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":300,"wires":[["994de9c68c3b6035"]]},{"id":"994de9c68c3b6035","type":"function","z":"332ada08f7c3884c","name":"function ","func":"\nmsg.payload={\n name: 'Alex',\n age: 50,\n counrty: '大里'\n}\n\nreturn msg;\n\n//msg.payload = `INSERT INTO users(name, age, country)\n//VALUES (\n// '${msg.payload.name}',\n// '${msg.payload.age}', \n// '${msg.payload.counrty}')\n// returning *\n// `\n//return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":300,"wires":[["dbf51f2fcc3b143f","a09f5660dab67365"]]},{"id":"7599576986151811","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":710,"y":260,"wires":[]},{"id":"a09f5660dab67365","type":"debug","z":"332ada08f7c3884c","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":430,"y":240,"wires":[]},{"id":"4cbfc7dcace15357","type":"function","z":"332ada08f7c3884c","name":"Select","func":"msg.payload = `SELECT * FROM users `\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":270,"y":360,"wires":[["da2b4730565f24be","54a55197ee853aff"]]},{"id":"da2b4730565f24be","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":450,"y":400,"wires":[]},{"id":"4c5713185701dd7a","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":630,"y":360,"wires":[]},{"id":"94046098bbf1addc","type":"function","z":"332ada08f7c3884c","name":"function ","func":"var id=msg.payload;\n\nmsg.payload={\n user_id: id\n}\n\nreturn msg;\n\n//msg.payload = `DELETE FROM users\n//WHERE user_id = ${msg.payload.user_id}\n//RETURNING *;`\n//return msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":520,"wires":[["efa890e372a46018","50114b26c3c776b4"]]},{"id":"efa890e372a46018","type":"function","z":"332ada08f7c3884c","name":"function delete 1 id","func":"msg.payload = `DELETE FROM users\nWHERE user_id = ${msg.payload.user_id}\nRETURNING *;`\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":520,"wires":[["d0d028556668a8c9","401d22293b1f6ebe"]]},{"id":"b178cc2ae4246ed8","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":520,"wires":[]},{"id":"d0d028556668a8c9","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":710,"y":460,"wires":[]},{"id":"50114b26c3c776b4","type":"debug","z":"332ada08f7c3884c","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":470,"y":560,"wires":[]},{"id":"0a43d4e75df79b55","type":"function","z":"332ada08f7c3884c","name":"function ","func":"\nmsg.payload = `DROP TABLE IF EXISTS users` \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":620,"wires":[["bd22e5d304c51305"]]},{"id":"f8d77aa8821a36f2","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":620,"wires":[]},{"id":"509b81485d309434","type":"function","z":"332ada08f7c3884c","name":"Select","func":"msg.payload = `SELECT * FROM users `\n\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":680,"wires":[["4471e445acf1cb53"]]},{"id":"4d536e61de01044f","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":790,"y":680,"wires":[]},{"id":"0955139fc98c2b3a","type":"inject","z":"332ada08f7c3884c","name":"INSERT 2","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":120,"y":160,"wires":[["a1389a3387c03c49","14c6411e71e4a2d8","87e58dab50e5374c"]]},{"id":"a1389a3387c03c49","type":"random-string","z":"332ada08f7c3884c","size":"6","characters":"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMOPQRSTUVWXYZ","property":"payload","x":320,"y":160,"wires":[["883de01c6e83dbce"]]},{"id":"14c6411e71e4a2d8","type":"random-string","z":"332ada08f7c3884c","size":"2","characters":"莿桐佳冬牡丹蘆竹大樹路竹竹塘花壇柳營麻豆竹山楊梅卓蘭","property":"payload","x":320,"y":200,"wires":[["1fc83997d4b318b3"]]},{"id":"87e58dab50e5374c","type":"random","z":"332ada08f7c3884c","name":"","low":"10","high":"75","inte":"true","property":"payload","x":300,"y":120,"wires":[["0a351e32feb580bb"]]},{"id":"217866abe56a5664","type":"debug","z":"332ada08f7c3884c","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":830,"y":160,"wires":[]},{"id":"0a351e32feb580bb","type":"function","z":"332ada08f7c3884c","name":"function age","func":"var age=msg.payload;\nflow.set('age',age);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":510,"y":120,"wires":[[]]},{"id":"41f8d2287274be88","type":"function","z":"332ada08f7c3884c","name":"function","func":"var name1=flow.get('name');\nvar age1=flow.get('age');\nvar counrty1=flow.get('counrty');\n\n\nmsg.payload={\n name: name1,\n age: age1,\n counrty: counrty1\n}\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":160,"wires":[["217866abe56a5664","dbf51f2fcc3b143f"]]},{"id":"883de01c6e83dbce","type":"function","z":"332ada08f7c3884c","name":"function name","func":"var name=msg.payload;\nflow.set('name',name);\nreturn msg;\n\n\n//msg.payload = `INSERT INTO users(name, age, country)\n//VALUES (\n// '${msg.payload.name}',\n// '${msg.payload.age}', \n// '${msg.payload.counrty}')\n// returning *\n// `\n//return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":160,"wires":[["41f8d2287274be88"]]},{"id":"1fc83997d4b318b3","type":"function","z":"332ada08f7c3884c","name":"function counrty","func":"var counrty=msg.payload;\nflow.set('counrty',counrty);\nreturn msg;\n\n\n//msg.payload = `INSERT INTO users(name, age, country)\n//VALUES (\n// '${msg.payload.name}',\n// '${msg.payload.age}', \n// '${msg.payload.counrty}')\n// returning *\n// `\n//return msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":200,"wires":[[]]},{"id":"711b8e83b4705634","type":"ui_button","z":"332ada08f7c3884c","name":"","group":"99c5c3145bc0ee30","order":1,"width":0,"height":0,"passthru":false,"label":"建立資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":60,"wires":[["368fd7c606e21cb8"]]},{"id":"fcbaaa9ea881c669","type":"ui_button","z":"332ada08f7c3884c","name":"","group":"99c5c3145bc0ee30","order":4,"width":0,"height":0,"passthru":false,"label":"刪除一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":440,"wires":[["379b9d0827becc9d"]]},{"id":"76e85b59f83cc448","type":"ui_button","z":"332ada08f7c3884c","name":"","group":"99c5c3145bc0ee30","order":2,"width":0,"height":0,"passthru":false,"label":"新增一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":200,"wires":[["87e58dab50e5374c","a1389a3387c03c49","14c6411e71e4a2d8"]]},{"id":"5dee94da6f9c5176","type":"ui_text_input","z":"332ada08f7c3884c","name":"","label":"刪除的id","tooltip":"","group":"99c5c3145bc0ee30","order":3,"width":0,"height":0,"passthru":true,"mode":"number","delay":300,"topic":"topic","sendOnBlur":true,"className":"","topicType":"msg","x":120,"y":480,"wires":[["88438e9442722009"]]},{"id":"88438e9442722009","type":"function","z":"332ada08f7c3884c","name":"function ","func":"var id=msg.payload;\nflow.set('id',id);\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":480,"wires":[[]]},{"id":"12e5335234757b7c","type":"ui_button","z":"332ada08f7c3884c","name":"","group":"99c5c3145bc0ee30","order":5,"width":0,"height":0,"passthru":false,"label":"刪除資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":580,"wires":[["0a43d4e75df79b55"]]},{"id":"f466b482638634d4","type":"ui_button","z":"332ada08f7c3884c","name":"","group":"99c5c3145bc0ee30","order":6,"width":0,"height":0,"passthru":false,"label":"檢視資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":720,"wires":[["509b81485d309434"]]},{"id":"361c500b6ef7ac2b","type":"link out","z":"332ada08f7c3884c","name":"link out 54","mode":"link","links":["97ecb617f9fa6786"],"x":845,"y":380,"wires":[]},{"id":"97ecb617f9fa6786","type":"link in","z":"332ada08f7c3884c","name":"link in 48","links":["361c500b6ef7ac2b"],"x":295,"y":740,"wires":[["509b81485d309434"]]},{"id":"379b9d0827becc9d","type":"function","z":"332ada08f7c3884c","name":"function ","func":"var id1=flow.get('id');\n\nmsg.payload={\n user_id: id1\n}\n\nreturn msg;\n\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":440,"wires":[["efa890e372a46018"]]},{"id":"022940eec34e041c","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":560,"y":80,"wires":[["a6fd40995423c258"]]},{"id":"dd33360f7276583f","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":720,"y":300,"wires":[["5d3303b659ae7f6a","361c500b6ef7ac2b"]]},{"id":"54a55197ee853aff","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":480,"y":360,"wires":[["4c5713185701dd7a"]]},{"id":"401d22293b1f6ebe","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":720,"y":520,"wires":[["b178cc2ae4246ed8"]]},{"id":"bd22e5d304c51305","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":520,"y":620,"wires":[["f8d77aa8821a36f2"]]},{"id":"4471e445acf1cb53","type":"postgres","z":"332ada08f7c3884c","postgresdb":"b9aae012f9a45a3d","name":"PostgreSQL2","output":true,"perrow":false,"rowspermsg":"1","return_on_error":false,"limit_queries":"0","limit_by":"payload","limit_value":"1","limit_drop_intermediate":false,"limit_drop_if_in_queue":false,"outputs":true,"x":480,"y":680,"wires":[["82d575b127105d8d"]]},{"id":"eac63b546871af8c","type":"ui_group","name":"PostgreSQL2","tab":"564bbb77340e1ba1","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"99c5c3145bc0ee30","type":"ui_group","name":"PostSQL2選單","tab":"564bbb77340e1ba1","order":4,"disp":true,"width":"6","collapse":false,"className":""},{"id":"b9aae012f9a45a3d","type":"postgresdb","cfgname":"PostgreSQL2","hostname":"localhost","port":"5432","db":"PostgreSQL2","ssl":false,"credentials":{}},{"id":"564bbb77340e1ba1","type":"ui_tab","name":"PostgreSQL","icon":"dashboard","order":106,"disabled":false,"hidden":false}]</span></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-27730692455318200432024-03-24T04:12:00.000-07:002024-03-24T04:14:36.078-07:002024產專班 作業2 (模擬 不含ESP32 + MFRC522)<p><span style="font-size: x-large;">2024產專班 作業2 (模擬 不含ESP32 + MFRC522)</span></p><p><span style="font-size: xx-large;">(SQLite的使用)</span></p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY6LNiypQdOu4EoW0cVyaFBbSk09SJhSc-1I0ZihPIVVUwYKeGWJatylaLJdE8PKvL4WA21g8XrrBIqnWFx3yzUMdTbmWx3V0aAXyAamNJFP4am7E3idmDi-2qzt7jb5sD2War6Ib38xxht8O1FpZxpI39EDLZRd2Ium7LKhMqSvvZHJK7IAGEor7MgzE/s1010/2024-03-24%2018%2049%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="717" data-original-width="1010" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjY6LNiypQdOu4EoW0cVyaFBbSk09SJhSc-1I0ZihPIVVUwYKeGWJatylaLJdE8PKvL4WA21g8XrrBIqnWFx3yzUMdTbmWx3V0aAXyAamNJFP4am7E3idmDi-2qzt7jb5sD2War6Ib38xxht8O1FpZxpI39EDLZRd2Ium7LKhMqSvvZHJK7IAGEor7MgzE/w640-h454/2024-03-24%2018%2049%2012.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvjCbHCFqESxudQp-yQKWmPoDTexK_PB7dMPhh5XQIhtRCQB1wFsseFslpzvRATxCQMKt5KFebuKtyhz7It2PCYycUG9gBhlP86VuSH9D4KNCCRBgx3RZk88V3PHbQMFgnKdBlJs4NJR0F1SiwQSPCp-YYNrpQd0B_wg9dw63E9168BvMJKV-4NpQ1Bk/s825/2024-03-24%2018%2050%2016.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="396" data-original-width="825" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUvjCbHCFqESxudQp-yQKWmPoDTexK_PB7dMPhh5XQIhtRCQB1wFsseFslpzvRATxCQMKt5KFebuKtyhz7It2PCYycUG9gBhlP86VuSH9D4KNCCRBgx3RZk88V3PHbQMFgnKdBlJs4NJR0F1SiwQSPCp-YYNrpQd0B_wg9dw63E9168BvMJKV-4NpQ1Bk/w640-h308/2024-03-24%2018%2050%2016.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOKCf3pMASI0cS-SpVazOFXgad9ujn0cN1HTK_heCtqFeXgcBaWa6ZaVklXdsgOcAix9rWenqzAAyp4JJgyAEDqdwsL8OlHkgM3e9ROt2aOGiHtEiaLCN7ArGhKvDECfCI1Jcu6MLAA_cAPtWkBzBCgsMFyQLftb-DhdpouiCUlzanSItS-z8xfrC_dnY/s1007/2024-03-24%2018%2051%2024.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="460" data-original-width="1007" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOKCf3pMASI0cS-SpVazOFXgad9ujn0cN1HTK_heCtqFeXgcBaWa6ZaVklXdsgOcAix9rWenqzAAyp4JJgyAEDqdwsL8OlHkgM3e9ROt2aOGiHtEiaLCN7ArGhKvDECfCI1Jcu6MLAA_cAPtWkBzBCgsMFyQLftb-DhdpouiCUlzanSItS-z8xfrC_dnY/w640-h292/2024-03-24%2018%2051%2024.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxYr55IFvAxrC-96g-9yXLP7dxX4qR_IBuc5S4zEHiTxeMk1_KGsv1jEWCdNFksSwfO3WGl6ROToFtcNE0PuFc5sBqYvG4JnEcL8pT3fuOfIXZcC80ef2n4io4zpGI72PdZDDMNIOmxhyphenhyphenJ1GhJrgB4dUuhtmZ4rV6kN54X75SmAVlYVvQ81aUmtERYUdo/s677/2024-03-24%2018%2053%2026.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="677" data-original-width="496" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxYr55IFvAxrC-96g-9yXLP7dxX4qR_IBuc5S4zEHiTxeMk1_KGsv1jEWCdNFksSwfO3WGl6ROToFtcNE0PuFc5sBqYvG4JnEcL8pT3fuOfIXZcC80ef2n4io4zpGI72PdZDDMNIOmxhyphenhyphenJ1GhJrgB4dUuhtmZ4rV6kN54X75SmAVlYVvQ81aUmtERYUdo/w468-h640/2024-03-24%2018%2053%2026.png" width="468" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDT7Ip_QLIGYZIOrqlrvMkjGF0k4Ch9X2bsqjL9pmRt4XXx1ctjdi_va4vQHBEf_HbfX2sr_AVe4gzpXQm0hdwBvi4i6M-lfKIudUNQsY49B-OPZZ2Xi55nBi1CtkpWPsIp4lf6rYMa5h8zC_n5SJHZ53JlmpPqNLSOw1bncjObjnu1VBWFMGNs2YsIzA/s1013/2024-03-24%2018%2054%2011.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="1013" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDT7Ip_QLIGYZIOrqlrvMkjGF0k4Ch9X2bsqjL9pmRt4XXx1ctjdi_va4vQHBEf_HbfX2sr_AVe4gzpXQm0hdwBvi4i6M-lfKIudUNQsY49B-OPZZ2Xi55nBi1CtkpWPsIp4lf6rYMa5h8zC_n5SJHZ53JlmpPqNLSOw1bncjObjnu1VBWFMGNs2YsIzA/w640-h262/2024-03-24%2018%2054%2011.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVH-jUXZvUxHaRg-blDB3ZBb41DvpEnwPLjyxKz88j8fPwoARnItFZ9t09W-xuRq2uIfut2RARZMBs5N0PAYSPakPIY7pnfYr_xuyiI7J36Ac3gVV13nBqn2FxY1xGb7NaJi5aAfpKrlZR9ZIlJIIGuqxwA8R9UV_vs-eH0hfdWtPmE4VGCLXxowY9yX0/s685/2024-03-24%2018%2055%2025.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="685" data-original-width="516" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVH-jUXZvUxHaRg-blDB3ZBb41DvpEnwPLjyxKz88j8fPwoARnItFZ9t09W-xuRq2uIfut2RARZMBs5N0PAYSPakPIY7pnfYr_xuyiI7J36Ac3gVV13nBqn2FxY1xGb7NaJi5aAfpKrlZR9ZIlJIIGuqxwA8R9UV_vs-eH0hfdWtPmE4VGCLXxowY9yX0/w482-h640/2024-03-24%2018%2055%2025.png" width="482" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjow1DeVqbqEd5BhI2X12GpQuismE7PKPhw8fEULCqMZn5mT322sHHrp1HEgCtJzsx3zOBFC0bj5QtQSCF_M_FIbuZoaWoUKaJS_XzEg7MwswhJdkfbTZsG_LgnJBo8RQrJR8WI3-nxDNH2CwYEM0YCvlS_LbmNjRO6ct94Nxj-03B-MzJkoLHsVrfDb2E/s959/2024-03-24%2019%2010%2025.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="498" data-original-width="959" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjow1DeVqbqEd5BhI2X12GpQuismE7PKPhw8fEULCqMZn5mT322sHHrp1HEgCtJzsx3zOBFC0bj5QtQSCF_M_FIbuZoaWoUKaJS_XzEg7MwswhJdkfbTZsG_LgnJBo8RQrJR8WI3-nxDNH2CwYEM0YCvlS_LbmNjRO6ct94Nxj-03B-MzJkoLHsVrfDb2E/w640-h332/2024-03-24%2019%2010%2025.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOnatD-wBf-7tin5Y8QRsc3EGpRfXP7vD1xHqgrODWaBhYCdgO3u-sDcIcDYsdHJgA3bgF3lNWAg_qGqbHOGNXLoKgyS8qPZFSqLchT0tIhRYMDk5u1qXsIxM5bCrJulfxmwf5QlS3tv1hbN9DGrnssy-DGF1aoWAwswlCRkOW_mAqP1x10QTclReips/s1095/2024-03-24%2019%2010%2053.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="1095" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzOnatD-wBf-7tin5Y8QRsc3EGpRfXP7vD1xHqgrODWaBhYCdgO3u-sDcIcDYsdHJgA3bgF3lNWAg_qGqbHOGNXLoKgyS8qPZFSqLchT0tIhRYMDk5u1qXsIxM5bCrJulfxmwf5QlS3tv1hbN9DGrnssy-DGF1aoWAwswlCRkOW_mAqP1x10QTclReips/w640-h466/2024-03-24%2019%2010%2053.png" width="640" /></a></div><br /><p></p><p><br /></p><p>[{"id":"236480bb7c089087","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f5c97c74cc496505","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":580,"y":400,"wires":[["c2ed3e0bc69c8bd2"]]},{"id":"f71f044c8c38b060","type":"function","z":"ac79aab3f5f0aea9","name":"CREATE DATABASE","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id))\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":400,"wires":[["236480bb7c089087"]]},{"id":"4478fb3473ef889b","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":9,"width":3,"height":1,"passthru":false,"label":"建立LED資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":400,"wires":[["f71f044c8c38b060","7387e694cd0eefc4"]]},{"id":"61d3e5637793ec55","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":1,"width":2,"height":1,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":40,"wires":[["ec251833ef00fbd4","09288416d4f17dec"]]},{"id":"aa6fe888009bc131","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":2,"width":2,"height":1,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":80,"wires":[["ec251833ef00fbd4","09288416d4f17dec"]]},{"id":"a9524f3a5fb52f77","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":4,"width":2,"height":1,"passthru":false,"label":"TIMER","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"timer","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":120,"wires":[["ec251833ef00fbd4","09288416d4f17dec"]]},{"id":"38fde6fe4be74978","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":5,"width":2,"height":1,"passthru":false,"label":"FLASH","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"flash","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":160,"wires":[["ec251833ef00fbd4","09288416d4f17dec"]]},{"id":"4b5c4c80075c0633","type":"function","z":"ac79aab3f5f0aea9","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myLED = msg.payload;\n\n\nmsg.topic = \"INSERT INTO LEDSTATUS ( STATUS , Date , Time ) VALUES ($myLED, $var_date , $var_time ) \" ;\nmsg.payload = [myLED, var_date , var_time ]\nreturn msg;\n\n\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":260,"wires":[["6a1c0db5fbe1cb58"]]},{"id":"ec251833ef00fbd4","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":285,"y":100,"wires":[],"l":false},{"id":"6a1c0db5fbe1cb58","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f5c97c74cc496505","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":480,"y":260,"wires":[["1919cce7164ddb23","4e4e3c785593b51c"]]},{"id":"c2ed3e0bc69c8bd2","type":"debug","z":"ac79aab3f5f0aea9","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":400,"wires":[]},{"id":"1919cce7164ddb23","type":"debug","z":"ac79aab3f5f0aea9","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":260,"wires":[]},{"id":"de4098dd7f73745e","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":8,"width":4,"height":1,"passthru":false,"label":"檢視資料庫資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":340,"wires":[["4e4e3c785593b51c","7387e694cd0eefc4"]]},{"id":"4e4e3c785593b51c","type":"function","z":"ac79aab3f5f0aea9","name":"檢視資料","func":"//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":440,"y":340,"wires":[["880cafbf4de0804b"]]},{"id":"8c6e3f38b2e6f457","type":"ui_table","z":"ac79aab3f5f0aea9","group":"473c7f322e2cf823","name":"","order":6,"width":10,"height":10,"columns":[],"outputs":0,"cts":false,"x":770,"y":340,"wires":[]},{"id":"880cafbf4de0804b","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f5c97c74cc496505","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":620,"y":340,"wires":[["8c6e3f38b2e6f457"]]},{"id":"a5d2143b49aa260a","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f5c97c74cc496505","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":900,"y":460,"wires":[["6a44746b28623421"]]},{"id":"9f50a1b0ab62f7e5","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","order":7,"width":3,"height":1,"passthru":false,"label":"刪除所有資料 ","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除所有資料 ","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":460,"wires":[["2bb2ac72fa415b95","caa82d0279e1a1d8"]]},{"id":"20af563fb6cb3c0e","type":"function","z":"ac79aab3f5f0aea9","name":"DELETE ALL DATA","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"DELETE from LEDSTATUS\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":710,"y":460,"wires":[["a5d2143b49aa260a"]]},{"id":"2bb2ac72fa415b95","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":265,"y":520,"wires":[],"l":false},{"id":"caa82d0279e1a1d8","type":"ui_toast","z":"ac79aab3f5f0aea9","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":330,"y":460,"wires":[["49ee7541d15f2584"]]},{"id":"49ee7541d15f2584","type":"function","z":"ac79aab3f5f0aea9","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":460,"wires":[["20af563fb6cb3c0e"],[]]},{"id":"7387e694cd0eefc4","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"473c7f322e2cf823","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":285,"y":360,"wires":[],"l":false},{"id":"6a44746b28623421","type":"link out","z":"ac79aab3f5f0aea9","name":"link out 50","mode":"link","links":["57f2bdb122058e11"],"x":885,"y":400,"wires":[]},{"id":"57f2bdb122058e11","type":"link in","z":"ac79aab3f5f0aea9","name":"link in 45","links":["6a44746b28623421"],"x":955,"y":400,"wires":[["4e4e3c785593b51c"]]},{"id":"09288416d4f17dec","type":"mqtt out","z":"ac79aab3f5f0aea9","name":"Control LED out","topic":"alex9ufo/2024/esp32/led","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"603bb104.d6134","x":320,"y":40,"wires":[]},{"id":"ac299c93cfe10448","type":"mqtt in","z":"ac79aab3f5f0aea9","name":"Control LED in","topic":"alex9ufo/2024/esp32/led","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":140,"y":260,"wires":[["4b5c4c80075c0633"]]},{"id":"c0a66965f6a9a4b3","type":"comment","z":"ac79aab3f5f0aea9","name":"TABLE RFIDtable","info":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","x":120,"y":660,"wires":[]},{"id":"7a832f0fe6e0c69b","type":"comment","z":"ac79aab3f5f0aea9","name":"資料庫位置 C:\\Users\\User\\.node-red\\2024EX2_1.db","info":"","x":230,"y":700,"wires":[]},{"id":"1327954b0f74913c","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","order":4,"width":3,"height":1,"passthru":false,"label":"建立RFID資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":740,"wires":[["12198a2da79201c6","9463b02b4806e080"]]},{"id":"20cbb80ca3c65f2b","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","order":5,"width":4,"height":1,"passthru":false,"label":"檢視資料庫資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":1380,"wires":[["2462b1c1886c6fc8","8f50f9fb097d04a2","f33c6fc81b0e6244"]]},{"id":"f52c2d9c54fd7508","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","order":6,"width":3,"height":1,"passthru":false,"label":"刪除RFID資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除所有資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":1460,"wires":[["af9325e50586b378","2462b1c1886c6fc8"]]},{"id":"12198a2da79201c6","type":"function","z":"ac79aab3f5f0aea9","name":"CREATE DATABASE","func":"\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":740,"wires":[["1cc23fb7c25ce5f4"]]},{"id":"6f70896879fcea44","type":"debug","z":"ac79aab3f5f0aea9","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":1020,"wires":[]},{"id":"93299fe23033df17","type":"function","z":"ac79aab3f5f0aea9","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myRFID = flow.get('uid_temp');\n\n\nmsg.topic = \"INSERT INTO RFIDtable ( uidname , currentdate, currenttime ) VALUES ($myRFID, $var_date , $var_time ) \" ;\nmsg.payload = [myRFID, var_date , var_time ]\nreturn msg;\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":1020,"wires":[["7dc87031d825a8d9","8c607e4cc77003cc"]]},{"id":"01b71de91e22efef","type":"function","z":"ac79aab3f5f0aea9","name":"DROP DATABASE","func":"//DROP RFIDtable\n\nmsg.topic = \"DROP TABLE RFIDtable\" ;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":1480,"wires":[["40e236764c8d7add"]]},{"id":"c23f4b92cd253384","type":"debug","z":"ac79aab3f5f0aea9","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1090,"y":1480,"wires":[]},{"id":"f33c6fc81b0e6244","type":"function","z":"ac79aab3f5f0aea9","name":"檢視資料","func":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n\n//SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":1380,"wires":[["6d29311735f67b98","5dc4eea938ee927c"]]},{"id":"b6df90997fe707a2","type":"mqtt in","z":"ac79aab3f5f0aea9","name":"RFID in","topic":"alex9ufo/2024/esp32/RFID","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":90,"y":1100,"wires":[["f8e7813a22f75cbc","db353e5fe23ddc5b"]]},{"id":"b428d4c930aef5bf","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":560,"y":1220,"wires":[]},{"id":"2df95ef7d4606d40","type":"function","z":"ac79aab3f5f0aea9","name":"function ","func":"var temp= msg.payload;\nmsg.payload= \"新增一筆資料\" + temp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":400,"y":1180,"wires":[["b428d4c930aef5bf","af22fea64ba1a77b","b62f133637c5eeb7"]]},{"id":"2462b1c1886c6fc8","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":320,"y":1420,"wires":[]},{"id":"9463b02b4806e080","type":"ui_audio","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":300,"y":780,"wires":[]},{"id":"dbc01dfe41180ab8","type":"ui_text","z":"ac79aab3f5f0aea9","group":"4f3d3e75e5932a3b","order":2,"width":8,"height":1,"name":"","label":"自動感應RFID查詢的uid","format":"{{msg.payload}}","layout":"row-left","className":"","x":770,"y":1180,"wires":[]},{"id":"af22fea64ba1a77b","type":"function","z":"ac79aab3f5f0aea9","name":"取得UID號碼","func":"var myRFID = flow.get('uid_temp');\nmsg.payload=myRFID;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":570,"y":1180,"wires":[["dbc01dfe41180ab8"]]},{"id":"7dc87031d825a8d9","type":"function","z":"ac79aab3f5f0aea9","name":"增加 日期 時間","func":"var ms1=msg.payload[0];\nvar ms2=msg.payload[1];\nvar ms3=msg.payload[2];\n\nmsg.payload=\"新增一筆:\"+ms1+\", 日期: \"+ms2+\", 時間:\"+ms3;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":1080,"wires":[["50cf231253a3b5d5"]]},{"id":"50cf231253a3b5d5","type":"function","z":"ac79aab3f5f0aea9","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":730,"y":1080,"wires":[["3037562ef98920fc"]]},{"id":"3037562ef98920fc","type":"http request","z":"ac79aab3f5f0aea9","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":880,"y":1080,"wires":[["be392a66f0ef0b9b"]]},{"id":"be392a66f0ef0b9b","type":"debug","z":"ac79aab3f5f0aea9","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1010,"y":1080,"wires":[]},{"id":"e4cc399bd8117cbb","type":"comment","z":"ac79aab3f5f0aea9","name":"Line Notify Message ","info":"","x":870,"y":1040,"wires":[]},{"id":"24bfd09e8917b9c1","type":"ui_table","z":"ac79aab3f5f0aea9","group":"4f3d3e75e5932a3b","name":"","order":3,"width":10,"height":10,"columns":[],"outputs":0,"cts":false,"x":1070,"y":1380,"wires":[]},{"id":"af9325e50586b378","type":"ui_toast","z":"ac79aab3f5f0aea9","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":310,"y":1480,"wires":[["b58d2b9ac12387e6"]]},{"id":"b58d2b9ac12387e6","type":"function","z":"ac79aab3f5f0aea9","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":1480,"wires":[["01b71de91e22efef"],[]]},{"id":"feec86a778f5652b","type":"link out","z":"ac79aab3f5f0aea9","name":"link out 52","mode":"link","links":["bc18b32b609aae41"],"x":645,"y":980,"wires":[]},{"id":"8f50f9fb097d04a2","type":"ui_toast","z":"ac79aab3f5f0aea9","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":330,"y":1340,"wires":[]},{"id":"a7c2d7a8bf831555","type":"debug","z":"ac79aab3f5f0aea9","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":650,"y":740,"wires":[]},{"id":"f8e7813a22f75cbc","type":"ui_toast","z":"ac79aab3f5f0aea9","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":210,"y":1160,"wires":[]},{"id":"1cc23fb7c25ce5f4","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":520,"y":740,"wires":[["a7c2d7a8bf831555"]]},{"id":"8c607e4cc77003cc","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":540,"y":1020,"wires":[["feec86a778f5652b","6f70896879fcea44"]]},{"id":"6d29311735f67b98","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":900,"y":1380,"wires":[["24bfd09e8917b9c1"]]},{"id":"40e236764c8d7add","type":"sqlite","z":"ac79aab3f5f0aea9","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":860,"y":1480,"wires":[["c23f4b92cd253384","f33c6fc81b0e6244"]]},{"id":"5dc4eea938ee927c","type":"debug","z":"ac79aab3f5f0aea9","name":"debug 275","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":910,"y":1340,"wires":[]},{"id":"b64194965971f3d2","type":"ui_button","z":"ac79aab3f5f0aea9","name":"","group":"4f3d3e75e5932a3b","order":1,"width":2,"height":1,"passthru":false,"label":"送RFID UID","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":860,"wires":[["4ef4af8e051d6137"]]},{"id":"4ef4af8e051d6137","type":"function","z":"ac79aab3f5f0aea9","name":"模擬RFID UID","func":"const MIN = 0;\nconst MAX = 255;\nvar hex_v=0;\n//The maximum is exclusive and the minimum is inclusive\nfunction getRandomInt(min = MIN, max = MAX) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nfunction decToHex(dec) {\n hex_v= dec.toString(16);\n if(hex_v<10)\n {\n hex_v= '0'+hex_v;\n }\n return hex_v;\n}\n\nvar no1=getRandomInt(min = MIN, max = MAX);\nvar no2=getRandomInt(min = MIN, max = MAX);\nvar no3=getRandomInt(min = MIN, max = MAX);\nvar no4=getRandomInt(min = MIN, max = MAX);\nvar no5=getRandomInt(min = MIN, max = MAX);\nvar no6=getRandomInt(min = MIN, max = MAX);\nvar no7=getRandomInt(min = MIN, max = MAX);\nvar no8=getRandomInt(min = MIN, max = MAX);\n\nvar var1=decToHex(no1);\nvar var2=decToHex(no2);\nvar var3=decToHex(no3);\nvar var4=decToHex(no4);\nvar var5=decToHex(no5);\nvar var6=decToHex(no6);\nvar var7=decToHex(no7);\nvar var8=decToHex(no8);\n\nmsg.payload=[var1,var2,var3,var4];\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":860,"wires":[["7c8fe2018f922ea0"]]},{"id":"7c8fe2018f922ea0","type":"function","z":"ac79aab3f5f0aea9","name":"整理輸出","func":"var temp=\"\";\nfor (var i = 0; i < msg.payload.length; i++) \n{\n temp=temp+ \" \" + msg.payload[i];\n temp=temp.toUpperCase();\n}\nmsg.payload=temp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":860,"wires":[["6c3d7d984074e9d3","b4e433a75fe7abc8"]]},{"id":"b4e433a75fe7abc8","type":"mqtt out","z":"ac79aab3f5f0aea9","name":"RFID out","topic":"alex9ufo/2024/esp32/RFID","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":680,"y":900,"wires":[]},{"id":"6c3d7d984074e9d3","type":"debug","z":"ac79aab3f5f0aea9","name":"debug 276","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":860,"wires":[]},{"id":"b62f133637c5eeb7","type":"ui_toast","z":"ac79aab3f5f0aea9","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":590,"y":1140,"wires":[]},{"id":"bc18b32b609aae41","type":"link in","z":"ac79aab3f5f0aea9","name":"link in 46","links":["609e318ca3262939","feec86a778f5652b","70487decb239f3c4","ce142a687d0b79f1"],"x":655,"y":1340,"wires":[["f33c6fc81b0e6244"]]},{"id":"db353e5fe23ddc5b","type":"function","z":"ac79aab3f5f0aea9","name":"Store UID","func":"flow.set(\"uid_temp\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":1100,"wires":[["93299fe23033df17","2df95ef7d4606d40"]]},{"id":"f5c97c74cc496505","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\2024EX2.db","mode":"RWC"},{"id":"473c7f322e2cf823","type":"ui_group","name":"LED","tab":"83e4ead9f81fa18d","order":1,"disp":true,"width":"10","collapse":false,"className":""},{"id":"603bb104.d6134","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"4f3d3e75e5932a3b","type":"ui_group","name":"RFID","tab":"83e4ead9f81fa18d","order":2,"disp":true,"width":10,"collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"f87c808cc786ae80","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\2024EX2_1.db","mode":"RWC"},{"id":"83e4ead9f81fa18d","type":"ui_tab","name":"2024產專作業2(模擬)","icon":"dashboard","order":104,"disabled":false,"hidden":false}]</p><p><br /></p><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-42369724739951218762024-03-23T00:53:00.000-07:002024-03-23T23:01:42.067-07:002024 勤益科大 產專班 作業1 講解 說明(1) <p><span style="font-size: x-large;">2024 勤益科大 產專班 作業1 講解 說明(1) </span></p><p><br /></p><p><span style="font-size: large;"><b><span>1)</span> <a href="https://www.mediafire.com/file/7gsto95ztfyxthb/Arduino_IDE_%25E5%25AE%2589%25E8%25A3%259D%25E5%25BB%25BA%25E7%25BD%25AEESP32%25E9%2596%258B%25E7%2599%25BC%25E6%259D%25BF.pdf/file">https://www.mediafire.com/file/7gsto95ztfyxthb/Arduino_IDE_%25E5%25AE%2589%25E8%25A3%259D%25E5%25BB%25BA%25E7%25BD%25AEESP32%25E9%2596%258B%25E7%2599%25BC%25E6%259D%25BF.pdf/file</a></b></span></p><p><span style="font-size: large;"><b><span>2) </span><a href="https://www.mediafire.com/file/74x9y2i440b746y/2024_RFID_LED.ino/file">https://www.mediafire.com/file/74x9y2i440b746y/2024_RFID_LED.ino/file</a></b></span></p><p><span style="font-size: large;"><b><span>3) </span></b></span><span style="font-size: large;"><b><a href="https://www.mediafire.com/file/sx4vzrt4py1dkzc/arduino_secrets.h/file">https://www.mediafire.com/file/sx4vzrt4py1dkzc/arduino_secrets.h/file</a></b></span></p><p><b style="font-size: x-large;"><span>4) </span><a href="https://www.mediafire.com/file/sw6i1c87j94jjw7/產專班+Node-Red+作業1+修改地方.pdf/file">https://www.mediafire.com/file/sw6i1c87j94jjw7/產專班+Node-Red+作業1+修改地方.pdf/file</a></b></p><p><span style="font-size: large;"><b><span>5) </span><a href="https://www.mediafire.com/file/em2mr1axwkd6w71/node-red+安裝+節點+匯入.pdf/file">https://www.mediafire.com/file/em2mr1axwkd6w71/node-red+安裝+節點+匯入.pdf/file</a></b></span></p><p><span style="font-size: large;"><b><span>6) </span><a href="https://www.mediafire.com/file/j44nizsapfqe1fr/node-red-ex1.json/file">https://www.mediafire.com/file/j44nizsapfqe1fr/node-red-ex1.json/file</a> </b></span></p><p><span style="font-size: large;"><b><span><span>7) </span></span><a href="https://www.mediafire.com/file/piejszvvrgltgqe/LINE+官方申請權杖說明.pdf/file">https://www.mediafire.com/file/piejszvvrgltgqe/LINE+官方申請權杖說明.pdf/file</a></b></span></p><p><br /></p><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-53724395796068878732024-03-12T06:00:00.000-07:002024-03-12T06:00:56.568-07:00MQTT Explorer 與 Node-Red 介面的實驗<p><span style="font-size: x-large;"> MQTT Explorer 與 Node-Red 介面的實驗</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlCQJbqw-yO282maiC-kSU7eWCTGDi27luHU9UyZBTx253rxzpc3aXhjycfeRChdAhkLm12lFsaTQohHqCFCYwdbZHV7EzdJrb8GKHKlvZc_JwOWhYvEli5FGOo06g4NqlIFwOChKgiF2-PPAWZE5ucBBiw4PyV1SWg9-aicEneNQ8HPqnE-vnJP-RS-o/s1094/2024-03-12%2020%2022%2006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="774" data-original-width="1094" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlCQJbqw-yO282maiC-kSU7eWCTGDi27luHU9UyZBTx253rxzpc3aXhjycfeRChdAhkLm12lFsaTQohHqCFCYwdbZHV7EzdJrb8GKHKlvZc_JwOWhYvEli5FGOo06g4NqlIFwOChKgiF2-PPAWZE5ucBBiw4PyV1SWg9-aicEneNQ8HPqnE-vnJP-RS-o/w640-h452/2024-03-12%2020%2022%2006.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZwCFrGgQ01iaF__iURbOW3JvNiz8Tj61_lNvIlkiD_G552KAzpGMqFYAjM8RFoU6kp_nlBxk7Y9ZDBS4Qr6ndROdP5dY0VDzvFlGYJlo6mC_gpKEPtyBc-aKfKg3-AfzUDAwiRXz2NmYbiFNkpms9xeLLphrxcqKwNEOUdfw5XcvSH-etxNYN9l6q-uQ/s640/2024-03-04%2017%2022%2043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="340" data-original-width="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZwCFrGgQ01iaF__iURbOW3JvNiz8Tj61_lNvIlkiD_G552KAzpGMqFYAjM8RFoU6kp_nlBxk7Y9ZDBS4Qr6ndROdP5dY0VDzvFlGYJlo6mC_gpKEPtyBc-aKfKg3-AfzUDAwiRXz2NmYbiFNkpms9xeLLphrxcqKwNEOUdfw5XcvSH-etxNYN9l6q-uQ/s16000/2024-03-04%2017%2022%2043.png" /></a></div><br /><span style="font-size: large;">MQTT EXplorer 與 Node-Red介面的設定</span><div><span style="font-size: large;">(1) 設定 </span><span style="font-size: x-large;">MQTT EXplorer Client </span><span style="font-size: large;"><br /></span><div><span><span style="font-size: x-large;"> </span><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwcybQfdh2_FGsmYEvfZQMc1Wp32npdj3Brgt8a3Mpvle4b_LlKLeGRmCuNsI7JyzNTqyYDAsPL_72szlxu-072j3sBhqhyvqXaIA-K1899q9SnluJ3eUV3YIoacHTDXubx2i7NTgjzec8QQT6jlqicFCOAzrJwFSZCT2Ekz-LyyZCEBSQnsb-mJ3GavM/s937/2024-03-12%2020%2004%2054.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="536" data-original-width="937" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwcybQfdh2_FGsmYEvfZQMc1Wp32npdj3Brgt8a3Mpvle4b_LlKLeGRmCuNsI7JyzNTqyYDAsPL_72szlxu-072j3sBhqhyvqXaIA-K1899q9SnluJ3eUV3YIoacHTDXubx2i7NTgjzec8QQT6jlqicFCOAzrJwFSZCT2Ekz-LyyZCEBSQnsb-mJ3GavM/w640-h366/2024-03-12%2020%2004%2054.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXr_Zv36Bt-S5UVtiEhpoZq_OjLAiCBUMltxHn-5CAkLgutbm0U42z5FdiGTITTeL5BG8piHbe_6Xz5EKnztQsYB4ni0h5OnTEmhvlzQN4uwBZKGxjZFHHzJ9mrjo6nWxDrTdiALKgoZdBunIxmoIfskAlkP3fRkI8Fvdc-Hl6HDtkjlvxL0gyo_aqR_M/s1002/2024-03-12%2019%2054%2040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="558" data-original-width="1002" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXr_Zv36Bt-S5UVtiEhpoZq_OjLAiCBUMltxHn-5CAkLgutbm0U42z5FdiGTITTeL5BG8piHbe_6Xz5EKnztQsYB4ni0h5OnTEmhvlzQN4uwBZKGxjZFHHzJ9mrjo6nWxDrTdiALKgoZdBunIxmoIfskAlkP3fRkI8Fvdc-Hl6HDtkjlvxL0gyo_aqR_M/w640-h356/2024-03-12%2019%2054%2040.png" width="640" /></a></div><span style="font-size: large;">(2)<span style="font-family: arial;"> </span></span></span></div><div><span><span style="font-size: large;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUrms_P_PjkeKc64GX4hP1_XUgXTn52OzXTUUxXElCREpmaVMxVPN9XRCUM9JeNVvpuiP-5zDkJFqOCsU0QnDrUYnaBso5kXSDORfFkKVlEofJitXgPdwccypS_MIn26bb5W-sbH9QRX5AQ0388lcimdQNTp1Vt0U5Au27_TkowL16zMIsKjWnwGUNh0w/s1174/2024-03-12%2020%2046%2014.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="828" data-original-width="1174" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUrms_P_PjkeKc64GX4hP1_XUgXTn52OzXTUUxXElCREpmaVMxVPN9XRCUM9JeNVvpuiP-5zDkJFqOCsU0QnDrUYnaBso5kXSDORfFkKVlEofJitXgPdwccypS_MIn26bb5W-sbH9QRX5AQ0388lcimdQNTp1Vt0U5Au27_TkowL16zMIsKjWnwGUNh0w/w640-h452/2024-03-12%2020%2046%2014.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiEn3ZDYyPU8relPwRXAxW1duOK5tnmD4CzVGfnavBcDrdWB2DRp7Frgic4x9KDHpeaMackrXEQuSYt3mux3W8PQcZ_hOaVc4t54wfiJhmg6IKED49ktPzs9VHV_kY1HxuMcTyg6AP-sLCYOqzPxjtPhaK2IiYSB6qSz777zigu3zdyJAT6A7AqDV0DlVg" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="295" data-original-width="1040" height="209" src="https://blogger.googleusercontent.com/img/a/AVvXsEiEn3ZDYyPU8relPwRXAxW1duOK5tnmD4CzVGfnavBcDrdWB2DRp7Frgic4x9KDHpeaMackrXEQuSYt3mux3W8PQcZ_hOaVc4t54wfiJhmg6IKED49ktPzs9VHV_kY1HxuMcTyg6AP-sLCYOqzPxjtPhaK2IiYSB6qSz777zigu3zdyJAT6A7AqDV0DlVg=w574-h209" width="574" /></a></div><br /><br /></span></span></div><div><span><span style="font-size: large;"><span style="font-family: arial;"> Node-Red LED ON --> MQTT Explorer LED= on</span></span></span></div><div><span><span style="font-size: large;"><span style="font-family: arial;"> </span></span></span></div><div><span style="font-family: arial;"><span><span style="font-size: large;"> </span><span style="font-size: x-large;">MQTT Explorer Topic : </span></span><span style="background-color: white; color: red; font-size: 20px;">alex9ufo/2024/RFID/Back_LED </span></span></div><div><span style="font-size: x-large;"><span style="font-family: arial;"> Payload: <span style="color: red;">ON</span></span></span></div><div><span style="font-size: x-large;"><span style="font-family: arial;"><span style="color: red;"> --> Node-Red LED ON</span></span></span></div><div><span><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGH_ukTST5EPP0lJS-2wt3RAaN1AXToeag1fZcPM0spvlM-zYEYCVY_m9qvpSnFitDfz2BWnqQCIYt2wDARP2CEp9HumhZwIyJ-S79Ojf-adsKb-Th0qKvIwqGIop9anZkb5sjEVCiMU2VOfb2OS5SpM00DW95pVYRonamRtvjKdK2Qp9NHn63beEEc5Q/s1259/2024-03-12%2019%2052%2058.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="552" data-original-width="1259" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGH_ukTST5EPP0lJS-2wt3RAaN1AXToeag1fZcPM0spvlM-zYEYCVY_m9qvpSnFitDfz2BWnqQCIYt2wDARP2CEp9HumhZwIyJ-S79Ojf-adsKb-Th0qKvIwqGIop9anZkb5sjEVCiMU2VOfb2OS5SpM00DW95pVYRonamRtvjKdK2Qp9NHn63beEEc5Q/w640-h280/2024-03-12%2019%2052%2058.png" width="640" /></a></div><br /><br /><br /><br /></span><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz0mtOqB0bivmKL_IwYUl6Z8uEbMTB7mIigKjmq9DVBh2KRSMW2fJ4v9azbKbnr8tdCw1JTtWUvBaBTHEbFL6b5kW_5O7b6MuntzTD8eqI7X4C8bsrI5PakQleA4ParEw8P6VcToH7xDaYcFbUXR-XvYqhVHqz5elYMKtpj0PHTBBs6efb00JdX_wBjyQ/s1125/2024-03-12%2019%2052%2039.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="722" data-original-width="1125" height="410" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz0mtOqB0bivmKL_IwYUl6Z8uEbMTB7mIigKjmq9DVBh2KRSMW2fJ4v9azbKbnr8tdCw1JTtWUvBaBTHEbFL6b5kW_5O7b6MuntzTD8eqI7X4C8bsrI5PakQleA4ParEw8P6VcToH7xDaYcFbUXR-XvYqhVHqz5elYMKtpj0PHTBBs6efb00JdX_wBjyQ/w640-h410/2024-03-12%2019%2052%2039.png" width="640" /></a></div><div><br /></div><div><div><span><span style="font-size: large;">(2)<span style="font-family: arial;"> Node-Red LED OFF --> MQTT Explorer LED= off</span></span></span></div><div><span><span style="font-size: large;"><span style="font-family: arial;"> </span></span></span></div><div><span style="font-family: arial;"><span><span style="font-size: large;"> </span><span style="font-size: x-large;">MQTT Explorer Topic : </span></span><span style="background-color: white; color: red; font-size: 20px;">alex9ufo/2024/RFID/Back_LED </span></span></div><div><span style="font-size: x-large;"><span style="font-family: arial;"> Payload: <span style="color: red;">OFF</span></span></span></div><div><span style="font-size: x-large;"><span style="font-family: arial;"><span style="color: red;"> --> Node-Red LED OFF</span></span></span></div></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcqgoG-8YYJ0kKCHzBL_hACUOGwT_0wiaDp4sW9KNQwXkBcyW02NJjgeqnyY0_GeB2_rAk4ont9jgpVSj7K38bU6iJb8xHUe0N1rt2C44I-1k2kOlpob5r_ilDJXKjSvS6aZu-11Wh2nFhUigCfYZHhY3jMRscaO1cWSNkRODCX1QfupICcMAhVlG_SkA/s1243/2024-03-12%2020%2006%2040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="497" data-original-width="1243" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjcqgoG-8YYJ0kKCHzBL_hACUOGwT_0wiaDp4sW9KNQwXkBcyW02NJjgeqnyY0_GeB2_rAk4ont9jgpVSj7K38bU6iJb8xHUe0N1rt2C44I-1k2kOlpob5r_ilDJXKjSvS6aZu-11Wh2nFhUigCfYZHhY3jMRscaO1cWSNkRODCX1QfupICcMAhVlG_SkA/w640-h256/2024-03-12%2020%2006%2040.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD2X_JvNaQM1IdW7iZXr8qLPGvdmmP14BSQDECvsNZXxwI8F_ajUhtacPaCF7rwFSdh-i1NQUJIR92NugsLttJ31x8OBhvdXrN6TfBTS5cWK4oWviGwkCZOyhEV-lupna0a2QHoUpPg9I-WRtuaCRiF42LAzd6aoqarQ_iN9evmpg6b-SwA08pfNDiLE0/s1215/2024-03-12%2020%2007%2028.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="661" data-original-width="1215" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD2X_JvNaQM1IdW7iZXr8qLPGvdmmP14BSQDECvsNZXxwI8F_ajUhtacPaCF7rwFSdh-i1NQUJIR92NugsLttJ31x8OBhvdXrN6TfBTS5cWK4oWviGwkCZOyhEV-lupna0a2QHoUpPg9I-WRtuaCRiF42LAzd6aoqarQ_iN9evmpg6b-SwA08pfNDiLE0/w640-h348/2024-03-12%2020%2007%2028.png" width="640" /></a></div><br /><div><br /></div><div><br /></div><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhXNnUUpcqPB4Srxvx0oEVREWr3Rkr8Ztcoi2_UeBoSem8N2ph4xILwMk1v0vKS0NXRjWAG87iwlvvo06qa6pXMm2j11IM3U2HZp2EGpx8kf4yh5kxfF4xPWKh-DD04ZQQa0L5I7z85y2EQ13Ubfu0nTRzErsTD2BPxEsldKo94YcxCtoGCH9eSoEtfdsY" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="253" data-original-width="1064" height="184" src="https://blogger.googleusercontent.com/img/a/AVvXsEhXNnUUpcqPB4Srxvx0oEVREWr3Rkr8Ztcoi2_UeBoSem8N2ph4xILwMk1v0vKS0NXRjWAG87iwlvvo06qa6pXMm2j11IM3U2HZp2EGpx8kf4yh5kxfF4xPWKh-DD04ZQQa0L5I7z85y2EQ13Ubfu0nTRzErsTD2BPxEsldKo94YcxCtoGCH9eSoEtfdsY=w603-h184" width="603" /></a></div><br /><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik4yksogrXdIb3of0onr_ZAUgRiWYdluhrqhb2n73CtwgIzenLF8lRZxzliz1YBc2tivOPBfMfCFRYU-NMZbyrepad66q76gzT5R5KorjOG8u5A21QF1J_u73iYRQYz-UGlYvSQUIRjhgqB8Mwb1J9UM78pd9Hx_Ob_7VBDXcVt3d25hXM-tyGvkwbMSM/s1265/2024-03-12%2020%2011%2040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1265" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik4yksogrXdIb3of0onr_ZAUgRiWYdluhrqhb2n73CtwgIzenLF8lRZxzliz1YBc2tivOPBfMfCFRYU-NMZbyrepad66q76gzT5R5KorjOG8u5A21QF1J_u73iYRQYz-UGlYvSQUIRjhgqB8Mwb1J9UM78pd9Hx_Ob_7VBDXcVt3d25hXM-tyGvkwbMSM/w640-h352/2024-03-12%2020%2011%2040.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDwAwI-_KVzZh4SbIQ8EunRf-9w0-nqtV9WfoPjBrLnC5oHZEBMdeGvctnxI5KkjDyA4x3ycVXivf6wrP33ReaBREIseW0v0uHWH4OMUgeTo6nnHdtTdF-XdZW110IkjduB6oo1PVYnya3MKhG3h2e_OLCy7Se5VNMu812JmVjzBM-RnBeBlUjRFKRT-0/s1221/2024-03-12%2020%2010%2044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="1221" height="374" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDwAwI-_KVzZh4SbIQ8EunRf-9w0-nqtV9WfoPjBrLnC5oHZEBMdeGvctnxI5KkjDyA4x3ycVXivf6wrP33ReaBREIseW0v0uHWH4OMUgeTo6nnHdtTdF-XdZW110IkjduB6oo1PVYnya3MKhG3h2e_OLCy7Se5VNMu812JmVjzBM-RnBeBlUjRFKRT-0/w640-h374/2024-03-12%2020%2010%2044.png" width="640" /></a></div><br /><div><br /></div><div><br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRww2uVDYaXmAXoPP1lJSoeJuCkw3xTH2tQNwZVRDdvs01IcukOA_eqIr7rySggUfanRiFi2V8M-tpe-Ij_hiQFDJlWnJ_0zjfbzMvtRtinfCACc7EhNXhpIE1SmPu2-Rm_zecdmNZHtTAGKY8NYNm8S_bLFzFFzX_WB9NkKePSeRLb1UyV_9bBv_1wY0/s1259/2024-03-12%2020%2013%2013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="686" data-original-width="1259" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRww2uVDYaXmAXoPP1lJSoeJuCkw3xTH2tQNwZVRDdvs01IcukOA_eqIr7rySggUfanRiFi2V8M-tpe-Ij_hiQFDJlWnJ_0zjfbzMvtRtinfCACc7EhNXhpIE1SmPu2-Rm_zecdmNZHtTAGKY8NYNm8S_bLFzFFzX_WB9NkKePSeRLb1UyV_9bBv_1wY0/w640-h348/2024-03-12%2020%2013%2013.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu-1-JuqYRRXjpkYXSmtJhd5aUjlxJ4hy0P_ZA2AybXUY5T3khG1JSBnGgEW67oJTK1C8dmXgFdlKICLdikfTbgF2dq-P_lLQy1WQI8sXWQJFHpgTRKps7wZjfqFfCGw-32VdFPfK6AYi8maabZcpf57DGosOZA4P0NesfuYp3yqqfMke5h5XPmdyqEbQ/s1214/2024-03-12%2020%2014%2021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="1214" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu-1-JuqYRRXjpkYXSmtJhd5aUjlxJ4hy0P_ZA2AybXUY5T3khG1JSBnGgEW67oJTK1C8dmXgFdlKICLdikfTbgF2dq-P_lLQy1WQI8sXWQJFHpgTRKps7wZjfqFfCGw-32VdFPfK6AYi8maabZcpf57DGosOZA4P0NesfuYp3yqqfMke5h5XPmdyqEbQ/w640-h332/2024-03-12%2020%2014%2021.png" width="640" /></a></div><br /><div><br /></div><div><span style="font-size: large;">Node-Red 程式畫面</span></div><div><br /></div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilRVQ9ccG5-HDMIsChY7jCreSBS7rjzqg6pHmFK9ImigM8QEIkDOPp1-14Q5AGP3rcOdfC7nJ8QKUOjNu4A6tpDyLj94aJXFZZ7Jz7b4-SyOsYusxiiwcKj3h2kz8NPPsDuC_jXkGubXi_YGiq1Z_0FrppZmXz2od95Qj74UmYHjFrWKyX-0Crwxc31Rs/s1381/2024-03-12%2020%2028%2035.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="788" data-original-width="1381" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilRVQ9ccG5-HDMIsChY7jCreSBS7rjzqg6pHmFK9ImigM8QEIkDOPp1-14Q5AGP3rcOdfC7nJ8QKUOjNu4A6tpDyLj94aJXFZZ7Jz7b4-SyOsYusxiiwcKj3h2kz8NPPsDuC_jXkGubXi_YGiq1Z_0FrppZmXz2od95Qj74UmYHjFrWKyX-0Crwxc31Rs/w640-h365/2024-03-12%2020%2028%2035.png" width="640" /></a></div><br /><p></p><div><span style="font-size: medium;">node-red程式</span></div><div><span style="font-size: medium;"><br /></span></div><div><span style="font-size: medium;">[{"id":"9f51922c96475745","type":"mqtt in","z":"024ba427a7f5812e","name":"Rack LED","topic":"alex9ufo/2024/RFID/Back_LED","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":160,"y":520,"wires":[["a8fcaef90ac2a7ea","2778b0a8751644f1","5f2c87735b333a9c","c0707331bbc29acc"]]},{"id":"a8fcaef90ac2a7ea","type":"function","z":"024ba427a7f5812e","name":"function LED on ,off","func":"var onoff=msg.payload;\n\nif (onoff==\"ON\")\n{\n msg.payload=true;\n}\nif (onoff==\"OFF\")\n{\n msg.payload=false;\n} \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":600,"wires":[["11f9b3fed3944fec"]]},{"id":"bfb3b1e0afad219b","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":370,"y":680,"wires":[["11f9b3fed3944fec"]]},{"id":"03dd3a2a9506eea5","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":370,"y":640,"wires":[["11f9b3fed3944fec"]]},{"id":"11f9b3fed3944fec","type":"ui_led","z":"024ba427a7f5812e","order":1,"group":"7b4b159b9632feb1","width":6,"height":5,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"","x":570,"y":600,"wires":[]},{"id":"1639f0d1ca085251","type":"ui_button","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","order":2,"width":0,"height":0,"passthru":false,"label":"LED ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":180,"y":80,"wires":[["1953eedb67e61c2c","16609fe88dddf2ab","1b28a9dbc6b3afc8"]]},{"id":"415bdb9608b58cee","type":"ui_button","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","order":3,"width":0,"height":0,"passthru":false,"label":"LED OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":180,"y":180,"wires":[["1953eedb67e61c2c","16609fe88dddf2ab","1b28a9dbc6b3afc8"]]},{"id":"1953eedb67e61c2c","type":"ui_audio","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","voice":"Google US English","always":"","x":420,"y":140,"wires":[]},{"id":"16609fe88dddf2ab","type":"mqtt out","z":"024ba427a7f5812e","name":"LED","topic":"alex9ufo/2024/RFID/LED","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"603bb104.d6134","x":410,"y":80,"wires":[]},{"id":"2778b0a8751644f1","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":5,"width":0,"height":0,"name":"","label":"MQTT<<訂閱>>的訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":380,"y":560,"wires":[]},{"id":"1b28a9dbc6b3afc8","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":4,"width":0,"height":0,"name":"","label":"MQTT [ [發行] ] 的訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":460,"y":180,"wires":[]},{"id":"4d98ddd8f5354d4f","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":6,"width":0,"height":0,"name":"","label":"MQTT 的Broker :","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":710,"y":340,"wires":[]},{"id":"a6a877eb4be7a0cf","type":"function","z":"024ba427a7f5812e","name":"function on off","func":"var on_off=flow.get(\"onoff\");\n\nif (on_off== true)\n{\n msg.payload='HiveMQTT';\n flow.set(\"onoff\",false)\n} \nelse\n{\n msg.payload=' ';\n flow.set(\"onoff\",true)\n}\nmsg.color=\"red\";\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":340,"wires":[["4d98ddd8f5354d4f","8f16f50beb2fd914"]]},{"id":"1ab8fc00ab6a2801","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":170,"y":340,"wires":[["a6a877eb4be7a0cf","b234e6b8f0c79306"]]},{"id":"8f16f50beb2fd914","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":480,"y":280,"wires":[["a6a877eb4be7a0cf"]]},{"id":"b234e6b8f0c79306","type":"function","z":"024ba427a7f5812e","name":"function flow set","func":"flow.set(\"onoff\",true);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":380,"wires":[[]]},{"id":"c6aada400221f416","type":"comment","z":"024ba427a7f5812e","name":"發行 alex9ufo/2024/RFID/LED","info":"","x":220,"y":140,"wires":[]},{"id":"a0786c74e597ace5","type":"comment","z":"024ba427a7f5812e","name":"訂閱 alex9ufo/2024/RFID/Back_LED","info":"","x":240,"y":440,"wires":[]},{"id":"cffb26e93155b0b4","type":"comment","z":"024ba427a7f5812e","name":"定期 閃爍 HiveMQTT","info":"","x":200,"y":280,"wires":[]},{"id":"a3da334ec58d571b","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":780,"wires":[["96d55c93b931523e"]]},{"id":"5ebf60e91bf99d7a","type":"template","z":"024ba427a7f5812e","name":"Image in","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<img src=\"data:image/png;base64,{{payload}}\"style=\"width=\"400\" height=\"300\"\"/>","output":"str","x":680,"y":780,"wires":[["621cc26def28f659"]]},{"id":"621cc26def28f659","type":"ui_template","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","name":"MQTT","order":1,"width":10,"height":8,"format":"<div ng-bind-html=\"msg.payload\"></div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","className":"","x":850,"y":780,"wires":[[]]},{"id":"96d55c93b931523e","type":"file in","z":"024ba427a7f5812e","name":"","filename":"D:\\2024RFID\\作業1\\EX1.png","filenameType":"str","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":340,"y":780,"wires":[["c62ccd80dad331eb"]]},{"id":"c62ccd80dad331eb","type":"base64","z":"024ba427a7f5812e","name":"","action":"","property":"payload","x":540,"y":780,"wires":[["5ebf60e91bf99d7a"]]},{"id":"b7ab30b1c8592615","type":"comment","z":"024ba427a7f5812e","name":"On inject add MQTT picture to the dashboard","info":"","x":250,"y":840,"wires":[]},{"id":"8d7b00ea7d339381","type":"comment","z":"024ba427a7f5812e","name":"存放路徑若是不同需修改","info":"存放路徑\nD:\\2024RFID\\作業1\\EX1.png\n若是不同需修改","x":170,"y":720,"wires":[]},{"id":"5f2c87735b333a9c","type":"function","z":"024ba427a7f5812e","name":"function ","func":"msg.payload=\" ---ESP32 回來 LED的狀態---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":520,"wires":[["7cb295df3f651ad8","a588fcd00a340802"]]},{"id":"7cb295df3f651ad8","type":"function","z":"024ba427a7f5812e","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":550,"y":540,"wires":[["69f4d04c83a3b62d"]]},{"id":"69f4d04c83a3b62d","type":"http request","z":"024ba427a7f5812e","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":700,"y":540,"wires":[["3db96139024c408b"]]},{"id":"3db96139024c408b","type":"debug","z":"024ba427a7f5812e","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":850,"y":540,"wires":[]},{"id":"b53b1192a01aea88","type":"comment","z":"024ba427a7f5812e","name":"Line Notify Message ","info":"","x":790,"y":500,"wires":[]},{"id":"a588fcd00a340802","type":"ui_text","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","order":2,"width":0,"height":0,"name":"","label":"ESP32 LED至Line訊息","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":580,"y":500,"wires":[]},{"id":"c51ffa9eeb9c79b7","type":"ui_text","z":"024ba427a7f5812e","group":"7bec0a4da1755d2d","order":1,"width":6,"height":4,"name":"","label":"RFID UID -->","format":"{{msg.payload}}","layout":"row-left","className":"","x":1290,"y":80,"wires":[]},{"id":"075b1e287e5d9347","type":"mqtt in","z":"024ba427a7f5812e","name":"RFID_UID","topic":"alex9ufo/2024/RFID/RFID_UID","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":780,"y":80,"wires":[["c51ffa9eeb9c79b7","df55f1819e8b66e7","afdbad21b78a0b02"]]},{"id":"df55f1819e8b66e7","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":920,"y":40,"wires":[["dae09bddc266dc4c"]]},{"id":"dae09bddc266dc4c","type":"function","z":"024ba427a7f5812e","name":"function 覆蓋","func":"msg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1130,"y":40,"wires":[["c51ffa9eeb9c79b7"]]},{"id":"afdbad21b78a0b02","type":"function","z":"024ba427a7f5812e","name":"function ","func":"msg.payload=\" ---ESP32 回來 UID號碼---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":180,"wires":[["66e6317ca7b54715","82904e831754affc"]]},{"id":"66e6317ca7b54715","type":"function","z":"024ba427a7f5812e","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":1070,"y":180,"wires":[["10568f34aa90f487"]]},{"id":"10568f34aa90f487","type":"http request","z":"024ba427a7f5812e","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":1220,"y":180,"wires":[["6a38bfa68353e278"]]},{"id":"6a38bfa68353e278","type":"debug","z":"024ba427a7f5812e","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1350,"y":180,"wires":[]},{"id":"82904e831754affc","type":"ui_text","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","order":3,"width":0,"height":0,"name":"","label":"ESP32 RFID至Line訊息","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":1090,"y":140,"wires":[]},{"id":"3b949643e95630ef","type":"mqtt in","z":"024ba427a7f5812e","name":"RFID_PICC","topic":"alex9ufo/2024/RFID/RFID_PICC","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":790,"y":280,"wires":[["13f661295c829301","389105838630bc97"]]},{"id":"389105838630bc97","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":980,"y":240,"wires":[["22f59fb343de54a2"]]},{"id":"22f59fb343de54a2","type":"function","z":"024ba427a7f5812e","name":"function 覆蓋","func":"msg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1130,"y":240,"wires":[["13f661295c829301"]]},{"id":"13f661295c829301","type":"ui_text","z":"024ba427a7f5812e","group":"7bec0a4da1755d2d","order":3,"width":6,"height":5,"name":"","label":"RFID -->","format":"{{msg.payload}}","layout":"row-left","className":"","x":1320,"y":280,"wires":[]},{"id":"c0707331bbc29acc","type":"debug","z":"024ba427a7f5812e","name":"debug 270","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":350,"y":480,"wires":[]},{"id":"603bb104.d6134","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"7b4b159b9632feb1","type":"ui_group","name":"LED","tab":"dd5fce9c0b030350","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"610b6d14a9aef1a0","type":"ui_group","name":"LINE","tab":"dd5fce9c0b030350","order":2,"disp":true,"width":10,"collapse":false,"className":""},{"id":"7bec0a4da1755d2d","type":"ui_group","name":"RFID","tab":"dd5fce9c0b030350","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"dd5fce9c0b030350","type":"ui_tab","name":"2024RFID產業專班","icon":"dashboard","order":103,"disabled":false,"hidden":false}]</span></div><div><span style="font-size: x-large;"><br /></span></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-56446625105507571382024-03-04T02:09:00.000-08:002024-03-04T02:09:05.876-08:00 Android APP Linear MQTT Dashboard 設定 (以 作業1 為例)<p><span style="font-size: x-large;"> Android APP Linear MQTT Dashboard 設定 (以 作業1 為例)</span></p><p><span style="font-size: x-large;"><br /></span></p><p></p><p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 16.0pt;"><span style="mso-spacerun: yes;"> </span>Android APP <span style="mso-spacerun: yes;"> </span>Linear MQTT Dashboard </span></b><b style="mso-bidi-font-weight: normal;"><span style="font-family: "新細明體",serif; font-size: 16.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">設定</span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 16.0pt;"><o:p></o:p></span></b></p><p class="MsoNormal"><b style="mso-bidi-font-weight: normal;"></b></p><div class="separator" style="clear: both; text-align: center;"><b style="mso-bidi-font-weight: normal;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirBB9Xwn-3S-edghyphenhyphenTZm0_RSF_Z8XB5VD_fvyX_S2svA3UMAQa4wlMiruymoV-3U1AtlqJed4fnPiBfP2s4wsC7pWdMCG4XMJdSkAZsuF_s7dEF_aWud7R_ZatBhtHXvzlzkZLmHNxm5y0-cxB4sGtlZKgZOfZbBbXxrj8dbX8NnsWeBPq_Hh83BeX9Qg/s911/2024-03-04%2017%2018%2033.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="738" data-original-width="911" height="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirBB9Xwn-3S-edghyphenhyphenTZm0_RSF_Z8XB5VD_fvyX_S2svA3UMAQa4wlMiruymoV-3U1AtlqJed4fnPiBfP2s4wsC7pWdMCG4XMJdSkAZsuF_s7dEF_aWud7R_ZatBhtHXvzlzkZLmHNxm5y0-cxB4sGtlZKgZOfZbBbXxrj8dbX8NnsWeBPq_Hh83BeX9Qg/w640-h518/2024-03-04%2017%2018%2033.png" width="640" /></a></b></div><b style="mso-bidi-font-weight: normal;"><br /><span style="font-family: "新細明體",serif; font-size: 16.0pt; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"><br /></span></b><p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGdB99-2-QedfM-fHL1vcnICXlNKToLCIAQFjf_4d_zgVs7RY3LMy4aBBXEElsttZVwX0mjYTwjXubxqK6eaYCZduV0YK6GJyALS1R_T7rMmN7EoVW6KtnTia9b_-R1aLJLOqU7s5O3f0uNvw9JQD48xeYWwbxdumBGTcK1g-UXLIW6SODaSHCf0-XIQ/s1009/2024-03-04%2017%2056%2052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="713" data-original-width="1009" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrGdB99-2-QedfM-fHL1vcnICXlNKToLCIAQFjf_4d_zgVs7RY3LMy4aBBXEElsttZVwX0mjYTwjXubxqK6eaYCZduV0YK6GJyALS1R_T7rMmN7EoVW6KtnTia9b_-R1aLJLOqU7s5O3f0uNvw9JQD48xeYWwbxdumBGTcK1g-UXLIW6SODaSHCf0-XIQ/w640-h452/2024-03-04%2017%2056%2052.png" width="640" /></a></div><br /><p class="MsoNormal"><br /></p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd; text-indent: -18.0pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span style="mso-list: Ignore;">²<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><span lang="EN-US"><span style="mso-spacerun: yes;"> </span></span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">以</span> <span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">作業</span><span lang="EN-US">1 </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">為例</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Arduino </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">程式內的設定</span><span lang="EN-US"><o:p></o:p></span></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP-39SkbdFfU0gPY_A_rLbTijLaosTcBg-78vER8SafXaLtxo3ZxFCAJEwxOS0KFJ9ewexlRps0Zx9NXd6bIS_P-zYCnKM4Cqc0mSyvwut9CCoQFQXGXqK0KN4cjCEPxevj4mWqYG-SFYKDhymF35tVPot3EwhqQztHDSYzMk6SKyjlG8Z65PvYYxgeMw/s647/2024-03-04%2017%2022%2043.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="344" data-original-width="647" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiP-39SkbdFfU0gPY_A_rLbTijLaosTcBg-78vER8SafXaLtxo3ZxFCAJEwxOS0KFJ9ewexlRps0Zx9NXd6bIS_P-zYCnKM4Cqc0mSyvwut9CCoQFQXGXqK0KN4cjCEPxevj4mWqYG-SFYKDhymF35tVPot3EwhqQztHDSYzMk6SKyjlG8Z65PvYYxgeMw/w640-h340/2024-03-04%2017%2022%2043.png" width="640" /></a></div><br /><p class="MsoNormal"><br /></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">const char broker[] =
"broker.mqtt-dashboard.com";<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">int
port = 1883;<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: "新細明體",serif; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt;"><o:p> </o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">const char *SubTopic1
= "alex9ufo/2024/RFID/LED";<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">const char *PubTopic2
= "alex9ufo/2024/RFID/Back_LED";<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">const char *PubTopic3
= "alex9ufo/2024/RFID/RFID_UID";<o:p></o:p></span></p>
<p class="MsoNormal" style="mso-pagination: widow-orphan;"><span lang="EN-US" style="color: red; font-family: Consolas; font-size: 15.0pt; mso-bidi-font-family: 新細明體; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">const char *PubTopic4
= "alex9ufo/2024/RFID/RFID_PICC";<o:p></o:p></span></p>
<p class="MsoNormal"><br /></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2DiAiGPGzUeUWfBtaYWUAbQv6bDJ8nyftffRqiHv_zgi2o1yLlVfhu56ZNxe-LuEf7EH9jLq79GozXdKSqBseBlC7txZ9IP4ndGQJapScEvKG7Y7lNnAjYP8cplX29eaOSNPmAUmOvma7JSIpACKlJKV8NJndrEIhpuIBEEO5cNy1kMYjKwbWw_chYk4/s980/2024-03-04%2017%2021%2021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="511" data-original-width="980" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2DiAiGPGzUeUWfBtaYWUAbQv6bDJ8nyftffRqiHv_zgi2o1yLlVfhu56ZNxe-LuEf7EH9jLq79GozXdKSqBseBlC7txZ9IP4ndGQJapScEvKG7Y7lNnAjYP8cplX29eaOSNPmAUmOvma7JSIpACKlJKV8NJndrEIhpuIBEEO5cNy1kMYjKwbWw_chYk4/w640-h334/2024-03-04%2017%2021%2021.png" width="640" /></a></div><br /><p class="MsoNormal"><br /></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 24.0pt; mso-list: l0 level1 lfo2; mso-para-margin-left: 0gd; text-indent: -24.0pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span style="mso-list: Ignore;">²<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><span lang="EN-US">MQTT</span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;"> </span><span lang="EN-US">Broker </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">設定</span><span lang="EN-US"><o:p></o:p></span></p>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;">
<td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.15pt;" valign="top" width="300">
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNedCRKwN8MRxzH5fLxtYuQE7B28U2lut4AW6DrvtYCA56zv6CGmfMrz9vSwgz0mmgH70w4kZOfo-LyhTCGjVdbR8rHWXBFkRkoAYbgc7phJP7izsfQUFxFZN563f8yFB7Rz-S1K4MBxiUZ8lS9itip3XcAfKw3FORUA8NEfjRmF97NG1EX7NaYKoeUKY/s2400/Screenshot_20240304_162435_Linear%20MQTT%20Dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNedCRKwN8MRxzH5fLxtYuQE7B28U2lut4AW6DrvtYCA56zv6CGmfMrz9vSwgz0mmgH70w4kZOfo-LyhTCGjVdbR8rHWXBFkRkoAYbgc7phJP7izsfQUFxFZN563f8yFB7Rz-S1K4MBxiUZ8lS9itip3XcAfKw3FORUA8NEfjRmF97NG1EX7NaYKoeUKY/w249-h400/Screenshot_20240304_162435_Linear%20MQTT%20Dashboard.jpg" width="249" /></a></div><br /><p class="MsoNormal"><br /></p>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 300.95pt;" valign="top" width="401">
<p class="MsoNormal"><span lang="EN-US">Server:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Tcp://</span><span lang="EN-US" style="background: #1F272A; color: #7fcbcd; font-family: Consolas; font-size: 15.0pt;">
broker.mqtt-dashboard.com</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Port: </span><span lang="EN-US" style="background: #1F272A; color: #7fcbcd; font-family: Consolas; font-size: 15.0pt;">1883</span><o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">其他</span> <span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">可以不用設定</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoListParagraph" style="margin-left: 24.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span> </p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd; text-indent: -18.0pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span style="mso-list: Ignore;">²<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><span lang="EN-US">LED ON , OFF </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">控制</span><span lang="EN-US"><o:p></o:p></span></p>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; margin-left: 18.0pt; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;">
<td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 221.3pt;" valign="top" width="295">
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgkNvcqHIHioStKbuoDpsu0vnW0rwFcmFcbN0H5EKUSAgs-DRUGnKwryGAGG9mfF9_-Ot-QsU8QRDw6qHc726Q4ozfiEKuhz_wkb9YTQ4IkK9KLzK0smpgJJrtdNF1ebvDpBfvPGBZTiFv_qwW-F6Kul24mX2DS6b2eHzo9UaF-mXvj_kKCHDQFUmqso0/s2400/Screenshot_20240304_162401_Linear%20MQTT%20Dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgkNvcqHIHioStKbuoDpsu0vnW0rwFcmFcbN0H5EKUSAgs-DRUGnKwryGAGG9mfF9_-Ot-QsU8QRDw6qHc726Q4ozfiEKuhz_wkb9YTQ4IkK9KLzK0smpgJJrtdNF1ebvDpBfvPGBZTiFv_qwW-F6Kul24mX2DS6b2eHzo9UaF-mXvj_kKCHDQFUmqso0/w229-h373/Screenshot_20240304_162401_Linear%20MQTT%20Dashboard.jpg" width="229" /></a></div><br /><p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><br /></p>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 294.8pt;" valign="top" width="393">
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Widget type : Switch<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Name : </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">自行命名</span> <span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">例如</span><span lang="EN-US">LED<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">訂閱主題</span><span lang="EN-US"> : Sub.topic <o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">發行主題</span> <span lang="EN-US">Pub.topic: </span><span lang="EN-US" style="color: red; font-family: Consolas; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">alex9ufo/2024/RFID/LED<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">‘On’ Value : on <span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: red;">//</span></span><span style="color: red; font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">程式裡面是</span><span style="color: red;"> </span><span style="color: red; font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">小寫</span><span style="color: red;">
<span lang="EN-US">on<o:p></o:p></span></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">‘Off’ Value : off<span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: red;">//</span></span><span style="color: red; font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">程式裡面是</span><span style="color: red;"> </span><span style="color: red; font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">小寫</span><span style="color: red;">
<span lang="EN-US">off<o:p></o:p></span></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">其他不用填寫</span><span lang="EN-US"><o:p></o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd; text-indent: -18.0pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span style="mso-list: Ignore;">²<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><span lang="EN-US">RFID UID </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">訂閱</span><span lang="EN-US"><o:p></o:p></span></p>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;">
<td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 232.2pt;" valign="top" width="310">
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq3AJot3m_PvEuXjY-77sgnzfsQs41Zn4FIY9YqFOlZpwgmUwqYzdEqTr23WwK-3E2MhI-lP-24D2W32uOnvLZHA5SSX_sEdHiGFkakMUAiierSso76UdNu6pVa7O6Pc-RRVGcW2rPLGpKhbh5vhLvWcqVr3g1aLGkRR82bGq6kKxk6nPg0RZc8TD3N94/s2400/Screenshot_20240304_162412_Linear%20MQTT%20Dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjq3AJot3m_PvEuXjY-77sgnzfsQs41Zn4FIY9YqFOlZpwgmUwqYzdEqTr23WwK-3E2MhI-lP-24D2W32uOnvLZHA5SSX_sEdHiGFkakMUAiierSso76UdNu6pVa7O6Pc-RRVGcW2rPLGpKhbh5vhLvWcqVr3g1aLGkRR82bGq6kKxk6nPg0RZc8TD3N94/w226-h370/Screenshot_20240304_162412_Linear%20MQTT%20Dashboard.jpg" width="226" /></a></div><br /><p class="MsoNormal"><br /></p>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 293.9pt;" valign="top" width="392">
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Widget type : <span style="mso-spacerun: yes;"> </span>Value<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Name : </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">自行命名</span> <span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">例如</span><span lang="EN-US">UID<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">訂閱主題</span><span lang="EN-US">Sub.topic : </span><span lang="EN-US" style="color: red; mso-bidi-font-size: 12.0pt;">a</span><span lang="EN-US" style="color: red; font-family: Consolas; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">lex9ufo/2024/RFID/RFID_UID</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">發行主題</span> <span lang="EN-US">Pub.topic: </span><span lang="EN-US" style="color: red; font-family: Consolas; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;"><span style="mso-spacerun: yes;"> </span><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">其他不用填寫</span><span lang="EN-US"><o:p></o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-list: l1 level1 lfo1; mso-para-margin-left: 0gd; text-indent: -18.0pt;"><!--[if !supportLists]--><span lang="EN-US" style="font-family: Wingdings; mso-bidi-font-family: Wingdings; mso-fareast-font-family: Wingdings;"><span style="mso-list: Ignore;">²<span style="font: 7.0pt "Times New Roman";"> </span></span></span><!--[endif]--><span lang="EN-US">RFID PICC</span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">訂閱</span><span lang="EN-US"><o:p></o:p></span></p>
<table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="border-collapse: collapse; border: none; mso-border-alt: solid windowtext .5pt; mso-padding-alt: 0cm 5.4pt 0cm 5.4pt; mso-yfti-tbllook: 1184;">
<tbody><tr style="mso-yfti-firstrow: yes; mso-yfti-irow: 0; mso-yfti-lastrow: yes;">
<td style="border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 225.15pt;" valign="top" width="300">
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TqqQQ0-UUWXOUqMXzj94VAoeYGpo1kD8HGoiJV5vmR4tzN5wyeTzkDzki4nT4pB-F-A24ISat420QnG6-1coTqcZwJnW79Ye2ePc1EeISfL1o3j7nMTFGgVpcSduz87GYR47TRY9D1D9SgRz9yRLNOuoj-JbVShtdpbtwpYVlyF-cPADWrBfNNrBcdI/s2400/Screenshot_20240304_162421_Linear%20MQTT%20Dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_TqqQQ0-UUWXOUqMXzj94VAoeYGpo1kD8HGoiJV5vmR4tzN5wyeTzkDzki4nT4pB-F-A24ISat420QnG6-1coTqcZwJnW79Ye2ePc1EeISfL1o3j7nMTFGgVpcSduz87GYR47TRY9D1D9SgRz9yRLNOuoj-JbVShtdpbtwpYVlyF-cPADWrBfNNrBcdI/w200-h338/Screenshot_20240304_162421_Linear%20MQTT%20Dashboard.jpg" width="200" /></a></div><br /><p class="MsoNormal"><br /></p>
</td>
<td style="border-left: none; border: solid windowtext 1.0pt; mso-border-alt: solid windowtext .5pt; mso-border-left-alt: solid windowtext .5pt; padding: 0cm 5.4pt 0cm 5.4pt; width: 300.95pt;" valign="top" width="401">
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Widget type : <span style="mso-spacerun: yes;"> </span>Value<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US">Name : </span><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">自行命名</span> <span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">例如</span><span lang="EN-US">PICC<o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">訂閱主題</span><span lang="EN-US">Sub.topic : </span><span lang="EN-US" style="color: red; mso-bidi-font-size: 12.0pt;">a</span><span lang="EN-US" style="color: red; font-family: Consolas; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;">lex9ufo/2024/RFID/RFID_PICC</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">發行主題</span> <span lang="EN-US">Pub.topic: </span><span lang="EN-US" style="color: red; font-family: Consolas; mso-bidi-font-family: 新細明體; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 新細明體; mso-font-kerning: 0pt;"><span style="mso-spacerun: yes;"> </span><o:p></o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoListParagraph" style="margin-left: 0cm; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="font-family: "新細明體",serif; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin;">其他不用填寫</span><span lang="EN-US"><o:p></o:p></span></p>
</td>
</tr>
</tbody></table>
<p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p> </o:p></span></p><p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"><o:p>執行 APP</o:p></span></p><p class="MsoListParagraph" style="margin-left: 18.0pt; mso-para-margin-left: 0gd;"><span lang="EN-US"></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhJrduInNrlG40eS3qfHI3FQBU0NfL85GpkLRLcAza7UEGZNuutKUmF05Ac9XIfQXt0k2DVC028F3ZCmJvXZcAkl0Gsy5XgVspI0boilge0ny-ZVm3iSY1UREPko-O2v7W1MMFDZFmuKBpCvYN195vd-rKMvuQStX0ptd2dwTPO1-OM3BAZg-S9FkuM7s/s2400/Screenshot_20240304_162347_Linear%20MQTT%20Dashboard.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhJrduInNrlG40eS3qfHI3FQBU0NfL85GpkLRLcAza7UEGZNuutKUmF05Ac9XIfQXt0k2DVC028F3ZCmJvXZcAkl0Gsy5XgVspI0boilge0ny-ZVm3iSY1UREPko-O2v7W1MMFDZFmuKBpCvYN195vd-rKMvuQStX0ptd2dwTPO1-OM3BAZg-S9FkuM7s/w288-h640/Screenshot_20240304_162347_Linear%20MQTT%20Dashboard.jpg" width="288" /></a></div><br /><o:p><br /></o:p><p></p><span style="font-size: x-large;"></span><p></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-84849191348988679612024-03-03T01:00:00.000-08:002024-03-03T18:37:26.176-08:00產專班 作業1 說明 <p><span style="font-size: x-large;"> 2024 產專班 作業1 說明</span></p><p><span style="font-size: x-large;"><br /></span></p><p><span style="font-size: x-large;">Mediafire (</span><span style="font-size: xx-large;">作業1 說明</span><span style="font-size: xx-large;">)</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUQ4hSAQkFbhHKheSahNOcJuxqmhWeNmVWuq-9E_pa4rdRPeeHb4MS31rDZnEysoh3opWXfDECVF1SO4W_KGcuD1LiaT4r0CP2AnQScqSRgnFd-MZsVDGr893-usk1uvHSR9UdeOXrV9A_OrmMT2ywzULOkuMUO9m-ckwDogbb71L9Eq7jzPkn8G93Z4/s1082/2024-03-04%2010%2036%2012.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="781" data-original-width="1082" height="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzUQ4hSAQkFbhHKheSahNOcJuxqmhWeNmVWuq-9E_pa4rdRPeeHb4MS31rDZnEysoh3opWXfDECVF1SO4W_KGcuD1LiaT4r0CP2AnQScqSRgnFd-MZsVDGr893-usk1uvHSR9UdeOXrV9A_OrmMT2ywzULOkuMUO9m-ckwDogbb71L9Eq7jzPkn8G93Z4/w640-h462/2024-03-04%2010%2036%2012.png" width="640" /></a></div><br /><p></p><p><a href="https://www.mediafire.com/file/6jg64k5gix7scaj/2024%25E5%25B9%25B4_RFID%25E6%2587%2589%25E7%2594%25A8%25E5%25AF%25A6%25E7%25BF%2592%25E4%25BD%259C%25E6%25A5%25AD1.pdf/file">https://www.mediafire.com/file/6jg64k5gix7scaj/2024%25E5%25B9%25B4_RFID%25E6%2587%2589%25E7%2594%25A8%25E5%25AF%25A6%25E7%25BF%2592%25E4%25BD%259C%25E6%25A5%25AD1.pdf/file</a></p><p><br /></p><p><br /></p><p><span style="font-size: x-large;">之前的作業 說明</span></p><p><a href="https://www.mediafire.com/file/re4fk9dasbjclaf/112%25E5%25B9%25B4_RFID%25E6%2587%2589%25E7%2594%25A8%25E5%25AF%25A6%25E7%25BF%2592%25E4%25BD%259C%25E6%25A5%25AD1.pdf/file">https://www.mediafire.com/file/re4fk9dasbjclaf/112%25E5%25B9%25B4_RFID%25E6%2587%2589%25E7%2594%25A8%25E5%25AF%25A6%25E7%25BF%2592%25E4%25BD%259C%25E6%25A5%25AD1.pdf/file</a></p><p><br /></p><p><a href="https://www.mediafire.com/file/8im3w71733i4772/2018%25E5%258B%25A4%25E7%259B%258A%25E7%25A7%2591%25E5%25A4%25A7RFID%25E6%2587%2589%25E7%2594%25A8-1-1.pdf/file">https://www.mediafire.com/file/8im3w71733i4772/2018%25E5%258B%25A4%25E7%259B%258A%25E7%25A7%2591%25E5%25A4%25A7RFID%25E6%2587%2589%25E7%2594%25A8-1-1.pdf/file</a></p><p><br /></p><p><a href="https://www.mediafire.com/file/ooen5hcocms61ak/2020%25E5%258B%25A4%25E7%259B%258A%25E7%25A7%2591%25E5%25A4%25A7RFID%25E6%2587%2589%25E7%2594%25A8-1-1.pdf/file">https://www.mediafire.com/file/ooen5hcocms61ak/2020%25E5%258B%25A4%25E7%259B%258A%25E7%25A7%2591%25E5%25A4%25A7RFID%25E6%2587%2589%25E7%2594%25A8-1-1.pdf/file</a></p><p><br /></p><p><a href="https://www.mediafire.com/file/rbnu789yrchs1rf/Android_APP_MQTT_Snooper_%25E7%259A%2584%25E8%25A8%25AD%25E5%25AE%259A%25E6%2596%25B9%25E6%25B3%2595.pdf/file">https://www.mediafire.com/file/rbnu789yrchs1rf/Android_APP_MQTT_Snooper_%25E7%259A%2584%25E8%25A8%25AD%25E5%25AE%259A%25E6%2596%25B9%25E6%25B3%2595.pdf/file</a></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-71553665397719864542024-03-02T04:09:00.000-08:002024-03-03T18:38:38.491-08:00產專班 作業1 RFID + MQTT +Line Notify <p style="text-align: center;"><span style="font-size: x-large;"><b>產專班 作業1 </b></span></p><p style="text-align: center;"><span style="font-size: x-large;"><b>RFID + MQTT +Line Notify </b></span></p><p style="text-align: center;"><span style="font-size: x-large;"><b>(需修改成自己的部分 參考作業說明)</b></span></p><p style="text-align: center;"><span style="color: red; font-size: x-large;"><b style="background-color: #04ff00;">wifi 帳號密碼 , 裡面alex9ufo , line的權杖</b></span></p><p style="text-align: center;"><span style="color: red; font-size: x-large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="color: red; font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgogX8CpGLpTQbTKquLSew6SjAwt9dl6_5Q_R9UkXZIH8ii1ezcP3fH_OE6YIVZkcTs6wxPOauSU7KubFVoOvXq4k5kJJRDOmDvKDacOmCN4BYipxGC3-otYdGxkpWVRMWyJ0D5Pf8_GlSQOMmXY90bamHxniRbZejGmnE71cV6ItOrPETmngpYAppFn4k/s1082/2024-03-04%2010%2036%2012.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="781" data-original-width="1082" height="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgogX8CpGLpTQbTKquLSew6SjAwt9dl6_5Q_R9UkXZIH8ii1ezcP3fH_OE6YIVZkcTs6wxPOauSU7KubFVoOvXq4k5kJJRDOmDvKDacOmCN4BYipxGC3-otYdGxkpWVRMWyJ0D5Pf8_GlSQOMmXY90bamHxniRbZejGmnE71cV6ItOrPETmngpYAppFn4k/w640-h462/2024-03-04%2010%2036%2012.png" width="640" /></a></span></div><span style="color: red; font-size: x-large;"><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4-X9GKsU5AefCr8xG6pAbShtuvom5B44J08rGaGSb6MQaepHBZzixws0BP7B9L9hlfif6ej_mv6I7B4PO2Dc6r4NYcQRKkk8ICuU7AgUiTg9oyENGQbmC8nfvQVHMQTkShNDPgybRCc51uTObcFHr8n6tyKmp62h6Q7LJ5U2ucIWEErN6ZQdi0n5tdBQ/s1059/EX1.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="789" data-original-width="1059" height="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4-X9GKsU5AefCr8xG6pAbShtuvom5B44J08rGaGSb6MQaepHBZzixws0BP7B9L9hlfif6ej_mv6I7B4PO2Dc6r4NYcQRKkk8ICuU7AgUiTg9oyENGQbmC8nfvQVHMQTkShNDPgybRCc51uTObcFHr8n6tyKmp62h6Q7LJ5U2ucIWEErN6ZQdi0n5tdBQ/w640-h476/EX1.png" width="640" /></a></div></span><p></p><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisn6xkkGCU6YbaEez2pzY6HX8lo0lsf7-La6B7G1y2JI8uhfVxvppscrJigpBkVqVdQ-l1wyLO0KdH8hjQf-wDlnOUlBErifsfrBy2zGOtykJSHQlXGxmiG2XCZUbfjKDOcqCV1ZjdjIBGbns5RrYQHl9lq5VMy0fx1iCmGnPnyKnkheEPPWS6_oH5gB8/s931/ESP32+MFRC522-2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="425" data-original-width="931" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisn6xkkGCU6YbaEez2pzY6HX8lo0lsf7-La6B7G1y2JI8uhfVxvppscrJigpBkVqVdQ-l1wyLO0KdH8hjQf-wDlnOUlBErifsfrBy2zGOtykJSHQlXGxmiG2XCZUbfjKDOcqCV1ZjdjIBGbns5RrYQHl9lq5VMy0fx1iCmGnPnyKnkheEPPWS6_oH5gB8/w640-h292/ESP32+MFRC522-2.png" width="640" /></a></div><div><br /></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * MFRC522 ESP32 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * Reader/PCD </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * Signal Pin Pin </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * -----------------------------------</span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * RST/Reset RST GPIO27 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * SPI SS SDA(SS) GPIO5 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * SPI MOSI MOSI GPIO23 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * SPI MISO MISO GPIO19 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="font-size: medium;"> * SPI SCK SCK GPIO18 </span></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB_cxxDpOh1fPS85W0Q709icsZKkcaulCQFIZFyY2xR67i7XH4RuaMBvutI28be6kFpJR3fQxpgR-3Y4WdfGTrXSIE6AsE0Kq8rz9-ZY95TU7bkNfEbRTGj9L_NQ6Zu_lWR78cQy6LajJdejg47wWSkSwo4IjWzoLHbqCF3VTjoo0NZ-mcyxBMWxbnboI/s1247/2024-03-02%2019%2037%2009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="667" data-original-width="1247" height="342" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjB_cxxDpOh1fPS85W0Q709icsZKkcaulCQFIZFyY2xR67i7XH4RuaMBvutI28be6kFpJR3fQxpgR-3Y4WdfGTrXSIE6AsE0Kq8rz9-ZY95TU7bkNfEbRTGj9L_NQ6Zu_lWR78cQy6LajJdejg47wWSkSwo4IjWzoLHbqCF3VTjoo0NZ-mcyxBMWxbnboI/w640-h342/2024-03-02%2019%2037%2009.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO_6c-7270KJCWSdKjK5yUw54yKUnLPpb6rQsnr0SPUCxhT5DJHWFcJbKeQ7WpPvH48_n1h2M-SbRM6ayHN9q0rKETyC9Tt-8piGk29sptWjooyz4InuCuDTCj4ekpvCJ2rUBgSUWMfuvyRj31-ONsb3VdCgEt1igUBUL9AvqWJqENlGCAhkI1scRxQf4/s1402/2024-03-02%2019%2044%2045.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="733" data-original-width="1402" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgO_6c-7270KJCWSdKjK5yUw54yKUnLPpb6rQsnr0SPUCxhT5DJHWFcJbKeQ7WpPvH48_n1h2M-SbRM6ayHN9q0rKETyC9Tt-8piGk29sptWjooyz4InuCuDTCj4ekpvCJ2rUBgSUWMfuvyRj31-ONsb3VdCgEt1igUBUL9AvqWJqENlGCAhkI1scRxQf4/w640-h334/2024-03-02%2019%2044%2045.png" width="640" /></a></div><br /><p><br /></p><p><span style="color: red; font-size: large;">Arduino 程式 </span></p><p><span style="color: red; font-size: large;">需要 有2個檔案</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7YkifGUuTGmmKGJ39DAddCl4YcMCbz25hzaywuSPCV2PZMFKMUJXz7nZjgkHvNKzLGuKJzE1OavkUutX60BfLRS5tBAtPz3D4-SuHJfCUnLFfYisWyXLMkEUGcVWOujtMEcXzDjcUNy-xPaMvGHLquktEo7nSs5MyXuOZ1B66sWIJUNy-4OSAQ-cMPw/s337/2024-03-03%2014%2026%2048.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="323" data-original-width="337" height="614" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7YkifGUuTGmmKGJ39DAddCl4YcMCbz25hzaywuSPCV2PZMFKMUJXz7nZjgkHvNKzLGuKJzE1OavkUutX60BfLRS5tBAtPz3D4-SuHJfCUnLFfYisWyXLMkEUGcVWOujtMEcXzDjcUNy-xPaMvGHLquktEo7nSs5MyXuOZ1B66sWIJUNy-4OSAQ-cMPw/w640-h614/2024-03-03%2014%2026%2048.png" width="640" /></a></div><br /><p></p><p><span style="color: red; font-size: large;">一個是 Arduino </span><span style="color: red; font-size: x-large;">2024_RFID_LED.ino 檔案 </span></p><p><span style="color: red; font-size: large;">另一個是 arduino_secrets.h 有2行程式 如下</span></p><p><span style="color: red; font-size: large;">#define SECRET_SSID ""</span></p><p><span style="color: red; font-size: large;"></span></p><p><span style="color: red; font-size: large;">#define SECRET_PASS ""</span></p><p><span style="color: red; font-size: large;"><br /></span></p><p><span style="color: red; font-size: x-large;">Arduino 2024_RFID_LED.ino 檔案</span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #7f8c8d;">//GPIO 2 D1 Build in LED</span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">13</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"TOTOLINK_A3002MU"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"24063173"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><div><span style="color: #7f8c8d;">// WiFi SSID password , SSID 和密碼進行Wi-Fi 設定 </span></div><br /><div><span style="color: #7f8c8d;">//const char ssid[] = "alex9ufo"; // Enter your Wi-Fi name</span></div><div><span style="color: #7f8c8d;">//const char pass[] = "alex9981"; // Enter Wi-Fi password</span></div><br /><div><span style="color: #7f8c8d;">//char ssid[] = "dlink-103A"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "bdcce12882"; // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *SubTopic1 = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID/LED"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *PubTopic2 = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID/Back_LED"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *PubTopic3 = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID/RFID_UID"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *PubTopic4 = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID/RFID_PICC"</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID/Starting"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//布林代數 LED狀態 是否連上網路ESP32 ready ?</span></div><div><span style="color: #0ca1a6;">bool</span> ledState = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> atwork = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div>String LEDjson = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">int</span> Count= <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String message=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> message += (<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(message);</div><div> <span style="color: #f39c12;">message</span>.<span style="color: #f39c12;">trim</span>();</div><div> <span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (Topic==<span style="color: #7fcbcd;">"alex9ufo/2024/RFID/LED"</span>) {</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"on"</span>) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn on the LED</span></div><div><span style="color: #7f8c8d;"> //ledState = true; //ledState = ture HIGH</span></div><div><span style="color: #7f8c8d;"> //設定 各個 旗號</span></div><div> LEDjson =<span style="color: #7fcbcd;">"ON"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"off"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div><span style="color: #7f8c8d;"> //ledState = false; //ledState = false LOW</span></div><div> LEDjson =<span style="color: #7fcbcd;">"OFF"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"-----------------------"</span>);</div><div> } </div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//判斷 旗號Flash , Timer 是否為真</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">LED_Message</span>() {</div><div><span style="color: #7f8c8d;"> ////判斷 旗號 Send 是否為真 回傳MQTT訊息到MQTT Broker </span></div><div> <span style="color: #c586c0;">if</span> (Send) {</div><div><span style="color: #7f8c8d;"> // Convert JSON string to character array</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Publish message: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><div> </div><div><span style="color: #7f8c8d;"> // Publish JSON character array to MQTT topic</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(PubTopic2, <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);<span style="color: #7f8c8d;"> //LED Status</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(LEDjson);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //處理過後 旗號 Send為假</span></div><div> }</div><br /><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED initially</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"ESP32 Start working....!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(SubTopic1);</div><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(SubTopic1, subscribeQos);</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div><span style="color: #7f8c8d;"> //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><div> </div><div> <span style="color: #f39c12;">LED_Message</span>();</div><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(PubTopic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = <span style="color: #7fcbcd;">"PICC type: "</span>;</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> </div><div> retained = <span style="color: #7fcbcd;">false</span>;</div><div> qos = <span style="color: #7fcbcd;">1</span>;</div><div> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(PubTopic4, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));</span></div><div> </div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div><p><span style="color: red; font-size: large;">Node=Red 程式</span></p><p><br /></p><p>[{"id":"9f51922c96475745","type":"mqtt in","z":"024ba427a7f5812e","name":"Rack LED","topic":"alex9ufo/2024/RFID/Back_LED","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":160,"y":520,"wires":[["a8fcaef90ac2a7ea","2778b0a8751644f1","5f2c87735b333a9c","c0707331bbc29acc"]]},{"id":"a8fcaef90ac2a7ea","type":"function","z":"024ba427a7f5812e","name":"function LED on ,off","func":"var onoff=msg.payload;\n\nif (onoff==\"ON\")\n{\n msg.payload=true;\n}\nif (onoff==\"OFF\")\n{\n msg.payload=false;\n} \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":600,"wires":[["11f9b3fed3944fec"]]},{"id":"bfb3b1e0afad219b","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"false","payloadType":"bool","x":350,"y":680,"wires":[["11f9b3fed3944fec"]]},{"id":"03dd3a2a9506eea5","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":370,"y":640,"wires":[["11f9b3fed3944fec"]]},{"id":"11f9b3fed3944fec","type":"ui_led","z":"024ba427a7f5812e","order":1,"group":"7b4b159b9632feb1","width":6,"height":5,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"","x":570,"y":600,"wires":[]},{"id":"1639f0d1ca085251","type":"ui_button","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","order":2,"width":0,"height":0,"passthru":false,"label":"LED ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":180,"y":80,"wires":[["1953eedb67e61c2c","16609fe88dddf2ab","1b28a9dbc6b3afc8"]]},{"id":"415bdb9608b58cee","type":"ui_button","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","order":3,"width":0,"height":0,"passthru":false,"label":"LED OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":180,"y":180,"wires":[["1953eedb67e61c2c","16609fe88dddf2ab","1b28a9dbc6b3afc8"]]},{"id":"1953eedb67e61c2c","type":"ui_audio","z":"024ba427a7f5812e","name":"","group":"7b4b159b9632feb1","voice":"Google US English","always":"","x":420,"y":140,"wires":[]},{"id":"16609fe88dddf2ab","type":"mqtt out","z":"024ba427a7f5812e","name":"LED","topic":"alex9ufo/2024/RFID/LED","qos":"0","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":410,"y":80,"wires":[]},{"id":"2778b0a8751644f1","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":5,"width":0,"height":0,"name":"","label":"MQTT<<訂閱>>的訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":380,"y":560,"wires":[]},{"id":"1b28a9dbc6b3afc8","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":4,"width":0,"height":0,"name":"","label":"MQTT [ [發行] ] 的訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":460,"y":180,"wires":[]},{"id":"4d98ddd8f5354d4f","type":"ui_text","z":"024ba427a7f5812e","group":"7b4b159b9632feb1","order":6,"width":0,"height":0,"name":"","label":"MQTT 的Broker :","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":710,"y":340,"wires":[]},{"id":"a6a877eb4be7a0cf","type":"function","z":"024ba427a7f5812e","name":"function on off","func":"var on_off=flow.get(\"onoff\");\n\nif (on_off== true)\n{\n msg.payload='HiveMQTT';\n flow.set(\"onoff\",false)\n} \nelse\n{\n msg.payload=' ';\n flow.set(\"onoff\",true)\n}\nmsg.color=\"red\";\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":340,"wires":[["4d98ddd8f5354d4f","8f16f50beb2fd914"]]},{"id":"1ab8fc00ab6a2801","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"true","payloadType":"bool","x":170,"y":340,"wires":[["a6a877eb4be7a0cf","b234e6b8f0c79306"]]},{"id":"8f16f50beb2fd914","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":480,"y":280,"wires":[["a6a877eb4be7a0cf"]]},{"id":"b234e6b8f0c79306","type":"function","z":"024ba427a7f5812e","name":"function flow set","func":"flow.set(\"onoff\",true);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":380,"wires":[[]]},{"id":"c6aada400221f416","type":"comment","z":"024ba427a7f5812e","name":"發行 alex9ufo/2024/RFID/LED","info":"","x":220,"y":140,"wires":[]},{"id":"a0786c74e597ace5","type":"comment","z":"024ba427a7f5812e","name":"訂閱 alex9ufo/2024/RFID/Back_LED","info":"","x":240,"y":440,"wires":[]},{"id":"cffb26e93155b0b4","type":"comment","z":"024ba427a7f5812e","name":"定期 閃爍 HiveMQTT","info":"","x":200,"y":280,"wires":[]},{"id":"a3da334ec58d571b","type":"inject","z":"024ba427a7f5812e","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"10","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":740,"y":420,"wires":[["96d55c93b931523e"]]},{"id":"5ebf60e91bf99d7a","type":"template","z":"024ba427a7f5812e","name":"Image in","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<img src=\"data:image/png;base64,{{payload}}\"style=\"width=\"400\" height=\"300\"\"/>","output":"str","x":1280,"y":420,"wires":[["621cc26def28f659"]]},{"id":"621cc26def28f659","type":"ui_template","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","name":"MQTT","order":1,"width":10,"height":8,"format":"<div ng-bind-html=\"msg.payload\"></div>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":false,"templateScope":"local","className":"","x":1410,"y":420,"wires":[[]]},{"id":"96d55c93b931523e","type":"file in","z":"024ba427a7f5812e","name":"","filename":"D:\\2024RFID\\作業1\\EX1.png","filenameType":"str","format":"","chunk":false,"sendError":false,"encoding":"none","allProps":false,"x":940,"y":420,"wires":[["c62ccd80dad331eb"]]},{"id":"c62ccd80dad331eb","type":"base64","z":"024ba427a7f5812e","name":"","action":"","property":"payload","x":1140,"y":420,"wires":[["5ebf60e91bf99d7a"]]},{"id":"b7ab30b1c8592615","type":"comment","z":"024ba427a7f5812e","name":"On inject add MQTT picture to the dashboard","info":"","x":1110,"y":380,"wires":[]},{"id":"8d7b00ea7d339381","type":"comment","z":"024ba427a7f5812e","name":"存放路徑若是不同需修改","info":"存放路徑\nD:\\2024RFID\\作業1\\EX1.png\n若是不同需修改","x":770,"y":380,"wires":[]},{"id":"5f2c87735b333a9c","type":"function","z":"024ba427a7f5812e","name":"function ","func":"msg.payload=\" ---ESP32 回來 LED的狀態---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":520,"wires":[["7cb295df3f651ad8","a588fcd00a340802"]]},{"id":"7cb295df3f651ad8","type":"function","z":"024ba427a7f5812e","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":550,"y":540,"wires":[["69f4d04c83a3b62d"]]},{"id":"69f4d04c83a3b62d","type":"http request","z":"024ba427a7f5812e","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":700,"y":540,"wires":[["3db96139024c408b"]]},{"id":"3db96139024c408b","type":"debug","z":"024ba427a7f5812e","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":850,"y":540,"wires":[]},{"id":"b53b1192a01aea88","type":"comment","z":"024ba427a7f5812e","name":"Line Notify Message ","info":"","x":790,"y":500,"wires":[]},{"id":"a588fcd00a340802","type":"ui_text","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","order":2,"width":0,"height":0,"name":"","label":"ESP32 LED至Line訊息","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":580,"y":500,"wires":[]},{"id":"c51ffa9eeb9c79b7","type":"ui_text","z":"024ba427a7f5812e","group":"7bec0a4da1755d2d","order":1,"width":6,"height":4,"name":"","label":"RFID UID -->","format":"{{msg.payload}}","layout":"row-left","className":"","x":1290,"y":80,"wires":[]},{"id":"075b1e287e5d9347","type":"mqtt in","z":"024ba427a7f5812e","name":"RFID_UID","topic":"alex9ufo/2024/RFID/RFID_UID","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":780,"y":80,"wires":[["c51ffa9eeb9c79b7","df55f1819e8b66e7","afdbad21b78a0b02"]]},{"id":"df55f1819e8b66e7","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":920,"y":40,"wires":[["dae09bddc266dc4c"]]},{"id":"dae09bddc266dc4c","type":"function","z":"024ba427a7f5812e","name":"function 覆蓋","func":"msg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1130,"y":40,"wires":[["c51ffa9eeb9c79b7"]]},{"id":"afdbad21b78a0b02","type":"function","z":"024ba427a7f5812e","name":"function ","func":"msg.payload=\" ---ESP32 回來 UID號碼---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":920,"y":180,"wires":[["66e6317ca7b54715","82904e831754affc"]]},{"id":"66e6317ca7b54715","type":"function","z":"024ba427a7f5812e","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":1070,"y":180,"wires":[["10568f34aa90f487"]]},{"id":"10568f34aa90f487","type":"http request","z":"024ba427a7f5812e","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":1220,"y":180,"wires":[["6a38bfa68353e278"]]},{"id":"6a38bfa68353e278","type":"debug","z":"024ba427a7f5812e","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1350,"y":180,"wires":[]},{"id":"82904e831754affc","type":"ui_text","z":"024ba427a7f5812e","group":"610b6d14a9aef1a0","order":3,"width":0,"height":0,"name":"","label":"ESP32 RFID至Line訊息","format":"<font color= {{msg.color}} > {{msg.payload}} </font>","layout":"row-left","className":"","x":1090,"y":140,"wires":[]},{"id":"3b949643e95630ef","type":"mqtt in","z":"024ba427a7f5812e","name":"RFID_PICC","topic":"alex9ufo/2024/RFID/RFID_PICC","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":790,"y":280,"wires":[["13f661295c829301","389105838630bc97"]]},{"id":"389105838630bc97","type":"delay","z":"024ba427a7f5812e","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":980,"y":240,"wires":[["22f59fb343de54a2"]]},{"id":"22f59fb343de54a2","type":"function","z":"024ba427a7f5812e","name":"function 覆蓋","func":"msg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1130,"y":240,"wires":[["13f661295c829301"]]},{"id":"13f661295c829301","type":"ui_text","z":"024ba427a7f5812e","group":"7bec0a4da1755d2d","order":3,"width":6,"height":5,"name":"","label":"RFID -->","format":"{{msg.payload}}","layout":"row-left","className":"","x":1320,"y":280,"wires":[]},{"id":"c0707331bbc29acc","type":"debug","z":"024ba427a7f5812e","name":"debug 270","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":350,"y":480,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"7b4b159b9632feb1","type":"ui_group","name":"LED","tab":"dd5fce9c0b030350","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"610b6d14a9aef1a0","type":"ui_group","name":"LINE","tab":"dd5fce9c0b030350","order":2,"disp":true,"width":10,"collapse":false,"className":""},{"id":"7bec0a4da1755d2d","type":"ui_group","name":"RFID","tab":"dd5fce9c0b030350","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"603bb104.d6134","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"dd5fce9c0b030350","type":"ui_tab","name":"2024RFID產業專班","icon":"dashboard","order":103,"disabled":false,"hidden":false}]</p><p><br /></p><p><span style="color: red; font-size: large;"><b>MQTT Explorer 設定畫面</b></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL1faVp7kcyY5iRCpm0LyhuBgIP6Y2iFVyJOcnFNWVonc-bpvuKim-j6k9cp3634ikMqoPM5wiBZaI-wduPxjcKrTnM5YTvH8_InCewxuMhl71ubLqIa9iwAa7fxiE75e3FXes3PNV_HEhUUspKxgJJc2YBh5FVXsmR1SpQ1mVnn4vhhFRo73jvwKOaOw/s1066/2024-03-02%2019%2052%2050.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="429" data-original-width="1066" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjL1faVp7kcyY5iRCpm0LyhuBgIP6Y2iFVyJOcnFNWVonc-bpvuKim-j6k9cp3634ikMqoPM5wiBZaI-wduPxjcKrTnM5YTvH8_InCewxuMhl71ubLqIa9iwAa7fxiE75e3FXes3PNV_HEhUUspKxgJJc2YBh5FVXsmR1SpQ1mVnn4vhhFRo73jvwKOaOw/w640-h258/2024-03-02%2019%2052%2050.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKK1QcC7vgrLYpKyKdtGnKE9TwD5vuF4V5m1qszjUi6XAtBUGpqAkvDs1FWRVCd4PIP8qs0WEoT7vCgnPCRkGzoTN1psMVC8CE8FsxghgIIC8_bHgk02o1L00_kNbfGkyA4Zixe5v6MR3bY3mu3bQlSFMmsxeiQGV8PrHy-Cik1cmMaHTSRn8QNxld2l4/s1069/2024-03-02%2019%2054%2045.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="555" data-original-width="1069" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhKK1QcC7vgrLYpKyKdtGnKE9TwD5vuF4V5m1qszjUi6XAtBUGpqAkvDs1FWRVCd4PIP8qs0WEoT7vCgnPCRkGzoTN1psMVC8CE8FsxghgIIC8_bHgk02o1L00_kNbfGkyA4Zixe5v6MR3bY3mu3bQlSFMmsxeiQGV8PrHy-Cik1cmMaHTSRn8QNxld2l4/w640-h332/2024-03-02%2019%2054%2045.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7yBGo9815_NmXR-ulgR5M9POnDDUeLi0ISnrj6E6oV9GljB_pxO-EEAWNqD9LbsKuNKESi8hGqxzufGTV2it8xf7cN9gCOW7Jvps4gSHmRr6f1Ut_jhNq_iiNoBZrEtRFZWHrBdXGLhZCKpryihw9g0iO615Qa2_K3alRmn80ai6ErKctFBmORZJ-w4/s881/2024-03-02%2019%2056%2007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="436" data-original-width="881" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiW7yBGo9815_NmXR-ulgR5M9POnDDUeLi0ISnrj6E6oV9GljB_pxO-EEAWNqD9LbsKuNKESi8hGqxzufGTV2it8xf7cN9gCOW7Jvps4gSHmRr6f1Ut_jhNq_iiNoBZrEtRFZWHrBdXGLhZCKpryihw9g0iO615Qa2_K3alRmn80ai6ErKctFBmORZJ-w4/w640-h316/2024-03-02%2019%2056%2007.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_mUfQ6xqFhYQejESZBkDdb2q37r3GVsKccLVfxOZEV4yPBi7wKJSaJTZ95bIx9OSVZoJD24toQXZOHZv_ejobPvxbMqlvAglPgxzBYqsrBibmtS-6q5pOv7CmXo_guAOVP4E1nlCX5T-JKIvk30l3XCoWVAYyjlqU8PK3g1gJ6md43GU9niE1KnHL_H8/s1068/2024-03-02%2019%2056%2040.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="551" data-original-width="1068" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_mUfQ6xqFhYQejESZBkDdb2q37r3GVsKccLVfxOZEV4yPBi7wKJSaJTZ95bIx9OSVZoJD24toQXZOHZv_ejobPvxbMqlvAglPgxzBYqsrBibmtS-6q5pOv7CmXo_guAOVP4E1nlCX5T-JKIvk30l3XCoWVAYyjlqU8PK3g1gJ6md43GU9niE1KnHL_H8/w640-h330/2024-03-02%2019%2056%2040.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIRVDndLhx3hd6yjJE5kQDYpcsBZvnl81VgeExTyhEDVpUAC1GOuTqED5sb3JN1b-JK8fRUq1jI8rc7mkv0eVLgsYIOYEYGAgAdxoUqm0A3Aj-FySvMrE0UtIxMpd2iH4tWmWRUf_r8CX4MHZQk7Gk2IveYVgmGfXdfYteEyss0QmlmZakYAMPdRslbc/s1058/2024-03-02%2020%2000%2024.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="558" data-original-width="1058" height="338" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCIRVDndLhx3hd6yjJE5kQDYpcsBZvnl81VgeExTyhEDVpUAC1GOuTqED5sb3JN1b-JK8fRUq1jI8rc7mkv0eVLgsYIOYEYGAgAdxoUqm0A3Aj-FySvMrE0UtIxMpd2iH4tWmWRUf_r8CX4MHZQk7Gk2IveYVgmGfXdfYteEyss0QmlmZakYAMPdRslbc/w640-h338/2024-03-02%2020%2000%2024.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1KeELZ1aU_mddcBG21i9WlznhUFqkHvyqJPgirCE8LV5-gbPg41qlzTKSrbmHw1MDQxdaTuREq6Inwyusk9-msIrPmObNDCg2TxXPHe_sWJKrnafCWq2vynRffAFRQQMnfPUTT2efxPHZ_Az2DHANateX9R_EkcW4dIX_R_-JSAOADxTQ7XXxxdRJLs8/s1078/2024-03-02%2020%2002%2009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="564" data-original-width="1078" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1KeELZ1aU_mddcBG21i9WlznhUFqkHvyqJPgirCE8LV5-gbPg41qlzTKSrbmHw1MDQxdaTuREq6Inwyusk9-msIrPmObNDCg2TxXPHe_sWJKrnafCWq2vynRffAFRQQMnfPUTT2efxPHZ_Az2DHANateX9R_EkcW4dIX_R_-JSAOADxTQ7XXxxdRJLs8/w640-h334/2024-03-02%2020%2002%2009.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC3n3mAx6HlkXEmhMYk70Kr6FqJ4Im_m3EVC9fq5hXSX4xKPilAA4o3-oCboRT1LgxGZJct5fyUlTVKGUYjJWQ81rlK4wyqZcf_78W7GEieOuNgivKbHtVCZ1UnRmafjXq-mQs8Ux0ETcolUykypifNwP4o3U62URM1hVaw2hPlWXRlTFS0WhbGh9FCxw/s1066/2024-03-02%2020%2002%2051.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="1066" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC3n3mAx6HlkXEmhMYk70Kr6FqJ4Im_m3EVC9fq5hXSX4xKPilAA4o3-oCboRT1LgxGZJct5fyUlTVKGUYjJWQ81rlK4wyqZcf_78W7GEieOuNgivKbHtVCZ1UnRmafjXq-mQs8Ux0ETcolUykypifNwP4o3U62URM1hVaw2hPlWXRlTFS0WhbGh9FCxw/w640-h332/2024-03-02%2020%2002%2051.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZbAH7h1vR0drzyXXsuTQFo07-R4yHOa5gzkFN0T7IrKqgMEaz2Rtx5dtjyqertDdAHUT-FUvs5AgWn-IOyvMjLNdZGmPt4P5GMbpXA8uDcvn6Te4nh55-29Xdq9Zro8GCFW_rREGl6zrAQ6DNrkDihDgPPlp4qvVVNgrkTx7qxiWae06MJrqj7Ovybg/s1264/2024-03-02%2020%2003%2042.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="1264" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZbAH7h1vR0drzyXXsuTQFo07-R4yHOa5gzkFN0T7IrKqgMEaz2Rtx5dtjyqertDdAHUT-FUvs5AgWn-IOyvMjLNdZGmPt4P5GMbpXA8uDcvn6Te4nh55-29Xdq9Zro8GCFW_rREGl6zrAQ6DNrkDihDgPPlp4qvVVNgrkTx7qxiWae06MJrqj7Ovybg/w640-h354/2024-03-02%2020%2003%2042.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikS03Uz-OcKlYs9xlwrjRsfLeQYT3J1xPkOcGSW6AasoDGE7zHSpixel6JKq1d0Sye-AGqASj84XypgVvQnDME93NzOtDjBzFFDsA_EXNKW5dcjtaf21TcT_eNB20PFpHarz5CfBb9WRO45FQ8j7cI8blTk5cQams1NdACFHwuCOHNlZkjJCv03WL0Pwc/s1264/2024-03-02%2020%2005%2014.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="1264" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikS03Uz-OcKlYs9xlwrjRsfLeQYT3J1xPkOcGSW6AasoDGE7zHSpixel6JKq1d0Sye-AGqASj84XypgVvQnDME93NzOtDjBzFFDsA_EXNKW5dcjtaf21TcT_eNB20PFpHarz5CfBb9WRO45FQ8j7cI8blTk5cQams1NdACFHwuCOHNlZkjJCv03WL0Pwc/w640-h354/2024-03-02%2020%2005%2014.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEichudjK5EgOTSNbaDUHWLhCkOUERa2UbPRtGevm8dJR79ijnBZ44eKHyAXZRZKqKEky1WpcB90pHfFDOipH5PP4wiiuG3F7dOgd98FZgZKIwj2HWNmpkKMeieRTCfgQhyphenhyphenllKXhKCO9gS2yNZcD_QJ7S2KXWxJAavG92Rx55OJmrtMlXTnGiVJNDqJTUL8/s1264/2024-03-02%2020%2006%2056.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="838" data-original-width="1264" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEichudjK5EgOTSNbaDUHWLhCkOUERa2UbPRtGevm8dJR79ijnBZ44eKHyAXZRZKqKEky1WpcB90pHfFDOipH5PP4wiiuG3F7dOgd98FZgZKIwj2HWNmpkKMeieRTCfgQhyphenhyphenllKXhKCO9gS2yNZcD_QJ7S2KXWxJAavG92Rx55OJmrtMlXTnGiVJNDqJTUL8/w640-h424/2024-03-02%2020%2006%2056.png" width="640" /></a></div><br /><p><b style="color: red; font-size: x-large;">Line Notify 手機畫面</b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYJQ9R-HmOTs_pj5JOJow9MWdjK0Ml2o4K0dXfycwty8kA5faQpwSYmFQgr5FBvWx4wQdzT4NZKAgIZjSUr2sHgUaAGKdHvNeDaqt_HxjTg2GfHZAlDj2dkvXTzScrhIJhURjpor-QRIkewXDPqxYkAM8rtaJrGlFdlBOCidrE7rxaRoJ3aBgGtppdPoo/s2400/Screenshot_20240302_193908_LINE.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYJQ9R-HmOTs_pj5JOJow9MWdjK0Ml2o4K0dXfycwty8kA5faQpwSYmFQgr5FBvWx4wQdzT4NZKAgIZjSUr2sHgUaAGKdHvNeDaqt_HxjTg2GfHZAlDj2dkvXTzScrhIJhURjpor-QRIkewXDPqxYkAM8rtaJrGlFdlBOCidrE7rxaRoJ3aBgGtppdPoo/w288-h640/Screenshot_20240302_193908_LINE.jpg" width="288" /></a></div><br /><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-31636020499131360022024-02-17T23:56:00.000-08:002024-02-19T05:30:09.311-08:00ES32 + MFRC522 RFID + MQTT + Node-Red <p><span style="font-size: x-large;"> ES32 + MFRC522 RFID + MQTT + Node-Red </span></p><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJlcDMnHSyJm_xcDnQecbWClMdkBWcIf8g55yDUg9kW1Shmf86pJ0j3AtKp-7GRCeBrQ7iDfPRJ4XBi5DGt_R-Y8XQj82MpJ08o1X_luHo1TaNkTGxTNCJOBE8vd6ss2mlLg9G359rCELLuh5HYYnijqJt-W2JYYZLrB9hcGyeIqI-3PYgmDXrvsXqUPo/s985/2024-02-19%2021%2028%2034.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="724" data-original-width="985" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhJlcDMnHSyJm_xcDnQecbWClMdkBWcIf8g55yDUg9kW1Shmf86pJ0j3AtKp-7GRCeBrQ7iDfPRJ4XBi5DGt_R-Y8XQj82MpJ08o1X_luHo1TaNkTGxTNCJOBE8vd6ss2mlLg9G359rCELLuh5HYYnijqJt-W2JYYZLrB9hcGyeIqI-3PYgmDXrvsXqUPo/w640-h470/2024-02-19%2021%2028%2034.png" width="640" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;"></td></tr></tbody></table><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjITkI9Ke_y-e2yC6tYnpcFes-PYJFPkxbsP4nRCmpsjIaSt3h6AnmkUZbGiRM8hZcysx8E7pf8p-O36WWOzv8x4ijWp8DnFkoN_UrsEqZsKMwRjTHMVfuUYU3IqspG9BE8rEqVEPwf4SpgThx8y0CsiEGnw_n5YAhYGkaJBevFbaIibXKQ-c9mMQmEHUg/s1097/2024-02-18%2020%2021%2041.png" style="margin-left: 1em; margin-right: 1em;"><br /><img border="0" data-original-height="775" data-original-width="1097" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjITkI9Ke_y-e2yC6tYnpcFes-PYJFPkxbsP4nRCmpsjIaSt3h6AnmkUZbGiRM8hZcysx8E7pf8p-O36WWOzv8x4ijWp8DnFkoN_UrsEqZsKMwRjTHMVfuUYU3IqspG9BE8rEqVEPwf4SpgThx8y0CsiEGnw_n5YAhYGkaJBevFbaIibXKQ-c9mMQmEHUg/w640-h452/2024-02-18%2020%2021%2041.png" width="640" /></a></div><br /><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_UfFlIrjk2qYf6j1SDrxh94MiskmFBW6JO-81pbpMu5a7zt38tOq1pozExH92hDW0jMuiXZ2mNbOaNS9Rv43PkFgHB2hQyGPtGRrfI1f5vxbq8cn8nXXVeh519GpEsznxkjqS81wvjrx07sjcOK-3p4W1mzXWj5YS30JZWKnPHMWQys15BadO1q9G-EI/s1186/%E7%B9%AA%E5%9C%961.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="875" data-original-width="1186" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_UfFlIrjk2qYf6j1SDrxh94MiskmFBW6JO-81pbpMu5a7zt38tOq1pozExH92hDW0jMuiXZ2mNbOaNS9Rv43PkFgHB2hQyGPtGRrfI1f5vxbq8cn8nXXVeh519GpEsznxkjqS81wvjrx07sjcOK-3p4W1mzXWj5YS30JZWKnPHMWQys15BadO1q9G-EI/w640-h472/%E7%B9%AA%E5%9C%961.jpg" width="640" /></a></div><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmfeCAhir6jkkeadFiMNWAG6GmhI_eI6K2ok2koYJ141tvs3ENKWhKrgYSZZ6HaNuHA4BoQ7tlFsA0KlqcQ6a2e7HRU1ZogmqS3HZlud56dBxTq7uOuPWtZGZL5f_-PejFTcTRJ8S5aQeIlqAGAdZFskXjOLMvTsxziYQ9AfR35HcNHn67w0BdtSKHLSk/s673/2024-02-18%2015%2047%2037.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="673" height="628" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmfeCAhir6jkkeadFiMNWAG6GmhI_eI6K2ok2koYJ141tvs3ENKWhKrgYSZZ6HaNuHA4BoQ7tlFsA0KlqcQ6a2e7HRU1ZogmqS3HZlud56dBxTq7uOuPWtZGZL5f_-PejFTcTRJ8S5aQeIlqAGAdZFskXjOLMvTsxziYQ9AfR35HcNHn67w0BdtSKHLSk/w640-h628/2024-02-18%2015%2047%2037.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIBoaKul1bbkzgI1nkN1WBMNt_y5wiztFWkARIGTwz1bsrGYeKOhYnQT7LDKDQ-hZ0QArgR-VrjromP_u_xjXM5w50EMAwDq-HxLDUdhd3QJKBKj2S6hbZK1qHZTpPZKJjOugeAF3sts3byw_f4t_FuxewNcm39jbAmv7RPc1pULhySAiUku7gPzTjzmk/s590/2024-02-18%2015%2051%2056.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="553" data-original-width="590" height="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIBoaKul1bbkzgI1nkN1WBMNt_y5wiztFWkARIGTwz1bsrGYeKOhYnQT7LDKDQ-hZ0QArgR-VrjromP_u_xjXM5w50EMAwDq-HxLDUdhd3QJKBKj2S6hbZK1qHZTpPZKJjOugeAF3sts3byw_f4t_FuxewNcm39jbAmv7RPc1pULhySAiUku7gPzTjzmk/w640-h600/2024-02-18%2015%2051%2056.png" width="640" /></a></div><br /><p><br /></p><p><br /></p><p><span style="font-size: large;">Arduino 程式 </span></p><p><span style="font-size: large;">需要一個檔案:arduino_secrets.h 內容如下</span></p><p><span style="font-size: large;">#define SECRET_SSID ""</span></p><p><span style="font-size: large;"></span></p><p><span style="font-size: large;">#define SECRET_PASS ""</span></p><p><span style="font-size: large;"><br /></span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #7f8c8d;">//GPIO 2 D1 Build in LED</span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">13</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><div><span style="color: #7f8c8d;">// WiFi SSID password , SSID 和密碼進行Wi-Fi 設定 </span></div><div><span style="color: #7f8c8d;">//const char ssid[] = "alex9ufo"; // Enter your Wi-Fi name</span></div><div><span style="color: #7f8c8d;">//const char pass[] = "alex9981"; // Enter Wi-Fi password</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *SubTopic1 = <span style="color: #7fcbcd;">"alex9ufo/2024/LED_control"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *PubTopic2 = <span style="color: #7fcbcd;">"alex9ufo/2024/LED_status"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *PubTopic3 = <span style="color: #7fcbcd;">"alex9ufo/2024/RFID_UID"</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/esp32/Starting"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//布林代數 LED狀態 是否連上網路ESP32 ready ?</span></div><div><span style="color: #0ca1a6;">bool</span> ledState = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> atwork = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div>String LEDjson = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">int</span> Count= <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String message=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> message += (<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(message);</div><div> <span style="color: #f39c12;">message</span>.<span style="color: #f39c12;">trim</span>();</div><div> <span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (Topic==<span style="color: #7fcbcd;">"alex9ufo/2024/LED_control"</span>) {</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"on"</span>) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn on the LED</span></div><div><span style="color: #7f8c8d;"> //ledState = true; //ledState = ture HIGH</span></div><div><span style="color: #7f8c8d;"> //設定 各個 旗號</span></div><div> LEDjson =<span style="color: #7fcbcd;">"ON"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"off"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div><span style="color: #7f8c8d;"> //ledState = false; //ledState = false LOW</span></div><div> LEDjson =<span style="color: #7fcbcd;">"OFF"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"-----------------------"</span>);</div><div> } </div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//判斷 旗號Flash , Timer 是否為真</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">LED_Message</span>() {</div><div><span style="color: #7f8c8d;"> ////判斷 旗號 Send 是否為真 回傳MQTT訊息到MQTT Broker </span></div><div> <span style="color: #c586c0;">if</span> (Send) {</div><div><span style="color: #7f8c8d;"> // Convert JSON string to character array</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Publish message: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><div> </div><div><span style="color: #7f8c8d;"> // Publish JSON character array to MQTT topic</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(PubTopic2, <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);<span style="color: #7f8c8d;"> //LED Status</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(LEDjson);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //處理過後 旗號 Send為假</span></div><div> }</div><br /><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED initially</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"ESP32 Start working....!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(SubTopic1);</div><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(SubTopic1, subscribeQos);</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div><span style="color: #7f8c8d;"> //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><div> </div><div> <span style="color: #f39c12;">LED_Message</span>();</div><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> //json = json +(" Card UID: ");</span></div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div><span style="color: #7f8c8d;"> //json = json +(" , PICC type: ");</span></div><div><span style="color: #7f8c8d;"> //json = json + Type;</span></div><div><span style="color: #7f8c8d;"> //json.trim();</span></div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(PubTopic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));</span></div><div> </div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div><p><span style="font-size: large;">Node-Red 程式</span></p><p>[{"id":"c59686b37b309e43","type":"ui_switch","z":"86b3e6eeb5484ac5","name":"","label":"LED Control switch","tooltip":"","group":"d93d93998de35374","order":14,"width":5,"height":2,"passthru":true,"decouple":"false","topic":"topic","topicType":"msg","style":"","onvalue":"true","onvalueType":"bool","onicon":"","oncolor":"","offvalue":"false","offvalueType":"bool","officon":"","offcolor":"","animate":false,"className":"","x":510,"y":340,"wires":[["cb1ffbab67b58d64","e7ca113edc03d511"]]},{"id":"95af94893f2d6e53","type":"ui_led","z":"86b3e6eeb5484ac5","order":3,"group":"d93d93998de35374","width":6,"height":3,"label":"ESP32 LED Status","labelPlacement":"right","labelAlignment":"center","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"","x":990,"y":240,"wires":[]},{"id":"7a079be5f155366f","type":"ui_text","z":"86b3e6eeb5484ac5","group":"d93d93998de35374","order":1,"width":11,"height":2,"name":"","label":"RFID UID -->","format":"{{msg.payload}}","layout":"row-left","className":"","x":1010,"y":160,"wires":[]},{"id":"67c41933549d0e8b","type":"mqtt out","z":"86b3e6eeb5484ac5","name":"LED_control","topic":"alex9ufo/2024/LED_control","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"603bb104.d6134","x":970,"y":400,"wires":[]},{"id":"a55d82342a298cc4","type":"mqtt in","z":"86b3e6eeb5484ac5","name":"LED_status","topic":"alex9ufo/2024/LED_status","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":470,"y":240,"wires":[["7173ea47b004a475","72ee320a21953114"]]},{"id":"06443b497f771269","type":"mqtt in","z":"86b3e6eeb5484ac5","name":"RFID_UID","topic":"alex9ufo/2024/RFID_UID","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":460,"y":160,"wires":[["7a079be5f155366f","64e956d82a770c6b"]]},{"id":"7173ea47b004a475","type":"function","z":"86b3e6eeb5484ac5","name":"function 93","func":"msg.payload = (msg.payload === \"ON\")? true:false;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":240,"wires":[["95af94893f2d6e53","3f9ac8d95ed0645e"]]},{"id":"cb1ffbab67b58d64","type":"function","z":"86b3e6eeb5484ac5","name":"function 94","func":"var a=msg.payload;\nif (a==true)\n msg.payload=\"on\";\nelse\n msg.payload=\"off\"; \n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":730,"y":400,"wires":[["67c41933549d0e8b","9b5d7e426f8692ce","17ca9b9e.d2a564"]]},{"id":"e7ca113edc03d511","type":"debug","z":"86b3e6eeb5484ac5","name":"debug 266","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":340,"wires":[]},{"id":"72ee320a21953114","type":"debug","z":"86b3e6eeb5484ac5","name":"debug 267","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":730,"y":200,"wires":[]},{"id":"9b5d7e426f8692ce","type":"debug","z":"86b3e6eeb5484ac5","name":"debug 268","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":360,"wires":[]},{"id":"e535f7a246f73c7a","type":"ui_button","z":"86b3e6eeb5484ac5","name":"","group":"d93d93998de35374","order":15,"width":3,"height":1,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"true","payloadType":"bool","topic":"topic","topicType":"msg","x":550,"y":400,"wires":[["cb1ffbab67b58d64"]]},{"id":"ba5236a0cb5158a5","type":"ui_button","z":"86b3e6eeb5484ac5","name":"","group":"d93d93998de35374","order":16,"width":3,"height":1,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"false","payloadType":"bool","topic":"topic","topicType":"msg","x":550,"y":460,"wires":[["cb1ffbab67b58d64"]]},{"id":"3f9ac8d95ed0645e","type":"debug","z":"86b3e6eeb5484ac5","name":"debug 269","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":300,"wires":[]},{"id":"64e956d82a770c6b","type":"delay","z":"86b3e6eeb5484ac5","name":"","pauseType":"delay","timeout":"3","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":660,"y":120,"wires":[["f4f23a169be7144a"]]},{"id":"f4f23a169be7144a","type":"function","z":"86b3e6eeb5484ac5","name":"function 95","func":"msg.payload=\"\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":830,"y":120,"wires":[["7a079be5f155366f"]]},{"id":"36b481c29223d734","type":"group","z":"86b3e6eeb5484ac5","name":"","style":{"fill":"#ffff00","label":true},"nodes":["17ca9b9e.d2a564","872b1d71.45076","f81160301e1b0e63","c6ac5bac.e91e38","9d39dfc1.aff32"],"x":454,"y":519,"w":592,"h":242},{"id":"17ca9b9e.d2a564","type":"function","z":"86b3e6eeb5484ac5","g":"36b481c29223d734","name":"Test","func":"msg.color = (msg.payload === \"on\")?\"lime\":\"red\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":770,"y":640,"wires":[["872b1d71.45076","f81160301e1b0e63"]]},{"id":"872b1d71.45076","type":"ui_text","z":"86b3e6eeb5484ac5","g":"36b481c29223d734","group":"d93d93998de35374","order":9,"width":3,"height":2,"name":"","label":"LED","format":"<font color={{msg.color}} ><i class=\"fa fa-circle\" style=\"font-size:48px;\"></i></font>","layout":"row-left","className":"","x":970,"y":560,"wires":[]},{"id":"f81160301e1b0e63","type":"ui_template","z":"86b3e6eeb5484ac5","g":"36b481c29223d734","group":"d93d93998de35374","name":"","order":10,"width":3,"height":3,"format":"<svg width=\"120\" height=\"200\">\n <circle id=\"circle1\" cx=\"50\" cy=\"50\" r=\"40\" stroke={{msg.color}} fill=\"transparent\" stroke-width=\"20\"/>\n</svg>","storeOutMessages":true,"fwdInMessages":true,"resendOnRefresh":true,"templateScope":"local","className":"","x":960,"y":700,"wires":[[]]},{"id":"c6ac5bac.e91e38","type":"inject","z":"86b3e6eeb5484ac5","g":"36b481c29223d734","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"on","payloadType":"str","x":550,"y":560,"wires":[["17ca9b9e.d2a564","7173ea47b004a475"]]},{"id":"9d39dfc1.aff32","type":"inject","z":"86b3e6eeb5484ac5","g":"36b481c29223d734","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"off","payloadType":"str","x":550,"y":720,"wires":[["17ca9b9e.d2a564","7173ea47b004a475"]]},{"id":"d93d93998de35374","type":"ui_group","name":"Group 1 for MQTT","tab":"14f030d69035e0d1","order":1,"disp":true,"width":11,"collapse":false,"className":""},{"id":"603bb104.d6134","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"14f030d69035e0d1","type":"ui_tab","name":"Tab for RFID Control","icon":"dashboard","order":101,"disabled":false,"hidden":false}]</p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-874472238070114672024-02-14T05:32:00.000-08:002024-02-14T05:32:44.342-08:00ESP32 教學系列(二):使用 Arduino IDE 2.x 開發<p> </p><h1 class="entry-title" style="background-color: white; box-sizing: border-box; color: #303133; font-family: "Noto Sans JP" !important; font-size: 3.13rem; font-weight: 400; line-height: 1.5; margin-bottom: 0.3125em; margin-top: 0px; overflow-wrap: break-word; text-rendering: optimizelegibility;">ESP32 教學系列(二):使用 Arduino IDE 2.x 開發</h1><div><span style="font-size: large;">請參考 </span></div><div><span style="font-size: large;"><br /></span></div><div><a href="https://www.circuspi.com/index.php/2023/08/24/esp32-arduino-ide-2-x/"><span style="font-size: large;">https://www.circuspi.com/index.php/2023/08/24/esp32-arduino-ide-2-x/</span></a></div><div><span style="font-size: large;"><br /></span></div><div><span style="font-size: large;">如何使用Ardino IDE 編譯 上傳 暨 注意事項</span></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-78624640079082107222024-02-10T06:04:00.000-08:002024-02-10T06:10:04.764-08:00寫入與讀取Mifare卡片資料的程式碼<p><span style="font-size: x-large;"> <span face="-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif" style="background-color: white; color: #16181a;">寫入與讀取Mifare卡片資料的程式碼</span></span></p><p><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"><span style="color: #7f8c8d; font-family: Consolas, Courier New, monospace;">https://swf.com.tw/?p=941</span></span></p><p style="text-align: center;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"><span style="color: #7f8c8d; font-family: Consolas, Courier New, monospace;"><span style="background-color: white; color: #16181a; font-family: "Times New Roman"; font-size: xx-large; white-space: normal;"><br /></span></span></span></p><p style="text-align: center;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"><span style="color: #7f8c8d; font-family: Consolas, Courier New, monospace;"><span style="background-color: white; color: #16181a; font-family: "Times New Roman"; font-size: xx-large; white-space: normal;">寫入與讀取</span></span></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUru1YDqyDrd2IOVxwtwyqfZjMzEuNv1kxMKKsoPnlrKZ62D-8yCKHIrjO_jEVJw9ktIs4AIW3uebWAlCLbn_U9VUblYYnrpfHEJsCj3hgFFohAWbMzXtz3agZfCahRgCv1vCGSBAXiQii9gAUcR8bT-g0CM9FjZdukCcjGgKbnbL5mN4rXv5np1zgh3E/s538/2024-02-10%2022%2001%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="472" data-original-width="538" height="562" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUru1YDqyDrd2IOVxwtwyqfZjMzEuNv1kxMKKsoPnlrKZ62D-8yCKHIrjO_jEVJw9ktIs4AIW3uebWAlCLbn_U9VUblYYnrpfHEJsCj3hgFFohAWbMzXtz3agZfCahRgCv1vCGSBAXiQii9gAUcR8bT-g0CM9FjZdukCcjGgKbnbL5mN4rXv5np1zgh3E/w640-h562/2024-02-10%2022%2001%2031.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; color: #16181a; font-size: xx-large; text-align: left;"><br /></span></div><div class="separator" style="clear: both; text-align: center;"><span style="background-color: white; color: #16181a; font-size: xx-large; text-align: left;">讀取</span></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL0TVj2b980rFg7tc5P6aL72D2Q5gJCVkpMKbnf656e0ouWT2XvkuIOuC-fkl5kSJMVhwL0bzgQztLvsRtC5mZ0xawuQUh4ZAGLKneEKhI-7F86A4c1pTuRLi8XWJvimHDJFKZqIj7gS8Hn3NGOFhtbmTu47Q8uaeGnu6dC9KGY75vlXMWDguu02u8d-o/s730/2024-02-10%2022%2005%2054.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="542" data-original-width="730" height="476" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhL0TVj2b980rFg7tc5P6aL72D2Q5gJCVkpMKbnf656e0ouWT2XvkuIOuC-fkl5kSJMVhwL0bzgQztLvsRtC5mZ0xawuQUh4ZAGLKneEKhI-7F86A4c1pTuRLi8XWJvimHDJFKZqIj7gS8Hn3NGOFhtbmTu47Q8uaeGnu6dC9KGY75vlXMWDguu02u8d-o/w640-h476/2024-02-10%2022%2005%2054.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: white; color: #16181a; font-size: xx-large;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><span style="background-color: white; color: #16181a; font-size: xx-large;">讀取</span></div><div class="separator" style="clear: both; text-align: left;"><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">/*</span></div><div><span style="color: #7f8c8d;">源自於</span></div><div><span style="color: #7f8c8d;">https://swf.com.tw/?p=941</span></div><div><span style="color: #7f8c8d;">使用到的MFRC522程式物件的方法和屬性:</span></div><div><span style="color: #7f8c8d;">MFRC522物件.PCD_Authenticate():驗證金鑰,相當於比對輸入密碼和卡片裡的密碼,唯通過驗證才能存取區段資料。</span></div><div><span style="color: #7f8c8d;">MFRC522物件.GetStatusCodeName():取得狀態碼的名稱</span></div><div><span style="color: #7f8c8d;">MFRC522物件.MIFARE_Read():讀取指定區塊的內容</span></div><div><span style="color: #7f8c8d;">MFRC522物件.MIFARE_Write():在指定區塊寫入資料</span></div><div><span style="color: #7f8c8d;">MFRC522物件.PICC_DumpMifareClassicSectorToSerial():在序列埠監控視窗顯示指定的區段內容</span></div><div><span style="color: #7f8c8d;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><br /><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><br /><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><br /><div>byte sector = <span style="color: #7fcbcd;">15</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區段」,可能值:0~15</span></div><div>byte block = <span style="color: #7fcbcd;">1</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區塊」,可能值:0~3</span></div><div>byte <span style="color: #f39c12;">blockData</span>[<span style="color: #7fcbcd;">16</span>];</div><div><span style="color: #7f8c8d;">//byte blockData = "KeepHacking"; // 最多可存入16個字元</span></div><div><span style="color: #7f8c8d;">// 若要清除區塊內容,請寫入16個 0</span></div><div><span style="color: #7f8c8d;">//byte blockData[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</span></div><br /><div><span style="color: #7f8c8d;">// 暫存讀取區塊內容的陣列,MIFARE_Read()方法要求至少要18位元組空間,來存放16位元組。</span></div><div>byte <span style="color: #f39c12;">buffer</span>[<span style="color: #7fcbcd;">18</span>];</div><div><span style="color: #0ca1a6;">bool</span> WrOK=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> RdOK=<span style="color: #7fcbcd;">false</span>;</div><div>byte WrCNT=<span style="color: #7fcbcd;">0</span>;</div><br /><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===================================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">writeBlock</span>(byte _sector, byte _block, byte _blockData[]) {</div><div> <span style="color: #c586c0;">if</span> (_sector < <span style="color: #7fcbcd;">0</span> || _sector > <span style="color: #7fcbcd;">15</span> || _block < <span style="color: #7fcbcd;">0</span> || _block > <span style="color: #7fcbcd;">3</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「區段或區塊碼錯誤」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Wrong sector or block number."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (_sector == <span style="color: #7fcbcd;">0</span> && _block == <span style="color: #7fcbcd;">0</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「第一個區塊只能讀取」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"First block is read-only."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte blockNum = _sector * <span style="color: #7fcbcd;">4</span> + _block;<span style="color: #7f8c8d;"> // 計算區塊的實際編號(0~63)</span></div><div> byte trailerBlock = _sector * <span style="color: #7fcbcd;">4</span> + <span style="color: #7fcbcd;">3</span>;<span style="color: #7f8c8d;"> // 控制區塊編號</span></div><br /><div><span style="color: #7f8c8d;"> // 驗證金鑰</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Authenticate</span>(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div><span style="color: #7f8c8d;"> // 若未通過驗證…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"PCD_Authenticate() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 在指定區塊寫入16位元組資料</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">MIFARE_Write</span>(blockNum, _blockData, <span style="color: #7fcbcd;">16</span>);</div><div><span style="color: #7f8c8d;"> // 若寫入不成功…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"MIFARE_Write() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 顯示「寫入成功!」</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Data was written."</span>));</div><div> WrOK=<span style="color: #7fcbcd;">true</span>;</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">readBlock</span>(byte _sector, byte _block, byte _blockData[]) {</div><div> <span style="color: #c586c0;">if</span> (_sector < <span style="color: #7fcbcd;">0</span> || _sector > <span style="color: #7fcbcd;">15</span> || _block < <span style="color: #7fcbcd;">0</span> || _block > <span style="color: #7fcbcd;">3</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「區段或區塊碼錯誤」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Wrong sector or block number."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte blockNum = _sector * <span style="color: #7fcbcd;">4</span> + _block;<span style="color: #7f8c8d;"> // 計算區塊的實際編號(0~63)</span></div><div> byte trailerBlock = _sector * <span style="color: #7fcbcd;">4</span> + <span style="color: #7fcbcd;">3</span>;<span style="color: #7f8c8d;"> // 控制區塊編號</span></div><br /><div><span style="color: #7f8c8d;"> // 驗證金鑰</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Authenticate</span>(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div><span style="color: #7f8c8d;"> // 若未通過驗證…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"PCD_Authenticate() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte buffersize = <span style="color: #7fcbcd;">18</span>;</div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">MIFARE_Read</span>(blockNum, _blockData, &buffersize);</div><br /><div><span style="color: #7f8c8d;"> // 若讀取不成功…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"MIFARE_read() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 顯示「讀取成功!」</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Data was read."</span>));</div><div> RdOK=<span style="color: #7fcbcd;">true</span>;</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // 初始化SPI介面</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // 初始化MFRC522卡片</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><br /><div><span style="color: #7f8c8d;"> // 準備金鑰(用於key A和key B),出廠預設為6組 0xFF。</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < <span style="color: #7fcbcd;">6</span>; i++) {</div><div> <span style="color: #f39c12;">key</span>.<span style="color: #f39c12;">keyByte</span>[i] = 0x<span style="color: #7fcbcd;">FF</span>;</div><div> }</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div><span style="color: #7f8c8d;"> // 查看是否感應到卡片</span></div><div> <span style="color: #c586c0;">if</span> ( ! <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>()) {</div><div> <span style="color: #c586c0;">return</span>;<span style="color: #7f8c8d;"> // 退回loop迴圈的開頭</span></div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 選取一張卡片</span></div><div> <span style="color: #c586c0;">if</span> ( ! <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {<span style="color: #7f8c8d;"> // 若傳回1,代表已讀取到卡片的ID</span></div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><div> </div><div><span style="color: #7f8c8d;"> </span></div><div><span style="color: #7f8c8d;"> //===================================================================</span></div><div> RdOK=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">readBlock</span>(sector, block, buffer);<span style="color: #7f8c8d;"> // 區段編號、區塊編號、存放讀取資料的陣列</span></div><div> <span style="color: #c586c0;">if</span> (RdOK==<span style="color: #7fcbcd;">true</span>) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Read OK"</span>); </div><div> } </div><div> <span style="color: #c586c0;">else</span></div><div> {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Read failure"</span>); </div><div> } </div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Read block: "</span>));<span style="color: #7f8c8d;"> // 顯示儲存讀取資料的陣列元素值</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span> ; i < <span style="color: #7fcbcd;">16</span> ; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">write</span> (<span style="color: #f39c12;">buffer</span>[i]);</div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> WrCNT+=<span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #c586c0;">if</span> (WrCNT==<span style="color: #7fcbcd;">100</span>)</div><div> WrCNT=<span style="color: #7fcbcd;">0</span>;</div><div>}</div></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><span style="background-color: #1f272a; color: #7f8c8d; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="background-color: white; color: #16181a; font-family: "Times New Roman"; font-size: xx-large; text-align: center; white-space: normal;">寫入與讀取</span><br /></span><p></p><p><span style="background-color: #1f272a; color: #7f8c8d; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">/*</span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">源自於</span></div><div><span style="color: #7f8c8d;">https://swf.com.tw/?p=941</span></div><div><span style="color: #7f8c8d;">使用到的MFRC522程式物件的方法和屬性:</span></div><div><span style="color: #7f8c8d;">MFRC522物件.PCD_Authenticate():驗證金鑰,相當於比對輸入密碼和卡片裡的密碼,唯通過驗證才能存取區段資料。</span></div><div><span style="color: #7f8c8d;">MFRC522物件.GetStatusCodeName():取得狀態碼的名稱</span></div><div><span style="color: #7f8c8d;">MFRC522物件.MIFARE_Read():讀取指定區塊的內容</span></div><div><span style="color: #7f8c8d;">MFRC522物件.MIFARE_Write():在指定區塊寫入資料</span></div><div><span style="color: #7f8c8d;">MFRC522物件.PICC_DumpMifareClassicSectorToSerial():在序列埠監控視窗顯示指定的區段內容</span></div><div><span style="color: #7f8c8d;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><br /><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><br /><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><br /><div>byte sector = <span style="color: #7fcbcd;">15</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區段」,可能值:0~15</span></div><div>byte block = <span style="color: #7fcbcd;">1</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區塊」,可能值:0~3</span></div><div>byte <span style="color: #f39c12;">blockData</span>[<span style="color: #7fcbcd;">16</span>];</div><div><span style="color: #7f8c8d;">//byte blockData = "KeepHacking"; // 最多可存入16個字元</span></div><div><span style="color: #7f8c8d;">// 若要清除區塊內容,請寫入16個 0</span></div><div><span style="color: #7f8c8d;">//byte blockData[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</span></div><br /><div><span style="color: #7f8c8d;">// 暫存讀取區塊內容的陣列,MIFARE_Read()方法要求至少要18位元組空間,來存放16位元組。</span></div><div>byte <span style="color: #f39c12;">buffer</span>[<span style="color: #7fcbcd;">18</span>];</div><div><span style="color: #0ca1a6;">bool</span> WrOK=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> RdOK=<span style="color: #7fcbcd;">false</span>;</div><div>byte WrCNT=<span style="color: #7fcbcd;">0</span>;</div><br /><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===================================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">writeBlock</span>(byte _sector, byte _block, byte _blockData[]) {</div><div> <span style="color: #c586c0;">if</span> (_sector < <span style="color: #7fcbcd;">0</span> || _sector > <span style="color: #7fcbcd;">15</span> || _block < <span style="color: #7fcbcd;">0</span> || _block > <span style="color: #7fcbcd;">3</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「區段或區塊碼錯誤」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Wrong sector or block number."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (_sector == <span style="color: #7fcbcd;">0</span> && _block == <span style="color: #7fcbcd;">0</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「第一個區塊只能讀取」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"First block is read-only."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte blockNum = _sector * <span style="color: #7fcbcd;">4</span> + _block;<span style="color: #7f8c8d;"> // 計算區塊的實際編號(0~63)</span></div><div> byte trailerBlock = _sector * <span style="color: #7fcbcd;">4</span> + <span style="color: #7fcbcd;">3</span>;<span style="color: #7f8c8d;"> // 控制區塊編號</span></div><br /><div><span style="color: #7f8c8d;"> // 驗證金鑰</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Authenticate</span>(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div><span style="color: #7f8c8d;"> // 若未通過驗證…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"PCD_Authenticate() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 在指定區塊寫入16位元組資料</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">MIFARE_Write</span>(blockNum, _blockData, <span style="color: #7fcbcd;">16</span>);</div><div><span style="color: #7f8c8d;"> // 若寫入不成功…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"MIFARE_Write() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 顯示「寫入成功!」</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Data was written."</span>));</div><div> WrOK=<span style="color: #7fcbcd;">true</span>;</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">readBlock</span>(byte _sector, byte _block, byte _blockData[]) {</div><div> <span style="color: #c586c0;">if</span> (_sector < <span style="color: #7fcbcd;">0</span> || _sector > <span style="color: #7fcbcd;">15</span> || _block < <span style="color: #7fcbcd;">0</span> || _block > <span style="color: #7fcbcd;">3</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「區段或區塊碼錯誤」,然後結束函式。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Wrong sector or block number."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte blockNum = _sector * <span style="color: #7fcbcd;">4</span> + _block;<span style="color: #7f8c8d;"> // 計算區塊的實際編號(0~63)</span></div><div> byte trailerBlock = _sector * <span style="color: #7fcbcd;">4</span> + <span style="color: #7fcbcd;">3</span>;<span style="color: #7f8c8d;"> // 控制區塊編號</span></div><br /><div><span style="color: #7f8c8d;"> // 驗證金鑰</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Authenticate</span>(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div><span style="color: #7f8c8d;"> // 若未通過驗證…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"PCD_Authenticate() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte buffersize = <span style="color: #7fcbcd;">18</span>;</div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">MIFARE_Read</span>(blockNum, _blockData, &buffersize);</div><br /><div><span style="color: #7f8c8d;"> // 若讀取不成功…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"MIFARE_read() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 顯示「讀取成功!」</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Data was read."</span>));</div><div> RdOK=<span style="color: #7fcbcd;">true</span>;</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // 初始化SPI介面</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // 初始化MFRC522卡片</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><br /><div><span style="color: #7f8c8d;"> // 準備金鑰(用於key A和key B),出廠預設為6組 0xFF。</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < <span style="color: #7fcbcd;">6</span>; i++) {</div><div> <span style="color: #f39c12;">key</span>.<span style="color: #f39c12;">keyByte</span>[i] = 0x<span style="color: #7fcbcd;">FF</span>;</div><div> }</div><br /><div>}</div><br /><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div><span style="color: #7f8c8d;"> // 查看是否感應到卡片</span></div><div> <span style="color: #c586c0;">if</span> ( ! <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>()) {</div><div> <span style="color: #c586c0;">return</span>;<span style="color: #7f8c8d;"> // 退回loop迴圈的開頭</span></div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 選取一張卡片</span></div><div> <span style="color: #c586c0;">if</span> ( ! <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {<span style="color: #7f8c8d;"> // 若傳回1,代表已讀取到卡片的ID</span></div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><div> </div><div> WrOK=<span style="color: #7fcbcd;">false</span>;</div><br /><div> String WriteSTR=<span style="color: #7fcbcd;">"alex9ufo RFID"</span>;<span style="color: #7f8c8d;"> // 最多可存入16個字元</span></div><div> String stringOne = <span style="color: #f39c12;">String</span>(WrCNT, DEC);</div><div> WriteSTR+=stringOne;</div><div> <span style="color: #f39c12;">WriteSTR</span>.<span style="color: #f39c12;">getBytes</span>(blockData, <span style="color: #7fcbcd;">16</span>);</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span> ; i < <span style="color: #7fcbcd;">16</span> ; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">write</span> (<span style="color: #f39c12;">blockData</span>[i]);</div><div> }</div><div> <span style="color: #f39c12;">writeBlock</span>(sector, block, blockData);<span style="color: #7f8c8d;"> // 區段編號、區塊編號、包含寫入資料的陣列</span></div><div> </div><div> <span style="color: #c586c0;">if</span> (WrOK==<span style="color: #7fcbcd;">true</span>) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Write OK"</span>); </div><div> } <span style="color: #c586c0;">else</span></div><div> {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Write failure"</span>); </div><div> } </div><br /><div><span style="color: #7f8c8d;"> //===================================================================</span></div><div> RdOK=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">readBlock</span>(sector, block, buffer);<span style="color: #7f8c8d;"> // 區段編號、區塊編號、存放讀取資料的陣列</span></div><div> <span style="color: #c586c0;">if</span> (RdOK==<span style="color: #7fcbcd;">true</span>) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Read OK"</span>); </div><div> } </div><div> <span style="color: #c586c0;">else</span></div><div> {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Read failure"</span>); </div><div> } </div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Read block: "</span>));<span style="color: #7f8c8d;"> // 顯示儲存讀取資料的陣列元素值</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span> ; i < <span style="color: #7fcbcd;">16</span> ; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">write</span> (<span style="color: #f39c12;">buffer</span>[i]);</div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> WrCNT+=<span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #c586c0;">if</span> (WrCNT==<span style="color: #7fcbcd;">100</span>)</div><div> WrCNT=<span style="color: #7fcbcd;">0</span>;</div><div>}</div></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-82173029479179577422024-02-05T04:05:00.000-08:002024-02-05T04:11:16.885-08:00opendata 的取得<p><span style="font-size: x-large;">opendata 的取得</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDuFkVvKrJPM1eU4aVbVULuyO1MOl4rxeFkw1cd0_sh4MN1x6UlL4GWNIabF0dIEMroe4lpc25rePu-S_ZnfHtViCCa1eLUrxmypZ0H1G7PHJQGIdqu4fZEUkVb3OMI6rJzvIMxDoyTllwc2TUxRXET70i2s80hV7ifhn5sLFAu1UoQM1n1ZCSR_Xz0TI/s1002/2024-02-05%2019%2029%2050.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="967" data-original-width="1002" height="618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDuFkVvKrJPM1eU4aVbVULuyO1MOl4rxeFkw1cd0_sh4MN1x6UlL4GWNIabF0dIEMroe4lpc25rePu-S_ZnfHtViCCa1eLUrxmypZ0H1G7PHJQGIdqu4fZEUkVb3OMI6rJzvIMxDoyTllwc2TUxRXET70i2s80hV7ifhn5sLFAu1UoQM1n1ZCSR_Xz0TI/w640-h618/2024-02-05%2019%2029%2050.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvGvZ-mAVppziYIkIXKua-Io1DWg5EwCCAhyphenhyphenkErqs5uxM-hnezvYbjkSnXpU7Lx2vVImXUKOjrTM766emqbYXHr63VHAShquM_FMV2Yp2fdcESk2p1iF4f26DZvtwFlnXceY_Cd3QjG-CmAroGHTebxuYcLyBXMcs-QWD6bjgCarASYtyj_JIFfJskZMc/s1455/2024-02-05%2019%2030%2052.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="468" data-original-width="1455" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvGvZ-mAVppziYIkIXKua-Io1DWg5EwCCAhyphenhyphenkErqs5uxM-hnezvYbjkSnXpU7Lx2vVImXUKOjrTM766emqbYXHr63VHAShquM_FMV2Yp2fdcESk2p1iF4f26DZvtwFlnXceY_Cd3QjG-CmAroGHTebxuYcLyBXMcs-QWD6bjgCarASYtyj_JIFfJskZMc/w640-h206/2024-02-05%2019%2030%2052.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSXA0ygK2gLVBOVrtp5Z2vQBqBJq-iLLYe1ZsTDmmRcIqDOWA2wFQAf926b0edYI2-a7iGBL9XkTiRacyuPQa5ZQf09m-Tg4AyH-wfIAKLdXvVsoApzOGYrjaovClUObR-VgjUJxBjfFiLn2QiS9KC4g-DsnapRSx_ET_GUc1mMhh-iIScVafybtMvzRI/s1445/2024-02-05%2019%2031%2036.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="815" data-original-width="1445" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSXA0ygK2gLVBOVrtp5Z2vQBqBJq-iLLYe1ZsTDmmRcIqDOWA2wFQAf926b0edYI2-a7iGBL9XkTiRacyuPQa5ZQf09m-Tg4AyH-wfIAKLdXvVsoApzOGYrjaovClUObR-VgjUJxBjfFiLn2QiS9KC4g-DsnapRSx_ET_GUc1mMhh-iIScVafybtMvzRI/w640-h360/2024-02-05%2019%2031%2036.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1VDzGYHgCQYfGR09pYBob3AVvcGDdw0Pfs4USrspvCJywSXlIXliULVTLtTmWQmpTbvT90Cji0Oy5JK-1ML6ExwoMVNrSgBlBmpXe4NE5YSLQaQQOqLJ6LZDey7TB8baoo4W96tvoerA8eNpPAFUw2F6boYQA6ZSJfl3TCI-aX0kjiwhas692XyqjF3c/s1471/2024-02-05%2019%2039%2007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="673" data-original-width="1471" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1VDzGYHgCQYfGR09pYBob3AVvcGDdw0Pfs4USrspvCJywSXlIXliULVTLtTmWQmpTbvT90Cji0Oy5JK-1ML6ExwoMVNrSgBlBmpXe4NE5YSLQaQQOqLJ6LZDey7TB8baoo4W96tvoerA8eNpPAFUw2F6boYQA6ZSJfl3TCI-aX0kjiwhas692XyqjF3c/w640-h292/2024-02-05%2019%2039%2007.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK7Iqya77Iw2W1h44Am4xGt5MaopCkySd-QnOZL9kjt9aYGE_mi6mqXLwIN5uMhotmtun1rAI7IzyOGSWmOOqGHd4DASKQSVyCu2iuZW5bEg9j5V1Q_xSzd14VFoUfYcOqjWSOV5rm9Jt563wgtb4V1FllMBgXGW2SRbrkljMVYI9-n1ZVxhK0r478CxU/s901/2024-02-05%2019%2040%2021.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="842" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjK7Iqya77Iw2W1h44Am4xGt5MaopCkySd-QnOZL9kjt9aYGE_mi6mqXLwIN5uMhotmtun1rAI7IzyOGSWmOOqGHd4DASKQSVyCu2iuZW5bEg9j5V1Q_xSzd14VFoUfYcOqjWSOV5rm9Jt563wgtb4V1FllMBgXGW2SRbrkljMVYI9-n1ZVxhK0r478CxU/w598-h640/2024-02-05%2019%2040%2021.png" width="598" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqprnnnV6IcxpboRe_OHaQwDPv_ms49-QEknrSkn9MFa82rMGWboel8x0LgGzV_Vn14d_hhkL7AuVKTvhWPudog8Z8wO7sL830kWi9-58LdyMBGzWa_UDKwrM5ALr5hGsCwJuCPciBi_xDaV3230pAJdWJQqpMpTReqbGYASjWyia7f9H18yzHl1AvFPc/s1033/2024-02-05%2020%2003%2021.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="491" data-original-width="1033" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqprnnnV6IcxpboRe_OHaQwDPv_ms49-QEknrSkn9MFa82rMGWboel8x0LgGzV_Vn14d_hhkL7AuVKTvhWPudog8Z8wO7sL830kWi9-58LdyMBGzWa_UDKwrM5ALr5hGsCwJuCPciBi_xDaV3230pAJdWJQqpMpTReqbGYASjWyia7f9H18yzHl1AvFPc/w640-h304/2024-02-05%2020%2003%2021.png" width="640" /></a></div><br /><span style="font-size: x-large;"><br /></span><p></p><p><span style="font-size: large;">https://data.moenv.gov.tw</span></p><p><span style="font-size: large;">https://data.moenv.gov.tw/api/v2/aqf_p_01?api_key=aa1b57c2bf-24c2-4c557-980f-a120775c2caec</span></p><p><br /></p><p> "records": [</p><p> {</p><p> "sitename": "塔塔加",</p><p> "uvi": "0",</p><p> "unit": "環境部",</p><p> "county": "嘉義縣",</p><p> "wgs84_lon": "120,51,35",</p><p> "wgs84_lat": "23,28,19",</p><p> "datacreationdate": "2024-02-05 19:00"</p><p> },</p><p> {</p><p> "sitename": "阿里山",</p><p> "uvi": "0",</p><p> "unit": "環境部",</p><p> "county": "嘉義縣",</p><p> "wgs84_lon": "120,48,8",</p><p> "wgs84_lat": "23,30,37",</p><p> "datacreationdate": "2024-02-05 19:00"</p><p> },</p><p> {</p><p> "sitename": "屏東",</p><p> "uvi": "0",</p><p> "unit": "環境部",</p><p> "county": "屏東縣",</p><p> "wgs84_lon": "120,29,17",</p><p> "wgs84_lat": "22,40,23",</p><p> "datacreationdate": "2024-02-05 19:00"</p><p> },</p><p> {</p><p> "sitename": "橋頭",</p><p> "uvi": "0",</p><p> "unit": "環境部",</p><p> "county": "高雄市",</p><p> "wgs84_lon": "120,18,20",</p><p> "wgs84_lat": "22,45,27",</p><p> "datacreationdate": "2024-02-05 19:00"</p><p> },</p><p> {</p><p> "sitename": "新營",</p><p> "uvi": "0",</p><p> "unit": "環境部",</p><p> "county": "臺南市",</p><p> "wgs84_lon": "120,19,2",</p><p> "wgs84_lat": "23,18,20",</p><p> "datacreationdate": "2024-02-05 19:00"</p><p> },</p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-57058119100740544532024-02-04T04:29:00.000-08:002024-02-05T00:18:57.851-08:00Node-Red 取得opendata PM2.5 經MQTT Server 回傳至Line Notify+Node-Red<p><span style="font-size: x-large;"><b></b></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><b><b style="text-align: left;">Node-Red 取得opendata PM2.5 經MQTT Server 回傳至Line Notify+Node-Red</b></b></span></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5N60nLTHrZxwUoWjAGFoB6NXK11gsvWBaiFZKjAj_EZ5L7McLeLHY_gSADDJYtfThwcpCMphpLns4jWQJYfyoJnqmbH17UFlahQ0lj8af9GHfcDtzEVt9PtZkKMOEnnx5kaDkk26_EdUoPmD4AogQoiWTF47r4YR0IchaAJEvxX5G-Naa1JtuTXmx70c/s1139/%E7%B9%AA%E5%9C%961.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="546" data-original-width="1139" height="306" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5N60nLTHrZxwUoWjAGFoB6NXK11gsvWBaiFZKjAj_EZ5L7McLeLHY_gSADDJYtfThwcpCMphpLns4jWQJYfyoJnqmbH17UFlahQ0lj8af9GHfcDtzEVt9PtZkKMOEnnx5kaDkk26_EdUoPmD4AogQoiWTF47r4YR0IchaAJEvxX5G-Naa1JtuTXmx70c/w640-h306/%E7%B9%AA%E5%9C%961.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDUABo4ZigLZ3Bs3KRXROs0PngJ03fuoxhOmHetbO7Upl9uC6tiZ4kw6jHK7sYt0PdbAFqjbmEuMCD6AE2UPdK18qdyjAC_BpV2vTQhE0Cf3mAawCrrsa_wxQFtcvoNxB7ATE8zeaBJCnZOugrs6PzUfyCdmUrb2MoxcEoHl8eUT5vrbQ7rfuyKzke8AU/s1364/2024-02-05%2016%2010%2047.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="574" data-original-width="1364" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDUABo4ZigLZ3Bs3KRXROs0PngJ03fuoxhOmHetbO7Upl9uC6tiZ4kw6jHK7sYt0PdbAFqjbmEuMCD6AE2UPdK18qdyjAC_BpV2vTQhE0Cf3mAawCrrsa_wxQFtcvoNxB7ATE8zeaBJCnZOugrs6PzUfyCdmUrb2MoxcEoHl8eUT5vrbQ7rfuyKzke8AU/w640-h270/2024-02-05%2016%2010%2047.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC8vs52oO9YhpVK_3Q9xXyo1xuWhgr0vqfWIaT15F4IQlc8YD8ULaPoN__PG7BlZdToBBl-VkrpUEBy7a_-630RvEOxg1RDLsHgeM0BRov3vtrdoqXMY4Y09xxxnl1mZQkF6BVQ23a5Q0iOmSpepKnku36_wB8If5c00WnseuaoMa-iDHHKp0RmEO4-EY/s1116/2024-02-04%2017%2044%2022.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="983" data-original-width="1116" height="564" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC8vs52oO9YhpVK_3Q9xXyo1xuWhgr0vqfWIaT15F4IQlc8YD8ULaPoN__PG7BlZdToBBl-VkrpUEBy7a_-630RvEOxg1RDLsHgeM0BRov3vtrdoqXMY4Y09xxxnl1mZQkF6BVQ23a5Q0iOmSpepKnku36_wB8If5c00WnseuaoMa-iDHHKp0RmEO4-EY/w640-h564/2024-02-04%2017%2044%2022.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKLxPFF03Iqu6GkRwrLh2Odq-AG0kWR6rBC6ooQu3AzXpzWPxPSZpgW-GQmX-5uxFWkgiOkP3sNtmUwSxmywj2DBt2Si-obat44cN-7I9LFGQA2SZ6z9A1jOwuZCm4isIcAgj0t4Ffw1tJsZDvDQaV49utkzNw64krly_h35E2vK_kCfa4GSZIMHeqoU/s1497/2024-02-04%2017%2046%2048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="981" data-original-width="1497" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmKLxPFF03Iqu6GkRwrLh2Odq-AG0kWR6rBC6ooQu3AzXpzWPxPSZpgW-GQmX-5uxFWkgiOkP3sNtmUwSxmywj2DBt2Si-obat44cN-7I9LFGQA2SZ6z9A1jOwuZCm4isIcAgj0t4Ffw1tJsZDvDQaV49utkzNw64krly_h35E2vK_kCfa4GSZIMHeqoU/w640-h420/2024-02-04%2017%2046%2048.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><pre style="overflow-wrap: break-word; text-wrap: wrap;"><span style="font-size: medium;"><b> {
"sitename": "沙鹿",
"county": "臺中市",
"aqi": "37",
"pollutant": "",
"status": "良好",
"so2": "1.5",
"co": "0.36",
"o3": "22.9",
"o3_8hr": "26.8",
"pm10": "37",
"pm2.5": "14",
"no2": "15",
"nox": "18.3",
"no": "3.3",
"wind_speed": "3",
"wind_direc": "320",
"publishtime": "2024\/02\/05 16:00:00",
"co_8hr": "0.3",
"pm2.5_avg": "11.5",
"pm10_avg": "23",
"so2_avg": "1",
"longitude": "120.568794",
"latitude": "24.225628",
"siteid": "29"
},
{
"sitename": "大里",
"county": "臺中市",
"aqi": "31",
"pollutant": "",
"status": "良好",
"so2": "1.1",
"co": "0.26",
"o3": "34.1",
"o3_8hr": "34.2",
"pm10": "8",
"pm2.5": "8",
"no2": "",
"nox": "",
"no": "",
"wind_speed": "1.4",
"wind_direc": "302",
"publishtime": "2024\/02\/05 16:00:00",
"co_8hr": "0.2",
"pm2.5_avg": "7.9",
"pm10_avg": "9",
"so2_avg": "1",
"longitude": "120.67844444",
"latitude": "24.09961111",
"siteid": "30"
},
{
"sitename": "忠明",
"county": "臺中市",
"aqi": "37",
"pollutant": "",
"status": "良好",
"so2": "1.6",
"co": "0.3",
"o3": "31.1",
"o3_8hr": "28.2",
"pm10": "14",
"pm2.5": "11",
"no2": "13.7",
"nox": "14.5",
"no": "0.7",
"wind_speed": "3.1",
"wind_direc": "302",
"publishtime": "2024\/02\/05 16:00:00",
"co_8hr": "0.3",
"pm2.5_avg": "11.3",
"pm10_avg": "19",
"so2_avg": "1",
"longitude": "120.641092",
"latitude": "24.151958",
"siteid": "31"
},</b></span></pre></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=e<span style="background-color: #04ff00;">81dd42e6-9b18b-43f8-991e-b3dee723a52d</span>&limit=1000&sort=ImportDate%20desc&format=JSON</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;">改成自己的金鑰</span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><br /></span></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><p>[{"id":"89ad6b4aa5ce1629","type":"inject","z":"74c417894ebe4fde","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"120","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":100,"y":60,"wires":[["00c7035b7f63d64c"]]},{"id":"1e8a983474b291e8","type":"function","z":"74c417894ebe4fde","name":"func2","func":"var a = msg.payload;\nvar pm25;\n\na=Array.from(a);\n\na.forEach(function(e,i){\n if(e.sitename=='大里'){\n pm25 = e['pm2.5_avg'];\n }\n});\nmsg.payload=pm25;\n\n//to store values use:\nflow.set('flowPM25',pm25);\n\nreturn msg;\n\n\n\n//var flowPM25=flow.get('flowPM25') || 0;\n//var flowStatus=flow.get('flowStatus') ;\n//var flowPublishTime=flow.get('flowPublishTime') ;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":180,"wires":[["d922fbd375c022d2","5e07f4ba688793a1"]]},{"id":"5e07f4ba688793a1","type":"debug","z":"74c417894ebe4fde","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":550,"y":180,"wires":[]},{"id":"00c7035b7f63d64c","type":"http request","z":"74c417894ebe4fde","name":"","method":"GET","ret":"obj","paytoqs":"ignore","url":"https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate%20desc&format=JSON","tls":"","persist":false,"proxy":"","insecureHTTPParser":false,"authType":"","senderr":false,"headers":[],"x":240,"y":60,"wires":[["439bff74d05a15eb","ccedd3ceed710617"]]},{"id":"ebd8971451667511","type":"ui_text","z":"74c417894ebe4fde","group":"f64f0af7fe862c9e","order":3,"width":0,"height":0,"name":"","label":"空氣品質","format":"{{msg.payload}}","layout":"row-left","className":"","x":560,"y":400,"wires":[]},{"id":"3e40ccdb93825cd5","type":"ui_text","z":"74c417894ebe4fde","group":"f64f0af7fe862c9e","order":4,"width":0,"height":0,"name":"","label":"發佈時間","format":"{{msg.payload}}","layout":"row-left","className":"","x":560,"y":440,"wires":[]},{"id":"d922fbd375c022d2","type":"ui_gauge","z":"74c417894ebe4fde","name":"","group":"f64f0af7fe862c9e","order":1,"width":8,"height":4,"gtype":"gage","title":"細懸浮微粒PM2.5","label":"units","format":"{{value}}","min":0,"max":"100","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","className":"","x":590,"y":220,"wires":[]},{"id":"439bff74d05a15eb","type":"debug","z":"74c417894ebe4fde","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":60,"wires":[]},{"id":"ccedd3ceed710617","type":"function","z":"74c417894ebe4fde","name":"func1","func":"msg.payload= msg.payload.records\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":210,"y":140,"wires":[["017d6225cc331fd5","1dac0906f16a8150","1e8a983474b291e8"]]},{"id":"017d6225cc331fd5","type":"debug","z":"74c417894ebe4fde","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":390,"y":140,"wires":[]},{"id":"1dac0906f16a8150","type":"function","z":"74c417894ebe4fde","name":"function 88","func":"for (var i = 0; i < msg.payload.length; i++) {\n if(msg.payload[i].sitename==\"大里\"){ \n var newMsg = {};\n newMsg.payload = msg.payload[i];\n node.send(newMsg);\n }\n}\nreturn null;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":230,"y":280,"wires":[["aa3cf2a22e96c8eb","941d2f1dc53652e3","399739dcb882c814","665716649f881332"]]},{"id":"aa3cf2a22e96c8eb","type":"debug","z":"74c417894ebe4fde","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":430,"y":280,"wires":[]},{"id":"941d2f1dc53652e3","type":"json","z":"74c417894ebe4fde","name":"","property":"payload","action":"str","pretty":false,"x":430,"y":340,"wires":[["4431b433e1f7c50d"]]},{"id":"4431b433e1f7c50d","type":"debug","z":"74c417894ebe4fde","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":550,"y":340,"wires":[]},{"id":"399739dcb882c814","type":"function","z":"74c417894ebe4fde","name":"func2","func":"var PM25,Status,PublishTime;\nStatus=msg.payload.status; \nmsg.payload=Status;\n\n//to store values use:\nflow.set('flowStatus',Status);\n\nreturn msg;\n\n\n\n//var flowPM25=flow.get('flowPM25') || 0;\n//var flowStatus=flow.get('flowStatus') ;\n//var flowPublishTime=flow.get('flowPublishTime') ;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":400,"wires":[["ebd8971451667511"]]},{"id":"665716649f881332","type":"function","z":"74c417894ebe4fde","name":"func2","func":"var PM25,Status,PublishTime;\n\n \nPublishTime=msg.payload.publishtime;\nmsg.payload=PublishTime;\n\n//to store values use:\nflow.set('flowPublishTime',PublishTime);\n\nreturn msg;\n\n\n\n//var flowPM25=flow.get('flowPM25') || 0;\n//var flowStatus=flow.get('flowStatus') ;\n//var flowPublishTime=flow.get('flowPublishTime') ;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":430,"y":440,"wires":[["3e40ccdb93825cd5","a9f29e53590f796f"]]},{"id":"6f6d4c66bbb39396","type":"mqtt out","z":"74c417894ebe4fde","name":"PM25","topic":"alex9ufo/PM25","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"603bb104.d6134","x":590,"y":520,"wires":[]},{"id":"7d6d280b84907c23","type":"mqtt in","z":"74c417894ebe4fde","name":"PM25","topic":"alex9ufo/PM25","qos":"1","datatype":"auto-detect","broker":"603bb104.d6134","nl":false,"rap":true,"rh":0,"inputs":0,"x":790,"y":120,"wires":[["305dfaa1dd1b079f","158f73016922f32e","e9fea79b02646127"]]},{"id":"490e6bf9455d882d","type":"function","z":"74c417894ebe4fde","name":"set flow variable","func":"//var PM25,Status,PublishTime;\nvar flowPM25=flow.get('flowPM25') || 0;\nvar flowStatus=flow.get('flowStatus') ;\nvar flowPublishTime=flow.get('flowPublishTime') ;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":380,"wires":[[]]},{"id":"9f1a67fe02033640","type":"inject","z":"74c417894ebe4fde","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":80,"y":380,"wires":[["490e6bf9455d882d"]]},{"id":"3490e14f9ff8fe75","type":"function","z":"74c417894ebe4fde","name":"function ","func":"var f1=flow.get('flowPM25') || 0;\nvar f2=flow.get('flowStatus') ;\nvar f3=flow.get('flowPublishTime') ;\n\nvar v4=\"MQTT發行訊息為 台中市大里區 , PM2.5=\";\nv4+=f1;\nv4+=\"天候狀況\";\nv4+=f2;\n\nv4+=\"發布時間\";\nv4+=f3;\n\nmsg.payload=v4;\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":520,"wires":[["6f6d4c66bbb39396","d61fbc10f8fab89f"]]},{"id":"a9f29e53590f796f","type":"delay","z":"74c417894ebe4fde","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":260,"y":520,"wires":[["3490e14f9ff8fe75"]]},{"id":"305dfaa1dd1b079f","type":"debug","z":"74c417894ebe4fde","name":"debug 262","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":970,"y":60,"wires":[]},{"id":"d61fbc10f8fab89f","type":"ui_text","z":"74c417894ebe4fde","group":"551944bcad742ef1","order":1,"width":8,"height":3,"name":"","label":"MQTT發行訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":600,"y":600,"wires":[]},{"id":"158f73016922f32e","type":"ui_text","z":"74c417894ebe4fde","group":"551944bcad742ef1","order":3,"width":8,"height":3,"name":"","label":"MQTT接收訊息","format":"{{msg.payload}}","layout":"row-left","className":"","x":980,"y":120,"wires":[]},{"id":"e9fea79b02646127","type":"function","z":"74c417894ebe4fde","name":"function ","func":"msg.payload=\" --訂閱MQTT的訊息---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":960,"y":180,"wires":[["8e5a33f864d47f7a","a65bd6bb901d2cd7"]]},{"id":"8e5a33f864d47f7a","type":"function","z":"74c417894ebe4fde","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":1130,"y":180,"wires":[["52591b7051c6ec4f"]]},{"id":"52591b7051c6ec4f","type":"http request","z":"74c417894ebe4fde","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":1280,"y":180,"wires":[["648619e21e91f6e2"]]},{"id":"648619e21e91f6e2","type":"debug","z":"74c417894ebe4fde","name":"debug 263","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1430,"y":180,"wires":[]},{"id":"01e2331858995585","type":"comment","z":"74c417894ebe4fde","name":"Line Notify Message ","info":"","x":1210,"y":140,"wires":[]},{"id":"a65bd6bb901d2cd7","type":"delay","z":"74c417894ebe4fde","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1100,"y":260,"wires":[["41cc1b799336aeb0"]]},{"id":"41cc1b799336aeb0","type":"ui_audio","z":"74c417894ebe4fde","name":"","group":"551944bcad742ef1","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":"","x":1260,"y":260,"wires":[]},{"id":"f64f0af7fe862c9e","type":"ui_group","name":"2024 大里","tab":"ba052423.3729f8","order":3,"disp":true,"width":8,"collapse":false,"className":""},{"id":"603bb104.d6134","type":"mqtt-broker","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"551944bcad742ef1","type":"ui_group","name":"Line+MQTT ","tab":"ba052423.3729f8","order":4,"disp":true,"width":8,"collapse":false,"className":""},{"id":"ba052423.3729f8","type":"ui_tab","name":"AQI","icon":"dashboard","order":1}]</p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-49433856502548881172024-02-04T04:16:00.000-08:002024-02-04T04:16:05.081-08:00<p><b> </b><span style="background-color: white; color: #222222; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: xx-large;">用Python來抓取政府公開資料(JSON):空氣品質</span></p><p><span style="background-color: white;"><span style="color: #222222; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;">參考來源https://book.whsh.tc.edu.tw/books/python%E6%95%99%E5%AD%B8/page/pythonjson</span></span></p><p><span style="background-color: white;"><span style="color: #222222; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;"><br /></span></span></p><div style="background-color: white; border: 0px; box-sizing: border-box; clear: left; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 14px; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0px; outline-color: var(--color-primary); outline-width: 1px; padding: 0px; vertical-align: baseline;"></div><h3 id="bkmrk-%C2%A0" style="background-color: white; border: 0px; box-sizing: border-box; clear: left; color: #222222; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: 1.22143em; margin: 0.785714em 0px 0.431373em; outline-color: var(--color-primary); outline-width: 1px; padding: 0px; position: relative; vertical-align: baseline;"><span style="font-size: x-large;">一、尋找開放資料</span></h3><p id="bkmrk-%C2%A0-0" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-size: 14px; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b> </b></p><p id="bkmrk-%E6%94%BF%E5%BA%9C%E8%B3%87%E6%96%99%E9%96%8B%E6%94%BE%E5%B9%B3%E5%8F%B0%EF%BC%88https%3A%2F%2Fdat" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;">政府資料開放平台(<a href="https://data.gov.tw/" rel="noopener" style="border: 0px; box-sizing: border-box; cursor: pointer; fill: currentcolor; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: 1.6; margin: 0px; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; transition: filter 80ms ease-in-out 0s; vertical-align: baseline; word-break: break-word;" target="_blank">https://data.gov.tw/</a>)</span></b></p><p id="bkmrk-%E6%90%9C%E5%B0%8B%E3%80%8C%E7%A9%BA%E6%B0%A3%E5%93%81%E8%B3%AA%E6%8C%87%E6%A8%99%E3%80%8D%EF%BC%8C%E6%88%96%E7%9B%B4%E6%8E%A5%E6%89%93%E9%96%8B%E7%B6%B2%E5%9D%80%EF%BC%9Ah" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;">搜尋「空氣品質指標」,或直接打開網址:<a href="https://data.gov.tw/dataset/40448" rel="noopener" style="border: 0px; box-sizing: border-box; cursor: pointer; fill: currentcolor; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: 1.6; margin: 0px; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; transition: filter 80ms ease-in-out 0s; vertical-align: baseline; word-break: break-word;" target="_blank">https://data.gov.tw/dataset/40448</a> </span></b></p><p id="bkmrk-%E9%81%B8%E6%93%87%E3%80%8Cjson%E3%80%8D%E6%A0%BC%E5%BC%8F" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;">選擇「JSON」格式</span></b></p><p id="bkmrk-" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><a href="https://book.whsh.tc.edu.tw/uploads/images/gallery/2021-05/Ov8A0sskYSk9Qj8v-image-1620793287044.png" rel="noopener" style="border: 0px; box-sizing: border-box; cursor: pointer; fill: currentcolor; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: 1.6; margin: 0px; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; transition: filter 80ms ease-in-out 0s; vertical-align: baseline; word-break: break-word;" target="_blank"><b><span style="font-size: large;"><img alt="image-1620793287044.png" src="https://book.whsh.tc.edu.tw/uploads/images/gallery/2021-05/scaled-1680-/Ov8A0sskYSk9Qj8v-image-1620793287044.png" style="border: 0px; box-sizing: border-box; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; height: auto; line-height: inherit; margin: 0px; max-width: 100%; outline-color: var(--color-primary); outline-width: 1px; padding: 0px; vertical-align: baseline;" /></span></b></a></p><p id="bkmrk-%C2%A0-1" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;"> </span></b></p><p id="bkmrk-%E8%B3%87%E6%96%99%E6%AC%84%E4%BD%8D%E7%9A%84%E8%AA%AA%E6%98%8E%E5%8F%8A%E4%B8%8B%E8%BC%89%E7%B6%B2%E5%9D%80%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;">資料欄位的說明及下載網址:</span></b></p><p id="bkmrk--0" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><a href="https://book.whsh.tc.edu.tw/uploads/images/gallery/2021-05/mnCxrqIJNpxVNzon-image-1620793319771.png" rel="noopener" style="border: 0px; box-sizing: border-box; cursor: pointer; fill: currentcolor; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; line-height: 1.6; margin: 0px; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; text-decoration-line: none; transition: filter 80ms ease-in-out 0s; vertical-align: baseline; word-break: break-word;" target="_blank"><b><span style="font-size: large;"><img alt="image-1620793319771.png" src="https://book.whsh.tc.edu.tw/uploads/images/gallery/2021-05/scaled-1680-/mnCxrqIJNpxVNzon-image-1620793319771.png" style="border: 0px; box-sizing: border-box; font-family: inherit; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-style: inherit; font-variant: inherit; font-variation-settings: inherit; height: auto; line-height: inherit; margin: 0px; max-width: 100%; outline-color: var(--color-primary); outline-width: 1px; padding: 0px; vertical-align: baseline;" /></span></b></a></p><h3 id="bkmrk-%E4%BA%8C%E3%80%81%E6%92%B0%E5%AF%AB%E7%A8%8B%E5%BC%8F" style="background-color: white; border: 0px; box-sizing: border-box; clear: left; color: #222222; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: 1.22143em; margin: 0.785714em 0px 0.431373em; outline-color: var(--color-primary); outline-width: 1px; padding: 0px; position: relative; vertical-align: baseline;"><span style="font-size: large;">二、撰寫程式</span></h3><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><b><span style="font-size: large;">程式碼範例如下</span></b></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>import json, ssl, urllib.request</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;"><b><span style="font-size: large;">url = 'https://data.moenv.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate%20desc&format=JSON'</span></b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>context = ssl._create_unverified_context()</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;"><b><span style="font-size: large;">with urllib.request.urlopen(url, context=context) as jsondata:</span></b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b> #將JSON進行UTF-8的BOM解碼,並把解碼後的資料載入JSON陣列中</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b> data = json.loads(jsondata.read().decode('utf-8-sig')) </b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;"><b><span style="font-size: large;">for i in data['records']:</span></b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: #444444; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b> print(i['sitename'],' AQI=',i['aqi'], ' 狀態=', i['status'])</b></span></p><div><b><span style="font-size: large;"><br /></span></b></div><div><span style="background-color: white; color: #444444; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Oxygen, Ubuntu, Roboto, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif;"><b><span style="font-size: large;">執行結果:</span></b></span></div><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>>>> %Run -c $EDITOR_CONTENT</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>基隆 AQI= 32 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>汐止 AQI= 27 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>萬里 AQI= 43 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新店 AQI= 35 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>土城 AQI= 27 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>板橋 AQI= 25 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新莊 AQI= 28 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>菜寮 AQI= 27 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>林口 AQI= 31 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>淡水 AQI= 31 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>士林 AQI= 30 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>中山 AQI= 42 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>萬華 AQI= 27 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>古亭 AQI= 28 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>松山 AQI= 36 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>大同 AQI= 40 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>桃園 AQI= 31 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>大園 AQI= 31 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>觀音 AQI= 31 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>平鎮 AQI= 33 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>龍潭 AQI= 33 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>湖口 AQI= 39 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>竹東 AQI= 43 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新竹 AQI= 45 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>頭份 AQI= 40 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>苗栗 AQI= 63 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>三義 AQI= 57 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>豐原 AQI= 84 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>沙鹿 AQI= 52 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>大里 AQI= 76 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>忠明 AQI= 65 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>西屯 AQI= 63 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>彰化 AQI= 55 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>線西 AQI= 44 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>二林 AQI= 82 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>南投 AQI= 90 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>斗六 AQI= 105 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>崙背 AQI= 72 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新港 AQI= 77 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>朴子 AQI= 77 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>臺西 AQI= 44 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>嘉義 AQI= 100 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新營 AQI= 84 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>善化 AQI= 99 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>安南 AQI= 95 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>臺南 AQI= 91 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>美濃 AQI= 107 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>橋頭 AQI= 102 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>仁武 AQI= 103 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>鳳山 AQI= 73 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>大寮 AQI= 55 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>林園 AQI= 53 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>楠梓 AQI= 103 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>左營 AQI= 97 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>前金 AQI= 75 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>前鎮 AQI= 60 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>小港 AQI= 54 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>屏東 AQI= 75 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>潮州 AQI= 93 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>恆春 AQI= 25 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>臺東 AQI= 20 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>花蓮 AQI= 25 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>陽明 AQI= 29 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>宜蘭 AQI= 27 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>冬山 AQI= 29 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>三重 AQI= 50 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>中壢 AQI= 35 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>竹山 AQI= 130 狀態= 對敏感族群不健康</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>永和 AQI= 32 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>復興 AQI= 63 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>埔里 AQI= 70 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>馬祖 AQI= 34 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>金門 AQI= 58 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>馬公 AQI= 39 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>關山 AQI= 21 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>麥寮 AQI= 56 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>富貴角 AQI= 39 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>大城 AQI= 46 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>彰化(員林) AQI= 85 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>高雄(湖內) AQI= 81 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>臺南(麻豆) AQI= 79 狀態= 普通</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>屏東(琉球) AQI= 39 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>臺中(大甲) AQI= 50 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>新北(樹林) AQI= 37 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>屏東(枋山) AQI= 25 狀態= 良好</b></span></p><p id="bkmrk-%E7%A8%8B%E5%BC%8F%E7%A2%BC%EF%BC%9A" style="background-color: white; border: 0px; box-sizing: border-box; font-feature-settings: inherit; font-kerning: inherit; font-optical-sizing: inherit; font-stretch: inherit; font-variant-alternates: inherit; font-variant-east-asian: inherit; font-variant-numeric: inherit; font-variant-position: inherit; font-variation-settings: inherit; line-height: inherit; margin: 0.3em 0px 1.375em; outline-color: var(--color-primary); outline-width: 1px; overflow-wrap: break-word; padding: 0px; vertical-align: baseline; word-break: break-word;"><span style="color: red; font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Oxygen, Ubuntu, Roboto, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif; font-size: large;"><b>>>> </b></span></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-70415717489104710822024-02-04T01:23:00.000-08:002024-02-04T01:26:28.284-08:00 Node-RED MQTT 與 Line Notify<p><span style="font-size: x-large;"> Node-RED MQTT 與 Line Notify </span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: large;">Node-RED 由Dashboard UI Buttom 控制 MQTT Out , 經由MQTT in 控制 Dashboard UI Text 與 Line Notify</span></p><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBT8UHe-mmCmo2McTQ83z5UUTZX3uk5vj_7TuOZDRWh4pViXOsSCBFJKV1T4d1wvdXMAJaQs2ckGQBAGf6fY16fhLFq3YVKKy6BL163rRujUxPcWAMQ6RmqIlFD5Oz2RiQ6lBNbGvUOGY/s1600/%25E5%259C%2596%25E7%2589%2587+19071210%252549.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="443" data-original-width="901" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBT8UHe-mmCmo2McTQ83z5UUTZX3uk5vj_7TuOZDRWh4pViXOsSCBFJKV1T4d1wvdXMAJaQs2ckGQBAGf6fY16fhLFq3YVKKy6BL163rRujUxPcWAMQ6RmqIlFD5Oz2RiQ6lBNbGvUOGY/s640/%25E5%259C%2596%25E7%2589%2587+19071210%252549.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: large;">執行畫面 127.0.0.1:1880/UI </span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGxDFCPDbsHKqrYnyIRutshFf2GjdvYRfmkpBNzuZCNI_x07w0bZL0H70QZxDKw64s1zeT36v8CRo8sEaf7Uk23oU0ReXLJLQTyP_fwMg6ti6Y_RnT1VuP7jxAC4D4D4PYuIrqRmk3l7g/s1600/%25E5%259C%2596%25E7%2589%2587+2071209%252506.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="429" data-original-width="1218" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGxDFCPDbsHKqrYnyIRutshFf2GjdvYRfmkpBNzuZCNI_x07w0bZL0H70QZxDKw64s1zeT36v8CRo8sEaf7Uk23oU0ReXLJLQTyP_fwMg6ti6Y_RnT1VuP7jxAC4D4D4PYuIrqRmk3l7g/s640/%25E5%259C%2596%25E7%2589%2587+2071209%252506.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">1) 設定 On LED , Off LED</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIv_hiFvFP7NNpep3a3B_CAd23MyE6kgQKdXsf0KMT__mdpVnKwIOy2WrVIsW8kfnv61N3NqMhgh5S4FOPY4TpEC2ZIUX2kCilj1gbkDZ6wuKUx-s8qFwprc5zW8CBtOKnOcd4yFKcBlI/s1600/%25E5%259C%2596%25E7%2589%2587+3071209%252502.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="857" data-original-width="580" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIv_hiFvFP7NNpep3a3B_CAd23MyE6kgQKdXsf0KMT__mdpVnKwIOy2WrVIsW8kfnv61N3NqMhgh5S4FOPY4TpEC2ZIUX2kCilj1gbkDZ6wuKUx-s8qFwprc5zW8CBtOKnOcd4yFKcBlI/s640/%25E5%259C%2596%25E7%2589%2587+3071209%252502.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="432" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmT0WHamgCugMdQAYnpcaanyurXuRtiHBKbM3BcO4PYACtn_U_55RZl3HxA2oxUyXidyJtsZmheVPTvSzEaj3AnQg8k0x0MwIRf5AhYkD6_RjA0e2cihi1l9cBh_uH9xj6BaSsmQ6XpAY/s1600/%25E5%259C%2596%25E7%2589%2587+4071209%252557.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="853" data-original-width="571" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmT0WHamgCugMdQAYnpcaanyurXuRtiHBKbM3BcO4PYACtn_U_55RZl3HxA2oxUyXidyJtsZmheVPTvSzEaj3AnQg8k0x0MwIRf5AhYkD6_RjA0e2cihi1l9cBh_uH9xj6BaSsmQ6XpAY/s640/%25E5%259C%2596%25E7%2589%2587+4071209%252557.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="428" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHUBO2CK34fY-5IOqYMNHKBV1fQya3qxj_Zynww4Jo_7uWOGNBC8s1SAfUim-xUjVJ_Jww7hh3H0wpv_G7Agvu5-6ZBfGneycOKlZR8bZgLjtf2ePgGH9YBoa8AhkE3uWUpEI9BHmQz5E/s1600/%25E5%259C%2596%25E7%2589%2587+5071209%252530.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="183" data-original-width="210" height="554" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHUBO2CK34fY-5IOqYMNHKBV1fQya3qxj_Zynww4Jo_7uWOGNBC8s1SAfUim-xUjVJ_Jww7hh3H0wpv_G7Agvu5-6ZBfGneycOKlZR8bZgLjtf2ePgGH9YBoa8AhkE3uWUpEI9BHmQz5E/s640/%25E5%259C%2596%25E7%2589%2587+5071209%252530.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdQXxYh3dV-XNy2QYC163yOPQigBwbv-3X5rI5W2SVYhjDTfMDhfYJlBuR-36gRDfAj50HUVlJCEaFnogLLqTrIs-3VqQ8E7aOAQVXSebO-raf-sTPfgJSqhtZqEjmBhax6u2b6EnbyE/s1600/%25E5%259C%2596%25E7%2589%2587+6071209%252517.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="790" data-original-width="1307" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjXdQXxYh3dV-XNy2QYC163yOPQigBwbv-3X5rI5W2SVYhjDTfMDhfYJlBuR-36gRDfAj50HUVlJCEaFnogLLqTrIs-3VqQ8E7aOAQVXSebO-raf-sTPfgJSqhtZqEjmBhax6u2b6EnbyE/s640/%25E5%259C%2596%25E7%2589%2587+6071209%252517.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">設定 payload : Light-emitting diode on 與 Light-emitting diode off</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">2) 設定 audio out 讓 LED 設定的 payload Light-emitting diode on 與 Light-emitting diode off 能說出來</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmTekD-8jcXEN0iw-UZ2moK4jhDKKr9dW88UVpDDIkTI3_xQH68V3j9JsF51w2dmrbK0te6hJ1iJVdE1Z-VjgmAC2fvLs3ReWqUW1Z9KJG61fNahiXEs7EqiJOWK1KT_5TvxdKAu1rb8/s1600/%25E5%259C%2596%25E7%2589%2587+8071210%252503.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="827" data-original-width="1017" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzmTekD-8jcXEN0iw-UZ2moK4jhDKKr9dW88UVpDDIkTI3_xQH68V3j9JsF51w2dmrbK0te6hJ1iJVdE1Z-VjgmAC2fvLs3ReWqUW1Z9KJG61fNahiXEs7EqiJOWK1KT_5TvxdKAu1rb8/s640/%25E5%259C%2596%25E7%2589%2587+8071210%252503.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg361gRsYoLTrAbN_dBs83C1brHw2YBHzz-KcrfaMPH82GZM2NZls6ABUx9dqyR_qHLKVjseBp8QmyxuWUT7sJJEJEZKNBO4hiISXauBlctHzZEO9ENgOFNDR17nXxI6s8Mektt-q4w4Xs/s1600/%25E5%259C%2596%25E7%2589%2587+7071210%252541.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="359" data-original-width="673" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg361gRsYoLTrAbN_dBs83C1brHw2YBHzz-KcrfaMPH82GZM2NZls6ABUx9dqyR_qHLKVjseBp8QmyxuWUT7sJJEJEZKNBO4hiISXauBlctHzZEO9ENgOFNDR17nXxI6s8Mektt-q4w4Xs/s640/%25E5%259C%2596%25E7%2589%2587+7071210%252541.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"> 3) 設定 MQTT Server 與 Topic</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">MQTT Server : broker.mqtt-dashboard.com:1883</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">Topic : alex9ufo/led/led_event</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjejx8ze85AJvE7Is14Mv0DajuWiWkZBaHPZTSP4aqQ7xSjKqdIUCME-vfSJv0HU6a5KPq4bsAVlEFF87uyYI8kWxg8qpdYoHPNksXfA2Ld83nCuKWPHaZ2xYUyA9JNjzUESea1mtVdNoU/s1600/%25E5%259C%2596%25E7%2589%2587+10071210%252515.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="589" data-original-width="1301" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjejx8ze85AJvE7Is14Mv0DajuWiWkZBaHPZTSP4aqQ7xSjKqdIUCME-vfSJv0HU6a5KPq4bsAVlEFF87uyYI8kWxg8qpdYoHPNksXfA2Ld83nCuKWPHaZ2xYUyA9JNjzUESea1mtVdNoU/s640/%25E5%259C%2596%25E7%2589%2587+10071210%252515.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsSAEbdybVJ5ZvnHb2uAFnEn142NR5rhTuA2Vflxp5q6Aii8vwWLEULOqYVLJtDWYZTo5QV5mAPlxzaXYTUi69o62B9xe_dkzuxX0ex95QbScoHILfoiyDT-9BoetJdCZOH7eKic00ICo/s1600/%25E5%259C%2596%25E7%2589%2587+9071210%252529.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="846" data-original-width="580" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsSAEbdybVJ5ZvnHb2uAFnEn142NR5rhTuA2Vflxp5q6Aii8vwWLEULOqYVLJtDWYZTo5QV5mAPlxzaXYTUi69o62B9xe_dkzuxX0ex95QbScoHILfoiyDT-9BoetJdCZOH7eKic00ICo/s640/%25E5%259C%2596%25E7%2589%2587+9071210%252529.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="438" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"> 4) 設定 dashboard Text</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpnf_cPmNsf_NB5RWNKE-HsA5IbVWkeu4QQ0b7GaHe0twy0bmdjGWaS0-ddrRZT23pcvYBivn7O2lMCDhhbRlzO5S8c3TRmbIdo9ezXqa_HooinUxk5XA4F20YEnUV_iH211OAHSZjxZM/s1600/%25E5%259C%2596%25E7%2589%2587+26071211%252551.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="605" data-original-width="954" height="404" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpnf_cPmNsf_NB5RWNKE-HsA5IbVWkeu4QQ0b7GaHe0twy0bmdjGWaS0-ddrRZT23pcvYBivn7O2lMCDhhbRlzO5S8c3TRmbIdo9ezXqa_HooinUxk5XA4F20YEnUV_iH211OAHSZjxZM/s640/%25E5%259C%2596%25E7%2589%2587+26071211%252551.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"> 5) 取得 Line Notify 的 發行權杖 使得LEN ON , LED OFF 狀態可以隨時由手機APP LINE取得資訊</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ2beB_CeCHOrdneH5lOLqEE9OWMRzZK4tm6g1NKSk_x9sPeZgyO9Zm23yB2lUrq1RQ5SFcKk8qb8cggacW9FGL_WgvqPKGNtxM-Fjf4lftI0SwJLf9KGjnt7WWoJ5EvE3sIUu4XFTRaI/s1600/Screenshot_20200712-103929649.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="1600" data-original-width="770" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ2beB_CeCHOrdneH5lOLqEE9OWMRzZK4tm6g1NKSk_x9sPeZgyO9Zm23yB2lUrq1RQ5SFcKk8qb8cggacW9FGL_WgvqPKGNtxM-Fjf4lftI0SwJLf9KGjnt7WWoJ5EvE3sIUu4XFTRaI/s320/Screenshot_20200712-103929649.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="153" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">LINE結果 畫面</div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaB_HDET_iVIwEk0G1Yu6OEGz5Wx7_9abHE7ZYfN0WfZLF6xI6Jjd1kqhi0tfP_8RdgsKiMZwzw24FZomebHhGhhwWrKgfLx8DX1Y-ZSx1WxTD24EX7bgkRZT5JAMEhgFjme3ZAYEKkAk/s1600/%25E5%259C%2596%25E7%2589%2587+11071210%252559.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="896" data-original-width="1600" height="179" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjaB_HDET_iVIwEk0G1Yu6OEGz5Wx7_9abHE7ZYfN0WfZLF6xI6Jjd1kqhi0tfP_8RdgsKiMZwzw24FZomebHhGhhwWrKgfLx8DX1Y-ZSx1WxTD24EX7bgkRZT5JAMEhgFjme3ZAYEKkAk/s320/%25E5%259C%2596%25E7%2589%2587+11071210%252559.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZDFO1PZSzcP7JWO_Fm-dg0sBS1YrF-hN4ljOSCaUjZa_MyU9p9Lk2_3CzfU-o0qzdaDmrcAH6u3Jr1LuV569e8qGqH18quVR2TK5r1gRrSW31gQWKlrq6Soxiqc2YVV6XhbN2RFriQQ4/s1600/%25E5%259C%2596%25E7%2589%2587+12071210%252542.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="456" data-original-width="548" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZDFO1PZSzcP7JWO_Fm-dg0sBS1YrF-hN4ljOSCaUjZa_MyU9p9Lk2_3CzfU-o0qzdaDmrcAH6u3Jr1LuV569e8qGqH18quVR2TK5r1gRrSW31gQWKlrq6Soxiqc2YVV6XhbN2RFriQQ4/s320/%25E5%259C%2596%25E7%2589%2587+12071210%252542.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">進入 <a href="https://notify-bot.line.me/zh_TW/" style="color: #2288bb; text-decoration-line: none;">https://notify-bot.line.me/zh_TW/</a> 登入</div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIE-qdQ8P0dQMdgz6xnIoz8Sorqh4LyRrziXlAsQKqfb1jrVgwn7SHKDPsFHopqdWGvIv1cx34HtqvIBxq0iodUYo9q7yTPKv5QXKBC8TFML1FdXkpEj3addW4mC0QFtBxtERXVNTAdyc/s1600/%25E5%259C%2596%25E7%2589%2587+13071210%252550.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="359" data-original-width="506" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIE-qdQ8P0dQMdgz6xnIoz8Sorqh4LyRrziXlAsQKqfb1jrVgwn7SHKDPsFHopqdWGvIv1cx34HtqvIBxq0iodUYo9q7yTPKv5QXKBC8TFML1FdXkpEj3addW4mC0QFtBxtERXVNTAdyc/s320/%25E5%259C%2596%25E7%2589%2587+13071210%252550.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipNfIXPsqyAcbmUIsTBj63a2QOdLC7hqCwuadfBzxpeQ6VAPXTQ_wxbxoDfQYwhAyB0tna7b9U0-Fu55lmEUDB7iKdhCtG20SITo8b-165XglRXKQeN0fT0nh4ceYMwYwYDHDi0JSW2WI/s1600/%25E5%259C%2596%25E7%2589%2587+14071210%252551.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="856" data-original-width="649" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipNfIXPsqyAcbmUIsTBj63a2QOdLC7hqCwuadfBzxpeQ6VAPXTQ_wxbxoDfQYwhAyB0tna7b9U0-Fu55lmEUDB7iKdhCtG20SITo8b-165XglRXKQeN0fT0nh4ceYMwYwYDHDi0JSW2WI/s320/%25E5%259C%2596%25E7%2589%2587+14071210%252551.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="242" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><span style="color: red;">進入 發行權杖</span></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr58p3fxIi_j96uIzTRSPXSNsTNGuQbhZofeANee8C4dOcVWVcn5XabpX9htyVD9qOtYHuBteDrMQPj3U20T9W76SZ5oAkffRdKXqDK1NCFGC9ON-6TUZ8YLSzITjWPok-PVrrn6YcUQw/s1600/%25E5%259C%2596%25E7%2589%2587+15071210%252502.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="774" data-original-width="527" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjr58p3fxIi_j96uIzTRSPXSNsTNGuQbhZofeANee8C4dOcVWVcn5XabpX9htyVD9qOtYHuBteDrMQPj3U20T9W76SZ5oAkffRdKXqDK1NCFGC9ON-6TUZ8YLSzITjWPok-PVrrn6YcUQw/s320/%25E5%259C%2596%25E7%2589%2587+15071210%252502.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="217" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">指定 名稱 與 要Line通知的人 或 群組</div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJMjh2w8F-agWSxUq9fJ4rMTNKmhBXQoWSCtaaT5xtNI2AWhBta-_T9ELHyCFKwtaC8NB5mGuRKHtcNzbFkyRvNhtgEgSwciDuWys8vfbIyG3TSoBmRa1oA1H4utl2RSMSaZ5qUdI3X8g/s1600/%25E5%259C%2596%25E7%2589%2587+16071210%252557.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="452" data-original-width="532" height="271" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJMjh2w8F-agWSxUq9fJ4rMTNKmhBXQoWSCtaaT5xtNI2AWhBta-_T9ELHyCFKwtaC8NB5mGuRKHtcNzbFkyRvNhtgEgSwciDuWys8vfbIyG3TSoBmRa1oA1H4utl2RSMSaZ5qUdI3X8g/s320/%25E5%259C%2596%25E7%2589%2587+16071210%252557.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">將發行權杖 複製</div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEIeAuvaNIZk6kORFrTBsOuCR573jrMUFagiZVnSYm3s-ca8YHU9SZkMyRWm5rOWa8IMufWgt45sNVMJtlI18gUL4VAIMne0am9Q5ORRhmkNKzS0fASbHJaiwwbnYFCkqiwdIl2_kqbPc/s1600/%25E5%259C%2596%25E7%2589%2587+18071210%252517.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="334" data-original-width="990" height="107" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgEIeAuvaNIZk6kORFrTBsOuCR573jrMUFagiZVnSYm3s-ca8YHU9SZkMyRWm5rOWa8IMufWgt45sNVMJtlI18gUL4VAIMne0am9Q5ORRhmkNKzS0fASbHJaiwwbnYFCkqiwdIl2_kqbPc/s320/%25E5%259C%2596%25E7%2589%2587+18071210%252517.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="320" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">檢視一下 發行的權杖是否active </div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"><br /></span><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"><br /></span></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"><div class="paragraph" style="border: 0px; color: #555555; font-family: Merriweather, arial, sans-serif; font-size: 0.9em; line-height: 2; margin: 0px auto 2.5em; overflow-wrap: break-word; padding: 0px;"><strong style="color: #3a96b8;"><span style="font-size: large;">前往<a href="https://notify-bot.line.me/zh_TW/" style="color: #558e74; transition: all 200ms linear 0s;" target="_blank">Line Notify</a>, 設定並取得notify token</span></strong><br /><span style="color: #444444;"><span style="font-size: small;">申請Token步驟, 請參考圖例</span></span></div><div style="color: #333333; font-family: Merriweather, arial, sans-serif; font-size: 15px;"><div class="wsite-multicol" style="direction: ltr; position: relative;"><div class="wsite-multicol-table-wrap" style="margin: 0px -15px;"><table class="wsite-multicol-table" style="border-collapse: collapse; border: 0px !important; margin: 0px !important; padding: 0px !important; position: relative; table-layout: fixed; width: 1085px;"><tbody class="wsite-multicol-tbody"><tr class="wsite-multicol-tr"><td class="wsite-multicol-col" style="border: 0px !important; margin: 0px !important; padding: 0px 15px; vertical-align: top; width: 512.5px;"><div class="wsite-image wsite-image-border-none " style="margin-left: 0px; margin-right: 0px; padding-bottom: 10px; padding-top: 10px; position: relative; text-align: center;"><a style="color: #558e74; transition: all 200ms linear 0s;"><img alt="圖片" src="https://www.justplus.com.tw/uploads/7/6/7/0/76706939/screen-shot-on-2020-06-15-at-16-44-43_orig.png" style="border-color: initial; border-image: initial; border-style: initial; border-width: 0px !important; margin: 0px; max-width: 100%; padding: 0px; width: auto;" /></a><div style="font-size: 13.5px;"></div></div></td><td class="wsite-multicol-col" style="border: 0px !important; margin: 0px !important; padding: 0px 15px; vertical-align: top; width: 512.5px;"><div class="wsite-image wsite-image-border-none " style="margin-left: 0px; margin-right: 0px; padding-bottom: 10px; padding-top: 10px; position: relative; text-align: center;"><a style="color: #558e74; transition: all 200ms linear 0s;"><img alt="圖片" src="https://www.justplus.com.tw/uploads/7/6/7/0/76706939/screen-shot-on-2020-06-15-at-16-46-59_orig.png" style="border-color: initial; border-image: initial; border-style: initial; border-width: 0px !important; margin: 0px; max-width: 100%; padding: 0px; width: auto;" /></a><div style="font-size: 13.5px;"></div></div></td></tr></tbody></table></div></div></div><div style="color: #333333; font-family: Merriweather, arial, sans-serif; font-size: 15px;"><div class="wsite-multicol" style="direction: ltr; position: relative;"><div class="wsite-multicol-table-wrap" style="margin: 0px -15px;"><table class="wsite-multicol-table" style="border-collapse: collapse; border: 0px !important; margin: 0px !important; padding: 0px !important; position: relative; table-layout: fixed; width: 1085px;"><tbody class="wsite-multicol-tbody"><tr class="wsite-multicol-tr"><td class="wsite-multicol-col" style="border: 0px !important; margin: 0px !important; padding: 0px 15px; vertical-align: top; width: 512.5px;"><div class="wsite-image wsite-image-border-none " style="margin-left: 0px; margin-right: 0px; padding-bottom: 10px; padding-top: 10px; position: relative; text-align: center;"><a style="color: #558e74; transition: all 200ms linear 0s;"><img alt="圖片" src="https://www.justplus.com.tw/uploads/7/6/7/0/76706939/screen-shot-on-2020-06-15-at-16-51-48_orig.png" style="border-color: initial; border-image: initial; border-style: initial; border-width: 0px !important; margin: 0px; max-width: 100%; padding: 0px; width: auto;" /></a><div style="font-size: 13.5px;"></div></div></td><td class="wsite-multicol-col" style="border: 0px !important; margin: 0px !important; padding: 0px 15px; vertical-align: top; width: 512.5px;"><div class="wsite-image wsite-image-border-none " style="margin-left: 0px; margin-right: 0px; padding-bottom: 10px; padding-top: 10px; position: relative; text-align: center;"><a style="color: #558e74; transition: all 200ms linear 0s;"><img alt="圖片" src="https://www.justplus.com.tw/uploads/7/6/7/0/76706939/screen-shot-on-2020-06-15-at-16-55-19_orig.png" style="border-color: initial; border-image: initial; border-style: initial; border-width: 0px !important; margin: 0px; max-width: 100%; padding: 0px; width: auto;" /></a><div style="font-size: 13.5px;"></div></div></td></tr></tbody></table><br /></div></div></div></span></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"><br /></span></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"><br /></span></div><div><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">6) LINE 通知 的方法1</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: red; font-size: 13.2px;">將剛才設定的 放入Name 與 Access Token 中</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYbYYaTKzXeItjbyhg88r75j06yoFWsHVqcd9_2pyKJJ4T4xk9keuQ3RjwwvmjPYnrTxd1UG3qQhvM1MFLTE8wyyvhYDURkJBP9OvLtXj3zLCWTmPQabgubVGTBzGTxVZBPGeXtiCOpRM/s1600/%25E5%259C%2596%25E7%2589%2587+19071210%252549.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="443" data-original-width="901" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYbYYaTKzXeItjbyhg88r75j06yoFWsHVqcd9_2pyKJJ4T4xk9keuQ3RjwwvmjPYnrTxd1UG3qQhvM1MFLTE8wyyvhYDURkJBP9OvLtXj3zLCWTmPQabgubVGTBzGTxVZBPGeXtiCOpRM/s640/%25E5%259C%2596%25E7%2589%2587+19071210%252549.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi19226tBhHKzXYgk7ePc4FRbR7fwSETBXolcpryHHsvASQzleJpBGqmenmNIQSD4ne6P-qKHpBaAh2r1h2thK7RI69sK6-T2no3v7tg2fKAJa6enD88Xe_QiM4UH8iejoSvH6hSJNwAxU/s1600/%25E5%259C%2596%25E7%2589%2587+22071210%252505.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="835" data-original-width="580" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi19226tBhHKzXYgk7ePc4FRbR7fwSETBXolcpryHHsvASQzleJpBGqmenmNIQSD4ne6P-qKHpBaAh2r1h2thK7RI69sK6-T2no3v7tg2fKAJa6enD88Xe_QiM4UH8iejoSvH6hSJNwAxU/s640/%25E5%259C%2596%25E7%2589%2587+22071210%252505.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="444" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;">手機Line Notify 會送出 HEllo! LED Change 與一個貼圖 </div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">7) LINE 通知 的方法2</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQbfBJiBbBRvH6VGSN7Acly0f0wi6swQ2fosQWj0VbTLO2BdM5i-qv4MTU-j_zOfARZGLjTZTMp1hvbrA2TwltKJ-e51Gmec4d5tMFg7O0_j6DgcPxYeSMwgFQDl4awlJgvivGGWXWlFI/s1600/%25E5%259C%2596%25E7%2589%2587+27071211%252556.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="163" data-original-width="902" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQbfBJiBbBRvH6VGSN7Acly0f0wi6swQ2fosQWj0VbTLO2BdM5i-qv4MTU-j_zOfARZGLjTZTMp1hvbrA2TwltKJ-e51Gmec4d5tMFg7O0_j6DgcPxYeSMwgFQDl4awlJgvivGGWXWlFI/s640/%25E5%259C%2596%25E7%2589%2587+27071211%252556.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">設定2個function</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKXyLpOIoPiePHSx09gQDeVJKGOmug-nMB2wqXi1St9er900-RLl3nV9x0ezkmX7Z07RFXHCylWS0JMlRZxg9RkCqjjiribvWpUwKtBmUsncDnPTy_TbEcT0RlIBb8pQxyPzVJgZJEGvE/s1600/%25E5%259C%2596%25E7%2589%2587+28071211%252524.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="130" data-original-width="724" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKXyLpOIoPiePHSx09gQDeVJKGOmug-nMB2wqXi1St9er900-RLl3nV9x0ezkmX7Z07RFXHCylWS0JMlRZxg9RkCqjjiribvWpUwKtBmUsncDnPTy_TbEcT0RlIBb8pQxyPzVJgZJEGvE/s640/%25E5%259C%2596%25E7%2589%2587+28071211%252524.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">function1</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">var date = new Date();</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">var h = date.getHours();</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">var m = date.getMinutes();</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">var s = date.getSeconds();</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">if(h<10){</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;"> h = '0'+h;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">}</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">if(m<10){</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;"> m = '0' + m;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">}</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">if(s<10){</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;"> s = '0' + s;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">}</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">msg.payload = msg.payload + ' --> Time:(' + h + ':' + m + ':' + s + ')' ;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;"><br /></span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"></span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">return msg;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">function 2</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">發行權杖 放入 Authorization':'Bearer 後面</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">A4wwPNh2WqB723dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;"><br /></span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;"></span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer </span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">A4wwPNh2WqB723dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">msg.payload = {"message":msg.payload};</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">return msg;</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: lime; color: red; font-size: 13.2px;">//oR7KdXvK1eob33Rr2sRRgsl4PMq23DjDlhfUs96SyUBZu</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">設定Htpp Request</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">Request 方法 :POST</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">URL : https://notify-api.line.me/api/notify</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-LVwI-AfWYdI7s78vxi4Q-xPlK8d635k9bsjqLMVsIzOfcydqtp7K4pJM69EnzojPqJO9qB3cYoWwIgHP4TN96_lclx46Zsz2kojhZrxlONfGq2oZ6ty6iaBpphxYuPtH41IATQauAbw/s1600/%25E5%259C%2596%25E7%2589%2587+29071211%252533.jpg" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="546" data-original-width="564" height="618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-LVwI-AfWYdI7s78vxi4Q-xPlK8d635k9bsjqLMVsIzOfcydqtp7K4pJM69EnzojPqJO9qB3cYoWwIgHP4TN96_lclx46Zsz2kojhZrxlONfGq2oZ6ty6iaBpphxYuPtH41IATQauAbw/s640/%25E5%259C%2596%25E7%2589%2587+29071211%252533.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">8) 整個 程式碼</span><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: 13.2px;">[{"id":"7377d363.84128c","type":"tab","label":"MQTT_LED","disabled":false,"info":""},{"id":"9a9808d2.b904e8","type":"mqtt in","z":"7377d363.84128c","name":"","topic":"alex9ufo/led/led_event","qos":"1","datatype":"auto","broker":"841df58d.ee5e98","x":140,"y":100,"wires":[["ff64ce35.d54d6","cc43c13c.49236","bd66ced7.e745b","7b270a19.2bfba4"]]},{"id":"ff64ce35.d54d6","type":"ui_text","z":"7377d363.84128c","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"name":"","label":"MQTT Suscribe Data","format":"{{msg.payload}}","layout":"col-center","x":400,"y":100,"wires":[]},{"id":"e10b330a.0e832","type":"ui_button","z":"7377d363.84128c","name":"","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"passthru":false,"label":"On led","tooltip":"","color":"white","bgcolor":"","icon":"fa-circle","payload":"Light-emitting diode on","payloadType":"str","topic":"","x":110,"y":300,"wires":[["a4db0e32.936f8","6d69def.f1acb2"]]},{"id":"5ccc4685.ea9d18","type":"ui_button","z":"7377d363.84128c","name":"","group":"6c9116b.b62d4e8","order":0,"width":0,"height":0,"passthru":false,"label":"Off led","tooltip":"","color":"black","bgcolor":"","icon":"fa-circle-o","payload":"Light-emitting diode off","payloadType":"str","topic":"","x":110,"y":360,"wires":[["a4db0e32.936f8","6d69def.f1acb2"]]},{"id":"a4db0e32.936f8","type":"mqtt out","z":"7377d363.84128c","name":"","topic":"alex9ufo/led/led_event","qos":"1","retain":"false","broker":"841df58d.ee5e98","x":360,"y":300,"wires":[]},{"id":"6d69def.f1acb2","type":"ui_audio","z":"7377d363.84128c","name":"","group":"6c9116b.b62d4e8","voice":"zh-TW","always":"","x":320,"y":360,"wires":[]},{"id":"cc43c13c.49236","type":"function","z":"7377d363.84128c","name":"Format timestamp","func":"var date = new Date();\nvar h = date.getHours();\nvar m = date.getMinutes();\nvar s = date.getSeconds();\nif(h<10){\n h = '0'+h;\n}\nif(m<10){\n m = '0' + m;\n}\nif(s<10){\n s = '0' + s;\n}\nmsg.payload = msg.payload + ' --> Time:(' + h + ':' + m + ':' + s + ')' ;\n\nreturn msg;","outputs":1,"noerr":0,"x":190,"y":240,"wires":[["d3901e4c.e507d"]]},{"id":"d3901e4c.e507d","type":"function","z":"7377d363.84128c","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":370,"y":240,"wires":[["2d2f8066.cb721"]]},{"id":"2d2f8066.cb721","type":"http request","z":"7377d363.84128c","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":540,"y":240,"wires":[["6085953d.1462ec"]]},{"id":"6085953d.1462ec","type":"debug","z":"7377d363.84128c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":690,"y":240,"wires":[]},{"id":"bd66ced7.e745b","type":"debug","z":"7377d363.84128c","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":370,"y":60,"wires":[]},{"id":"7b270a19.2bfba4","type":"line-notify","z":"7377d363.84128c","name":"NODE-RED MQTT LED","message":"Hello! \nLED Changed","contentType":"sticker","imageUrl":"","stickerPackageId":"1","stickerId":"2","x":410,"y":160,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","z":"","name":"","broker":"broker.mqtt-dashboard.com","port":"1883","clientid":"","usetls":false,"compatmode":false,"keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closePayload":"","willTopic":"","willQos":"0","willPayload":""},{"id":"6c9116b.b62d4e8","type":"ui_group","z":"","name":"LED","tab":"28920cc.c23e2f4","order":1,"disp":true,"width":"6","collapse":false},{"id":"28920cc.c23e2f4","type":"ui_tab","z":"","name":"MQTT_LED","icon":"dashboard","order":1,"disabled":false,"hidden":false}]</span></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-16019887610891640102024-01-30T21:42:00.000-08:002024-02-18T04:25:33.297-08:002024作業2-3 ESP32 +( RFID +LED) + (Node-Red & SQLite ) + Line Notify<p><span style="font-size: x-large;"><b> 2024作業2-3 ESP32 +( <span style="background-color: #01ffff;">RFID +LED</span>) + (Node-Red & SQLite ) + Line Notify</b></span></p><p><span style="font-size: x-large;"><b><br /></b></span></p><p><span style="font-size: x-large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOouDrRcOAnRSWZO1mNL3xWjwhBppoO975F5Yx4PItNIQhV_T68Cy7Hj8g88nFAjtiRmP284k3Q_FSTxAjL9RsBKkvQeuuYwNGjTvleJ6YGH_Ww_ZcWe7t2b6Tgu7mwz_IM0-0Ew5ABxscYNtZ6bXdjvadZhyS7IZN8qPizfdGgLqE0i4uA4hZi11IZ8g/s1097/2024-02-18%2020%2021%2041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="1097" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOouDrRcOAnRSWZO1mNL3xWjwhBppoO975F5Yx4PItNIQhV_T68Cy7Hj8g88nFAjtiRmP284k3Q_FSTxAjL9RsBKkvQeuuYwNGjTvleJ6YGH_Ww_ZcWe7t2b6Tgu7mwz_IM0-0Ew5ABxscYNtZ6bXdjvadZhyS7IZN8qPizfdGgLqE0i4uA4hZi11IZ8g/w640-h452/2024-02-18%2020%2021%2041.png" width="640" /></a></span></div><span style="font-size: x-large;"><br /><b><br /></b></span><p></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="color: red; font-size: x-large;">(</span><span style="color: red; font-size: xx-large;">Arduino , Node-Red 程式中的 alex9ufo 全部改成自己的英文命名)</span></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><img border="0" data-original-height="464" data-original-width="1347" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDPi4LbtIgTz6ZHgYdjlc87dh127rUIR3CqclndSHh8yV0aeIRI_SpW0toKwxANjlfKdqbFzh2L2LAFZXHVMlddzSOD5lFbQEMvpW0Ms6WKBhhBz8u43OUdhI_4L3YgEdVL1dpRoYr9EFCIuz9fmMQqeL7VhthqG9auIv_kyrlfY5QM7xXUeDJYbQm3Tw/w640-h220/2023-11-12%2019%2050%2042.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; color: #33aaff; font-size: large; padding: 5px; position: relative; text-align: center;" width="640" /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi82pFhoYvcA1nSGnvYPUXvGyEKRicuJOVOvkdDzB5665O-vconNe9zet0AICacN2sCIjC_rfWLyA5lltjtUXKPblflQfoCyiWfiTCF5j4lqEka_GG6JudtK4I4muMCGEUwTsO9-BCtsRX__-oUpP8X0mS6-lzx7Oa1awapSv0RvG3qGFo9IjCD32Eoz-k/s1040/2024-02-04%2016%2054%2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="733" data-original-width="1040" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi82pFhoYvcA1nSGnvYPUXvGyEKRicuJOVOvkdDzB5665O-vconNe9zet0AICacN2sCIjC_rfWLyA5lltjtUXKPblflQfoCyiWfiTCF5j4lqEka_GG6JudtK4I4muMCGEUwTsO9-BCtsRX__-oUpP8X0mS6-lzx7Oa1awapSv0RvG3qGFo9IjCD32Eoz-k/w640-h452/2024-02-04%2016%2054%2013.png" width="640" /></a></div><br /><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><br /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: xxx-large;">使用Node-Red 第一次一定要先建立資料庫 不然看不到資料</span></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: xxx-large;">資料庫的目錄位置查sqlite節點</span></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: xxx-large;">每一個</span><span style="font-size: xxx-large;">sqlite節點都要修改成自己的目錄, alex9ufo MQTT Topic都要修改成自己的命名</span></p><p><br /></p><p><span style="font-size: large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl8tEEx90ejcAA_uTmjB0yhIwraMPm4ANwWX7MHUbhY5VCcHNOtwWpOrJKIK6-26bevOA5Udn0mpUiYJG8cv-TdFoKeVFIgWzPsLatKNJw9bwIgKEt3M9T8Qluoi0NEWxh3rF8OoVBElYlQiaA5t_35yPCyaTR0K_blqNs8SqXPxPDxRJeIjZX28YH5O4/s1792/2024-01-31%2013%2017%2026.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="832" data-original-width="1792" height="298" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhl8tEEx90ejcAA_uTmjB0yhIwraMPm4ANwWX7MHUbhY5VCcHNOtwWpOrJKIK6-26bevOA5Udn0mpUiYJG8cv-TdFoKeVFIgWzPsLatKNJw9bwIgKEt3M9T8Qluoi0NEWxh3rF8OoVBElYlQiaA5t_35yPCyaTR0K_blqNs8SqXPxPDxRJeIjZX28YH5O4/w640-h298/2024-01-31%2013%2017%2026.png" width="640" /></a></span></div><span style="font-size: large;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtlG0bZKCKGobezuJgYxqDZr107oY0-uAAre8Vf0OyaeTSymrBIBvD_oaSlQ0V7JCaAQyrCW5GGM6rqGG6awac8zEdltMJABgID2Jr9Y7OzpPNEuGvrSCr-SThxaNdA6sas2qP44QuvnAlJlM6zYn_3vfua3EcnQozE-VA7L55ZeYKZKGMzG8wI9c1e-I/s1467/2024-01-31%2013%2018%2022.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="849" data-original-width="1467" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgtlG0bZKCKGobezuJgYxqDZr107oY0-uAAre8Vf0OyaeTSymrBIBvD_oaSlQ0V7JCaAQyrCW5GGM6rqGG6awac8zEdltMJABgID2Jr9Y7OzpPNEuGvrSCr-SThxaNdA6sas2qP44QuvnAlJlM6zYn_3vfua3EcnQozE-VA7L55ZeYKZKGMzG8wI9c1e-I/w640-h370/2024-01-31%2013%2018%2022.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUAJ7r5HMzs0f-g2oaN5wvfFM3Rb4DcP-NI9k2vnCEbBMEcO1cKjZvutyJBRRpM6z4aEPLX2qxEG_D5elnSFx82M9rKxN4-Njq-vXbRTT-bMarlPYjWJICO1BoB4yyanJbiqWb2haY4jOWrjOcsXAxk12sjICTjABsa1DuZhDg7_Oy3PMnPQUpYCqd7g/s1139/2024-01-31%2013%2019%2004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="365" data-original-width="1139" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUAJ7r5HMzs0f-g2oaN5wvfFM3Rb4DcP-NI9k2vnCEbBMEcO1cKjZvutyJBRRpM6z4aEPLX2qxEG_D5elnSFx82M9rKxN4-Njq-vXbRTT-bMarlPYjWJICO1BoB4yyanJbiqWb2haY4jOWrjOcsXAxk12sjICTjABsa1DuZhDg7_Oy3PMnPQUpYCqd7g/w640-h206/2024-01-31%2013%2019%2004.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcGMO_rLSfP6yw5wqKPPqorEXa6uePfiro2cm5N0wqEejWq6r9zmrT1mebJzeJOmDJGRaYbAqrmQS0-BAm23S2QO7ASRwH12Rp8nd21RoI3oWwD5JgJ8-kJzVl2wNRpqWVhZ3N5SZvVxElDsJ7QjccomlP1lNrvfOU_4y6OFYtTxV7RuBHfovX01m7qM/s1262/2024-01-31%2013%2020%2022.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="447" data-original-width="1262" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRcGMO_rLSfP6yw5wqKPPqorEXa6uePfiro2cm5N0wqEejWq6r9zmrT1mebJzeJOmDJGRaYbAqrmQS0-BAm23S2QO7ASRwH12Rp8nd21RoI3oWwD5JgJ8-kJzVl2wNRpqWVhZ3N5SZvVxElDsJ7QjccomlP1lNrvfOU_4y6OFYtTxV7RuBHfovX01m7qM/w640-h226/2024-01-31%2013%2020%2022.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEide2c9eS-aeWcrfOOCSNUuQURvTgRACrHsAX5LDwa9tssNk01_-nF8vkjSrD-v-IvwtDgBOEltLBWIRseg-i7Ln1esCCR0Vwqg5zh5fHBU0UGY-kD-pfp5IaR3SYWKiPw52cJKG8Ad6zV6J_t42hyphenhyphenhq_CTCnEKXaoRt6dtVby_0MnDZLR2vbp36sf1S1o/s894/2024-01-31%2013%2022%2014.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="394" data-original-width="894" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEide2c9eS-aeWcrfOOCSNUuQURvTgRACrHsAX5LDwa9tssNk01_-nF8vkjSrD-v-IvwtDgBOEltLBWIRseg-i7Ln1esCCR0Vwqg5zh5fHBU0UGY-kD-pfp5IaR3SYWKiPw52cJKG8Ad6zV6J_t42hyphenhyphenhq_CTCnEKXaoRt6dtVby_0MnDZLR2vbp36sf1S1o/w640-h282/2024-01-31%2013%2022%2014.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi57_bIgdhXzs-ZdPSufv9Tg9DNC1gPY_6dfNrtAAc1EBnWONE2uRalrDLb6BKFdiZoYFKpYzlhN-zTBRrRoZLsBiuRihdiWPY33G60t8fjCp4mSqk_HAqXMecO3NdtIk4iDR_WiY10Lbm9EwvhFewq70Jvlz6TSl6MZxCQ6SlNeGcLlE5mvEhrcq6GpxM/s1363/2024-01-31%2012%2047%2047.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="534" data-original-width="1363" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi57_bIgdhXzs-ZdPSufv9Tg9DNC1gPY_6dfNrtAAc1EBnWONE2uRalrDLb6BKFdiZoYFKpYzlhN-zTBRrRoZLsBiuRihdiWPY33G60t8fjCp4mSqk_HAqXMecO3NdtIk4iDR_WiY10Lbm9EwvhFewq70Jvlz6TSl6MZxCQ6SlNeGcLlE5mvEhrcq6GpxM/w640-h250/2024-01-31%2012%2047%2047.png" width="640" /></a></div><br /><b><br /></b></span><p></p><p><span style="font-size: large;"><b>Node-Red程式</b></span></p><p><br /></p><p>[{"id":"1df26672f44f85b4","type":"comment","z":"41b4f910767c89fe","name":"TABLE LEDSTATUS","info":"CREATE TABLE LEDSTATUS (\nid INTEGER,\nSTATUS TEXT,\nDate DATE,\nTime TIME,\nPRIMARY KEY (id)\n);","x":110,"y":40,"wires":[]},{"id":"2217429dcc495c1d","type":"function","z":"41b4f910767c89fe","name":"CREATE DATABASE","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id))\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":120,"wires":[["87753bab743780b6"]]},{"id":"ce6821a4e3477f88","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":6,"width":3,"height":1,"passthru":false,"label":"(L)建立資料庫","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":120,"wires":[["2217429dcc495c1d","f0786a2cfb254c77"]]},{"id":"f0786a2cfb254c77","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":215,"y":80,"wires":[],"l":false},{"id":"9367df3eade4d172","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":1,"width":5,"height":1,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":160,"wires":[["0ff8eda4c787fbee","c1471930d2d555c1","e827f1ca78ea8c25","9466ed42faee22e9"]]},{"id":"8caa06c44a50c269","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":2,"width":5,"height":1,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":70,"y":200,"wires":[["0ff8eda4c787fbee","c1471930d2d555c1","e827f1ca78ea8c25","9466ed42faee22e9"]]},{"id":"0cc9b571fcd74045","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":3,"width":5,"height":1,"passthru":false,"label":"TOGGLE","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"toggle","payloadType":"str","topic":"topic","topicType":"msg","x":80,"y":240,"wires":[["0ff8eda4c787fbee","c1471930d2d555c1","e827f1ca78ea8c25","9466ed42faee22e9"]]},{"id":"a72bb1c208932398","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":4,"width":5,"height":1,"passthru":false,"label":"TIMER","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"timer","payloadType":"str","topic":"topic","topicType":"msg","x":80,"y":280,"wires":[["0ff8eda4c787fbee","c1471930d2d555c1","e827f1ca78ea8c25","9466ed42faee22e9"]]},{"id":"ec04c0588a755752","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":5,"width":5,"height":1,"passthru":false,"label":"FLASH","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"flash","payloadType":"str","topic":"topic","topicType":"msg","x":80,"y":320,"wires":[["c1471930d2d555c1","0ff8eda4c787fbee","e827f1ca78ea8c25","9466ed42faee22e9"]]},{"id":"c1471930d2d555c1","type":"function","z":"41b4f910767c89fe","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myLED = msg.payload;\n\n\nmsg.topic = \"INSERT INTO LEDSTATUS ( STATUS , Date , Time ) VALUES ($myLED, $var_date , $var_time ) \" ;\nmsg.payload = [myLED, var_date , var_time ]\nreturn msg;\n\n\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":260,"wires":[["ba1700a943b1bd1b"]]},{"id":"0ff8eda4c787fbee","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":235,"y":220,"wires":[],"l":false},{"id":"ba1700a943b1bd1b","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":460,"y":260,"wires":[["9b1382a03c037549","c99597aa945f9ef9"]]},{"id":"6e907e9ca9da5039","type":"debug","z":"41b4f910767c89fe","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":120,"wires":[]},{"id":"9b1382a03c037549","type":"debug","z":"41b4f910767c89fe","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":670,"y":260,"wires":[]},{"id":"431f902cc11d9e41","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":8,"width":6,"height":1,"passthru":false,"label":"(L)檢視資料庫資料","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":420,"wires":[["c99597aa945f9ef9","6195eb71c46ac3fa"]]},{"id":"c99597aa945f9ef9","type":"function","z":"41b4f910767c89fe","name":"檢視資料","func":"//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":420,"wires":[["b6e20dd58822d956"]]},{"id":"e8b2de47058199f6","type":"ui_table","z":"41b4f910767c89fe","group":"b0c194b692c58c9c","name":"LED 資料庫","order":1,"width":8,"height":14,"columns":[],"outputs":0,"cts":false,"x":790,"y":420,"wires":[]},{"id":"b6e20dd58822d956","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":500,"y":420,"wires":[["e8b2de47058199f6"]]},{"id":"d192743b813cb3aa","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":5,"width":3,"height":1,"passthru":false,"label":"(L)刪除資料庫 ","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"刪除資料庫 ","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":660,"wires":[["106fe02f4b567352","0232d1d03f74ba0f"]]},{"id":"e3e691a9b6f1fce4","type":"function","z":"41b4f910767c89fe","name":"DROP DATABASE","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"DROP TABLE LEDSTATUS\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":500,"y":600,"wires":[["0ac15eb28214b6b7"]]},{"id":"0ac15eb28214b6b7","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":720,"y":520,"wires":[["9e29d6efb208526e"]]},{"id":"eee0e0562add3a05","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":4,"width":3,"height":1,"passthru":false,"label":"(L)刪除所有資料 ","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"刪除所有資料 ","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":560,"wires":[["0232d1d03f74ba0f","d22fecfb8e37f6b0"]]},{"id":"8c4a79912036e006","type":"function","z":"41b4f910767c89fe","name":"DELETE ALL DATA","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"DELETE from LEDSTATUS\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":370,"y":500,"wires":[["0ac15eb28214b6b7"]]},{"id":"106fe02f4b567352","type":"ui_toast","z":"41b4f910767c89fe","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":290,"y":660,"wires":[["3f8e6d780163b2d8"]]},{"id":"3f8e6d780163b2d8","type":"function","z":"41b4f910767c89fe","name":"function 86","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":660,"wires":[["e3e691a9b6f1fce4"],[]]},{"id":"0232d1d03f74ba0f","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":225,"y":600,"wires":[],"l":false},{"id":"d22fecfb8e37f6b0","type":"ui_toast","z":"41b4f910767c89fe","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":310,"y":560,"wires":[["30d4f57b5808a46c"]]},{"id":"30d4f57b5808a46c","type":"function","z":"41b4f910767c89fe","name":"function 87","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":470,"y":560,"wires":[["8c4a79912036e006"],[]]},{"id":"6195eb71c46ac3fa","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":175,"y":460,"wires":[],"l":false},{"id":"951f65c5730323f3","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":1,"width":3,"height":1,"passthru":false,"label":"(L)查詢一筆資料","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"查詢一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":720,"wires":[["0232d1d03f74ba0f","61b61726368812e2"]]},{"id":"6a752e8e7869da47","type":"function","z":"41b4f910767c89fe","name":"查詢一筆資料","func":"//\nvar id = msg.payload.id;\nvar s=global.get(\"SEL1\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==1)\n{\n temp =\"SELECT * FROM LEDSTATUS\";\n temp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n}\nmsg.topic=temp;\nglobal.set(\"SEL1\",0);\n\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":640,"y":720,"wires":[["ddd93148d6429320"]]},{"id":"ddd93148d6429320","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":700,"y":640,"wires":[["e8b2de47058199f6"]]},{"id":"9e9a5b3281790118","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":2,"width":3,"height":1,"passthru":false,"label":"(L)刪除一筆資料","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"刪除一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":780,"wires":[["e29f31c15cade7c8","f7762f80529020e6"]]},{"id":"e29f31c15cade7c8","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"b0c194b692c58c9c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":235,"y":820,"wires":[],"l":false},{"id":"d2653e92fbc79b15","type":"ui_form","z":"41b4f910767c89fe","name":"","label":"(L)輸入id","group":"9bc6b410904f7720","order":1,"width":0,"height":0,"options":[{"label":"ID","value":"id","type":"number","required":true,"rows":null}],"formValue":{"id":""},"payload":"","submit":"Submit","cancel":"Cancle","topic":"Form","topicType":"str","splitLayout":false,"className":"","x":500,"y":780,"wires":[["6a752e8e7869da47","ed7a959cfa88e9ee","76e3d76c4101918d"]]},{"id":"ed7a959cfa88e9ee","type":"function","z":"41b4f910767c89fe","name":"刪除一筆資料","func":"//\nvar id = msg.payload.id;\nvar s=global.get(\"SEL2\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==2)\n{\n temp =\"DELETE FROM LEDSTATUS\";\n temp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n}\n\nmsg.topic=temp;\nglobal.set(\"SEL2\",0)\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":660,"y":780,"wires":[["d38a29130e4169af","23844a072264ee4c"]]},{"id":"9e29d6efb208526e","type":"link out","z":"41b4f910767c89fe","name":"link out 46","mode":"link","links":["750899d4bab2211f"],"x":855,"y":520,"wires":[]},{"id":"750899d4bab2211f","type":"link in","z":"41b4f910767c89fe","name":"link in 42","links":["9e29d6efb208526e"],"x":235,"y":460,"wires":[["c99597aa945f9ef9"]]},{"id":"d38a29130e4169af","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":900,"y":780,"wires":[["9e29d6efb208526e"]]},{"id":"e0d610a9833ca3b2","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":3,"width":3,"height":1,"passthru":false,"label":"(L)更正一筆資料","tooltip":"","color":"","bgcolor":"green","className":"","icon":"","payload":"更正一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":860,"wires":[["e29f31c15cade7c8","f466e53bfb6d1cd6"]]},{"id":"f0e90c00060177cb","type":"comment","z":"41b4f910767c89fe","name":"UPDATE查詢的WHERE","info":"UPDATE查詢的WHERE子句的基本語法如下:\n\nUPDATE table_name\nSET column1 = value1, column2 = value2...., columnN = valueN\nWHERE [condition];","x":120,"y":900,"wires":[]},{"id":"4eae369fb77657d4","type":"function","z":"41b4f910767c89fe","name":"更正一筆資料","func":"//\nvar id = global.get(\"ID\");\nvar status = msg.payload.Status;\nvar date = msg.payload.date;\nvar time = msg.payload.time;\n\nvar s=global.get(\"SEL3\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==3)\n{\n temp =\"update LEDSTATUS set \";\n temp=temp+\" STATUS= '\" + status +\"'\";\n temp=temp+\" , Date= '\" + date +\"'\";\n temp=temp+\" , Time= '\" + time +\"'\";\n temp=temp+\" WHERE id=\" + id;\n \n //msg.topic = \"update LEDSTATUS set ( id , STATUS , Date , Time ) VALUES ($id, $status , $date , $time ) \" ;\n //msg.payload = [id,status,date,time]\n}\nmsg.topic=temp;\n\nreturn msg;\n\n//msg.topic = \"INSERT INTO LEDSTATUS ( STATUS , Date , Time ) VALUES ($myLED, $var_date , $var_time ) \" ;\n//msg.payload = [myLED, var_date , var_time ]\n\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":760,"y":900,"wires":[["d38a29130e4169af","6f62af9b2b328d2a"]]},{"id":"61b61726368812e2","type":"function","z":"41b4f910767c89fe","name":"function flow set1","func":"var s1=1;\nglobal.set(\"SEL1\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":720,"wires":[["d2653e92fbc79b15"]]},{"id":"f7762f80529020e6","type":"function","z":"41b4f910767c89fe","name":"function flow set2","func":"var s1=2;\nglobal.set(\"SEL2\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":780,"wires":[["d2653e92fbc79b15"]]},{"id":"f466e53bfb6d1cd6","type":"function","z":"41b4f910767c89fe","name":"function flow set3","func":"var s1=3;\nglobal.set(\"SEL3\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":860,"wires":[["d2653e92fbc79b15"]]},{"id":"ceb3b8b8242a0449","type":"ui_form","z":"41b4f910767c89fe","name":"","label":"(L)更正欄位","group":"e7c2632dca7fe97d","order":7,"width":6,"height":1,"options":[{"label":"STATUS","value":"Status","type":"text","required":true,"rows":null},{"label":"DATE","value":"date","type":"text","required":true,"rows":null},{"label":"TIME","value":"time","type":"text","required":true,"rows":null}],"formValue":{"Status":"","date":"","time":""},"payload":"","submit":"Submit","cancel":"Cancle","topic":"Form","topicType":"str","splitLayout":false,"className":"","x":590,"y":900,"wires":[["4eae369fb77657d4"]]},{"id":"23844a072264ee4c","type":"debug","z":"41b4f910767c89fe","name":"debug 228","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"topic","targetType":"msg","statusVal":"","statusType":"auto","x":870,"y":740,"wires":[]},{"id":"76e3d76c4101918d","type":"function","z":"41b4f910767c89fe","name":"Store ID資料","func":"//\nvar id = msg.payload.id;\nglobal.set(\"ID\",id)\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":840,"wires":[["ceb3b8b8242a0449","4ae99af7403816ef"]]},{"id":"4ae99af7403816ef","type":"function","z":"41b4f910767c89fe","name":"查詢一筆資料","func":"//\nvar id = global.get(\"ID\");\nmsg.topic=\"\";\nvar temp=\"\";\ntemp =\"SELECT * FROM LEDSTATUS\";\ntemp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n\nmsg.topic=temp;\n\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":840,"wires":[["ddd93148d6429320"]]},{"id":"6f62af9b2b328d2a","type":"debug","z":"41b4f910767c89fe","name":"debug 229","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"topic","targetType":"msg","statusVal":"","statusType":"auto","x":950,"y":900,"wires":[]},{"id":"f5bcda37ccbf881e","type":"comment","z":"41b4f910767c89fe","name":"資料庫位置 C:\\Users\\User\\.node-red\\EX2_1.db","info":"","x":420,"y":40,"wires":[]},{"id":"02fe1bbf929e0f65","type":"mqtt in","z":"41b4f910767c89fe","name":"LED status ","topic":"alex9ufo/esp32/led_status","qos":"2","datatype":"utf8","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":80,"y":1020,"wires":[["5bcbf70cb4867542"]]},{"id":"5bcbf70cb4867542","type":"function","z":"41b4f910767c89fe","name":"function ","func":"msg.payload=\" ---ESP32回來資料---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":260,"y":1020,"wires":[["77c19993f3653948","6b3efba4ba7ecfcb","3da3266b340854f1"]]},{"id":"77c19993f3653948","type":"function","z":"41b4f910767c89fe","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":450,"y":1020,"wires":[["d3242c14d28159cd"]]},{"id":"d3242c14d28159cd","type":"http request","z":"41b4f910767c89fe","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":620,"y":1020,"wires":[["509f2646937f873e"]]},{"id":"509f2646937f873e","type":"debug","z":"41b4f910767c89fe","name":"debug 230","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":790,"y":1020,"wires":[]},{"id":"c63a387fa7c18e1a","type":"comment","z":"41b4f910767c89fe","name":"Line Notify Message ","info":"","x":470,"y":980,"wires":[]},{"id":"e827f1ca78ea8c25","type":"mqtt out","z":"41b4f910767c89fe","name":"Control LED","topic":"alex9ufo/esp32/led","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":290,"y":160,"wires":[]},{"id":"40af326b1d1a01c5","type":"comment","z":"41b4f910767c89fe","name":"alex9ufo/esp32/led","info":"","x":350,"y":200,"wires":[]},{"id":"9466ed42faee22e9","type":"ui_text","z":"41b4f910767c89fe","group":"0487352be5053bfa","order":6,"width":5,"height":1,"name":"","label":"(L)發行到MQTT的資料 : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":330,"y":300,"wires":[]},{"id":"3da3266b340854f1","type":"ui_text","z":"41b4f910767c89fe","group":"0487352be5053bfa","order":7,"width":5,"height":1,"name":"","label":"(L)訂閱MQTT的資料 : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":480,"y":1100,"wires":[]},{"id":"9be2e5a6dcd3f150","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"b0c194b692c58c9c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":"","x":620,"y":1060,"wires":[]},{"id":"6b3efba4ba7ecfcb","type":"delay","z":"41b4f910767c89fe","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":440,"y":1060,"wires":[["9be2e5a6dcd3f150"]]},{"id":"fb6515a4ee731e0e","type":"comment","z":"41b4f910767c89fe","name":"TABLE RFIDtable","info":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","x":1200,"y":40,"wires":[]},{"id":"718398f192a85fd5","type":"comment","z":"41b4f910767c89fe","name":"資料庫位置 C:\\Users\\User\\.node-red\\EX2_3RFID.db","info":"","x":1310,"y":80,"wires":[]},{"id":"3ace6e0491e7e5fc","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":14,"width":6,"height":1,"passthru":false,"label":"建立資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":1190,"y":160,"wires":[["8db1a3e5dec7225f","b58b92c38ee4b88a"]]},{"id":"c1d3a810d10370ce","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":15,"width":6,"height":1,"passthru":false,"label":"檢視資料庫資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":1200,"y":600,"wires":[["473241d8156c7b34","309700b2a99ff7a8","9801d4426dcd105a"]]},{"id":"8f47231d580e841e","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":12,"width":3,"height":1,"passthru":false,"label":"刪除所有資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除所有資料","payloadType":"str","topic":"topic","topicType":"msg","x":1200,"y":860,"wires":[["25c3a227e72512ca","a7c06c81e81d19fd"]]},{"id":"8db1a3e5dec7225f","type":"function","z":"41b4f910767c89fe","name":"CREATE DATABASE","func":"\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1380,"y":160,"wires":[["d0e9c238b0d0d58b"]]},{"id":"381ca230a3d88c06","type":"debug","z":"41b4f910767c89fe","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1990,"y":200,"wires":[]},{"id":"ce41f5e91d2d0cb6","type":"function","z":"41b4f910767c89fe","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myRFID = flow.get('uid_temp');\n\n\nmsg.topic = \"INSERT INTO RFIDtable ( uidname , currentdate, currenttime ) VALUES ($myRFID, $var_date , $var_time ) \" ;\nmsg.payload = [myRFID, var_date , var_time ]\nreturn msg;\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1560,"y":240,"wires":[["444868658020454e","030d26d0f38c2cea"]]},{"id":"bcfb1b613a807615","type":"function","z":"41b4f910767c89fe","name":"刪除所有資料","func":"//DELETE from RFIDtable\nmsg.topic = \"DELETE from RFIDtable\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1660,"y":880,"wires":[["b358995020a01ac7"]]},{"id":"97933d63e80cd260","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":10,"width":3,"height":1,"passthru":false,"label":"刪除資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":1190,"y":960,"wires":[["99a8394d2ff46a49","cba4394c46eb3321"]]},{"id":"f8a95a8f429b74b8","type":"function","z":"41b4f910767c89fe","name":"刪除資料庫","func":"//DROP TABLE RFIDtable\nmsg.topic = \"DROP TABLE RFIDtable\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1690,"y":960,"wires":[["80c7ad8656604af2"]]},{"id":"5283bd0e802bc796","type":"debug","z":"41b4f910767c89fe","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1990,"y":940,"wires":[]},{"id":"9801d4426dcd105a","type":"function","z":"41b4f910767c89fe","name":"檢視資料","func":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n\n//SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1840,"y":600,"wires":[["44366554919536d0","1068cb1de6b3570e"]]},{"id":"02dceb2af69bce95","type":"function","z":"41b4f910767c89fe","name":"SELECT ALL","func":"var del_idtemp=msg.payload;\nflow.set(\"idtemp\", del_idtemp);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1410,"y":800,"wires":[["81e97ca11a0c5df6"]]},{"id":"f4a8410392a5f2a9","type":"function","z":"41b4f910767c89fe","name":"確認 刪除","func":"var del_id = flow.get(\"idtemp\");\n\n\nmsg.topic = \"DELETE FROM RFIDtable WHERE id= ($del_id) \" ;\nmsg.payload = [del_id]\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1640,"y":740,"wires":[["54b4e21709fe4a24"]]},{"id":"9b7dd8e9b9026f9b","type":"ui_numeric","z":"41b4f910767c89fe","name":"","label":"刪除的database_id","tooltip":"","group":"9bc6b410904f7720","order":4,"width":5,"height":1,"wrap":true,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":"1","max":"1000","step":1,"className":"","x":1210,"y":800,"wires":[["02dceb2af69bce95"]]},{"id":"3dd4e0ca9fca2328","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":11,"width":3,"height":1,"passthru":false,"label":"刪除一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":1200,"y":660,"wires":[["473241d8156c7b34","3bd53583c67a8bf7"]]},{"id":"81e97ca11a0c5df6","type":"debug","z":"41b4f910767c89fe","name":"debug 231","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1590,"y":800,"wires":[]},{"id":"89e45e9fe56b3b2e","type":"mqtt in","z":"41b4f910767c89fe","name":"新增 RFID","topic":"alex9ufo/esp32/RFID","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":1180,"y":240,"wires":[["82c014984d8f3c2f","be255c2203fbcb03"]]},{"id":"446eedfa9db82a0f","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1640,"y":400,"wires":[]},{"id":"50f84f4e09e0a606","type":"function","z":"41b4f910767c89fe","name":"function ","func":"var temp= msg.payload;\nmsg.payload= \"新增一筆資料\" + temp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1460,"y":320,"wires":[["446eedfa9db82a0f","38740cf4c86d3e8f","8cab418991e66fb4"]]},{"id":"473241d8156c7b34","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1400,"y":640,"wires":[]},{"id":"b58b92c38ee4b88a","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1340,"y":120,"wires":[]},{"id":"6b4194facbcb44b7","type":"function","z":"41b4f910767c89fe","name":"比對 function","func":"//SELECT trackid,name FROM \ttracks WHERE name LIKE 'Wild%'\n//Query\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n//msg.topic = \"DELETE FROM RFIDtable WHERE id= ($del_id) \" ;\n\nvar query_uid = flow.get(\"uidtemp\");\nmsg.topic = \"SELECT id,uidname , currentdate,currenttime FROM RFIDtable WHERE uidname LIKE ($query_uid) \";\nmsg.payload = [query_uid]\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1430,"y":1040,"wires":[["f463a8efe8a86076"]]},{"id":"8262b5e0a7322c46","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":13,"width":3,"height":1,"passthru":false,"label":"比對資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"比對資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":1190,"y":1040,"wires":[["6b4194facbcb44b7","99a8394d2ff46a49","56ef5df3a51dffd6"]]},{"id":"096c65eb842945be","type":"function","z":"41b4f910767c89fe","name":"SELECT ALL","func":"var query_uidtemp=msg.payload;\nflow.set(\"uidtemp\", query_uidtemp);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1650,"y":440,"wires":[["a43c4525b879822d","33dc3daf2b9840fe"]]},{"id":"489197761d536c02","type":"ui_text_input","z":"41b4f910767c89fe","name":"","label":"手動查詢資料的uidname","tooltip":"","group":"9bc6b410904f7720","order":3,"width":5,"height":1,"passthru":true,"mode":"text","delay":300,"topic":"topic","sendOnBlur":true,"className":"","topicType":"msg","x":1430,"y":500,"wires":[["096c65eb842945be"]]},{"id":"939bdbbcab54ede1","type":"function","z":"41b4f910767c89fe","name":"function ","func":"var query=msg.payload;\n\nif (query== '1' )\n msg.payload='Query';\nelse\n msg.payload='NotQuery';\n\nflow.set(\"query_temp\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1640,"y":1460,"wires":[["2da05eb9bb42a954","9ecd3819a30aa873"]]},{"id":"2033c3c13e3907c9","type":"ui_switch","z":"41b4f910767c89fe","name":"","label":"新增模式 /自動比對模式 ","tooltip":"","group":"0487352be5053bfa","order":9,"width":5,"height":1,"passthru":true,"decouple":"false","topic":"s1","topicType":"str","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","animate":false,"className":"","x":1370,"y":1460,"wires":[["939bdbbcab54ede1","c5d4b1070976d640","33094d651e63a3b9"]]},{"id":"2da05eb9bb42a954","type":"debug","z":"41b4f910767c89fe","name":"debug 232","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1790,"y":1440,"wires":[]},{"id":"acf3dfeb9069ff15","type":"switch","z":"41b4f910767c89fe","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Create","vt":"str"},{"t":"eq","v":"Query","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":1230,"y":360,"wires":[["ce41f5e91d2d0cb6","50f84f4e09e0a606"],["1d280c0310f54321"]]},{"id":"82c014984d8f3c2f","type":"function","z":"41b4f910767c89fe","name":"Query or Insert ","func":"var query = flow.get(\"query_temp\");\n\nflow.set(\"uid_temp\", msg.payload);\n\nif (query==='NotQuery')\n msg.payload='Create'\nelse\n msg.payload='Query'\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1340,"y":240,"wires":[["acf3dfeb9069ff15"]]},{"id":"9ecd3819a30aa873","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Google US English","always":true,"x":1780,"y":1480,"wires":[]},{"id":"a43c4525b879822d","type":"debug","z":"41b4f910767c89fe","name":"debug 233","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1850,"y":460,"wires":[]},{"id":"33dc3daf2b9840fe","type":"ui_text","z":"41b4f910767c89fe","group":"0487352be5053bfa","order":13,"width":5,"height":2,"name":"","label":"RFID的uid","format":"{{msg.payload}}","layout":"row-left","className":"","x":1850,"y":360,"wires":[]},{"id":"7a2bec3260e95960","type":"function","z":"41b4f910767c89fe","name":"function ","func":"//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n\n//msg.topic = \"INSERT INTO RFIDtable ( uidname , currentdate, currenttime ) VALUES ($myRFID, $var_date , $var_time ) \" ;\n//msg.payload = [myRFID, var_date , var_time ]\n//return msg;\n\n\nvar tmp=msg.payload;\nmsg.topic = \"select count( * ) as 總共有幾筆資料 from RFIDtable where uidname=($tmp)\";\nmsg.payload=[tmp];\nreturn msg;\n\n// select count( * ) as 總共有幾筆資料 from Customers where address='Japan'","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1520,"y":1180,"wires":[["edc52a9f4129adc5"]]},{"id":"b9c04bb5d89da57e","type":"function","z":"41b4f910767c89fe","name":"function ","func":"var num=msg.payload[0].總共有幾筆資料;\nmsg.payload=num;\nreturn msg; \n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1800,"y":1180,"wires":[["8bca32233160bfea","65532790a9d4db9e"]]},{"id":"6e044a502b8e43d5","type":"ui_text","z":"41b4f910767c89fe","group":"0487352be5053bfa","order":12,"width":5,"height":1,"name":"","label":"查詢結果","format":"<font face='arial'><font size=3><font color={{fcolor}}>{{msg.payload}}","layout":"row-left","className":"","x":2140,"y":1240,"wires":[]},{"id":"22af289c2874566e","type":"ui_text","z":"41b4f910767c89fe","group":"0487352be5053bfa","order":11,"width":5,"height":1,"name":"","label":"查詢結果:筆數","format":"<font face='arial'><font size=6><font color={{fcolor}}>{{msg.payload}}","layout":"row-left","className":"","x":2160,"y":1180,"wires":[]},{"id":"f40e6501a8833bd9","type":"mqtt in","z":"41b4f910767c89fe","name":"","topic":"alex9ufo/esp32/Starting","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":1220,"y":1300,"wires":[["e0ecdc79566c5bb5","1fad857520e8fe5f"]]},{"id":"e0ecdc79566c5bb5","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Google US English","always":false,"x":1420,"y":1340,"wires":[]},{"id":"8bca32233160bfea","type":"change","z":"41b4f910767c89fe","name":"","rules":[{"t":"set","p":"fcolor","pt":"msg","to":"red","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1980,"y":1180,"wires":[["22af289c2874566e"]]},{"id":"60e58b9c401654e7","type":"change","z":"41b4f910767c89fe","name":"","rules":[{"t":"set","p":"fcolor","pt":"msg","to":"red","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1980,"y":1240,"wires":[["6e044a502b8e43d5"]]},{"id":"56ef5df3a51dffd6","type":"function","z":"41b4f910767c89fe","name":"function","func":"\nvar a= flow.get(\"uidtemp\");\nmsg.payload=a;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1380,"y":1180,"wires":[["7a2bec3260e95960"]]},{"id":"bfe901410b219927","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":2140,"y":1280,"wires":[]},{"id":"58f1559efc0fdfc5","type":"delay","z":"41b4f910767c89fe","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":1980,"y":1280,"wires":[["bfe901410b219927"]]},{"id":"65532790a9d4db9e","type":"function","z":"41b4f910767c89fe","name":"function ","func":"var n=msg.payload;\n\nif (n>0)\n msg.payload='RFID符合';\nelse\n msg.payload='RFID錯誤';\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1800,"y":1240,"wires":[["58f1559efc0fdfc5","60e58b9c401654e7","a485ecf426757725"]]},{"id":"38740cf4c86d3e8f","type":"function","z":"41b4f910767c89fe","name":"取得UID號碼","func":"var myRFID = flow.get('uid_temp');\nmsg.payload=myRFID;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1650,"y":360,"wires":[["33dc3daf2b9840fe"]]},{"id":"99a8394d2ff46a49","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1340,"y":1000,"wires":[]},{"id":"25c3a227e72512ca","type":"ui_audio","z":"41b4f910767c89fe","name":"","group":"2aec78ed5dc0600c","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1400,"y":840,"wires":[]},{"id":"444868658020454e","type":"function","z":"41b4f910767c89fe","name":"增加 日期 時間","func":"var ms1=msg.payload[0];\nvar ms2=msg.payload[1];\nvar ms3=msg.payload[2];\n\nmsg.payload=\"新增一筆:\"+ms1+\", 日期: \"+ms2+\", 時間:\"+ms3;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1720,"y":280,"wires":[["d0339b6976ac8c44"]]},{"id":"d0339b6976ac8c44","type":"function","z":"41b4f910767c89fe","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":1890,"y":280,"wires":[["44d606080409fa25"]]},{"id":"44d606080409fa25","type":"http request","z":"41b4f910767c89fe","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":2040,"y":280,"wires":[["54ac4d90e3eb2827"]]},{"id":"54ac4d90e3eb2827","type":"debug","z":"41b4f910767c89fe","name":"debug 234","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":2190,"y":280,"wires":[]},{"id":"5733c83f86933541","type":"comment","z":"41b4f910767c89fe","name":"Line Notify Message ","info":"","x":1910,"y":320,"wires":[]},{"id":"98ff3f6b2d09e70d","type":"function","z":"41b4f910767c89fe","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1970,"y":1380,"wires":[["94c9e9772fb6ccbf"]]},{"id":"87b950831ca240c0","type":"comment","z":"41b4f910767c89fe","name":"Line Notify Message ","info":"","x":2130,"y":1440,"wires":[]},{"id":"94c9e9772fb6ccbf","type":"http request","z":"41b4f910767c89fe","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":2120,"y":1380,"wires":[["5b9b41490b7dd68f"]]},{"id":"5b9b41490b7dd68f","type":"debug","z":"41b4f910767c89fe","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":2250,"y":1380,"wires":[]},{"id":"a485ecf426757725","type":"function","z":"41b4f910767c89fe","name":"function","func":"\nvar a= flow.get(\"uidtemp\");\nvar b=msg.payload;\nmsg.payload=a+\"--->\"+b;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1800,"y":1340,"wires":[["98ff3f6b2d09e70d","407d716762fd9c9e"]]},{"id":"dac6dad23eddcfb5","type":"ui_table","z":"41b4f910767c89fe","group":"2aec78ed5dc0600c","name":"","order":1,"width":8,"height":14,"columns":[],"outputs":0,"cts":false,"x":2150,"y":600,"wires":[]},{"id":"5f0f6f171556d6ea","type":"inject","z":"41b4f910767c89fe","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"0","payloadType":"str","x":1190,"y":1460,"wires":[["2033c3c13e3907c9"]]},{"id":"c5d4b1070976d640","type":"change","z":"41b4f910767c89fe","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"查詢模式","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"0","fromt":"num","to":"新增模式","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":1460,"y":1600,"wires":[["8f0ace2e671643e8","d89f594e65553e67"]]},{"id":"8f0ace2e671643e8","type":"ui_text_input","z":"41b4f910767c89fe","name":"","label":"State:","tooltip":"","group":"0487352be5053bfa","order":10,"width":5,"height":1,"passthru":true,"mode":"text","delay":300,"topic":"","sendOnBlur":true,"className":"","topicType":"str","x":1630,"y":1620,"wires":[[]]},{"id":"33094d651e63a3b9","type":"debug","z":"41b4f910767c89fe","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1630,"y":1520,"wires":[]},{"id":"ca461cd117e75734","type":"inject","z":"41b4f910767c89fe","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":1580,"y":80,"wires":[["3c1b476cc61e1cdb"]]},{"id":"3c1b476cc61e1cdb","type":"function","z":"41b4f910767c89fe","name":"id SET ","func":"var del_idtemp=1;\nflow.set(\"idtemp\", del_idtemp);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1710,"y":80,"wires":[[]]},{"id":"1fad857520e8fe5f","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1450,"y":1300,"wires":[]},{"id":"d89f594e65553e67","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1670,"y":1580,"wires":[]},{"id":"a7c06c81e81d19fd","type":"ui_toast","z":"41b4f910767c89fe","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":1310,"y":900,"wires":[["6571dfb9b238d248"]]},{"id":"6571dfb9b238d248","type":"function","z":"41b4f910767c89fe","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1480,"y":900,"wires":[["bcfb1b613a807615"],[]]},{"id":"cba4394c46eb3321","type":"ui_toast","z":"41b4f910767c89fe","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":1350,"y":960,"wires":[["b28f406e9c01d9e4"]]},{"id":"b28f406e9c01d9e4","type":"function","z":"41b4f910767c89fe","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1520,"y":960,"wires":[["f8a95a8f429b74b8"],[]]},{"id":"3bd53583c67a8bf7","type":"ui_toast","z":"41b4f910767c89fe","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":1310,"y":740,"wires":[["f54fc64f90922613"]]},{"id":"f54fc64f90922613","type":"function","z":"41b4f910767c89fe","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1480,"y":740,"wires":[["f4a8410392a5f2a9"],[]]},{"id":"a4d19d120e05dc33","type":"link out","z":"41b4f910767c89fe","name":"link out 47","mode":"link","links":["6b58ae7f57402aa5"],"x":1945,"y":880,"wires":[]},{"id":"6b58ae7f57402aa5","type":"link in","z":"41b4f910767c89fe","name":"link in 43","links":["a4d19d120e05dc33","88a482f099e394c9","70487decb239f3c4","ce142a687d0b79f1"],"x":1735,"y":560,"wires":[["9801d4426dcd105a"]]},{"id":"88a482f099e394c9","type":"link out","z":"41b4f910767c89fe","name":"link out 48","mode":"link","links":["6b58ae7f57402aa5"],"x":1955,"y":240,"wires":[]},{"id":"5768783b47a7eeba","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":2170,"y":1340,"wires":[]},{"id":"309700b2a99ff7a8","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1410,"y":560,"wires":[]},{"id":"8cab418991e66fb4","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1670,"y":320,"wires":[]},{"id":"af48ef899c7c430d","type":"debug","z":"41b4f910767c89fe","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1830,"y":160,"wires":[]},{"id":"1d280c0310f54321","type":"function","z":"41b4f910767c89fe","name":"get UID","func":"\nvar a= flow.get(\"uid_temp\");\nmsg.payload=a;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1420,"y":440,"wires":[["096c65eb842945be","39fee7d7a4037b19"]]},{"id":"407d716762fd9c9e","type":"function","z":"41b4f910767c89fe","name":"function","func":"var b=msg.payload;\nmsg.payload=\"Line Notify --->\"+b;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":1980,"y":1340,"wires":[["5768783b47a7eeba"]]},{"id":"be255c2203fbcb03","type":"ui_toast","z":"41b4f910767c89fe","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1350,"y":200,"wires":[]},{"id":"39fee7d7a4037b19","type":"link out","z":"41b4f910767c89fe","name":"link out 49","mode":"link","links":["954f2a0914336742"],"x":1515,"y":420,"wires":[]},{"id":"954f2a0914336742","type":"link in","z":"41b4f910767c89fe","name":"link in 44","links":["39fee7d7a4037b19"],"x":1235,"y":1220,"wires":[["56ef5df3a51dffd6"]]},{"id":"1be5d9b672fa39cf","type":"comment","z":"41b4f910767c89fe","name":"Set Default Value","info":"","x":1580,"y":40,"wires":[]},{"id":"d0e9c238b0d0d58b","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1640,"y":160,"wires":[["af48ef899c7c430d"]]},{"id":"030d26d0f38c2cea","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1820,"y":240,"wires":[["88a482f099e394c9","381ca230a3d88c06"]]},{"id":"44366554919536d0","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1980,"y":600,"wires":[["dac6dad23eddcfb5"]]},{"id":"54b4e21709fe4a24","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1780,"y":740,"wires":[["9801d4426dcd105a"]]},{"id":"b358995020a01ac7","type":"sqlite","z":"41b4f910767c89fe","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1820,"y":880,"wires":[["5283bd0e802bc796","a4d19d120e05dc33"]]},{"id":"80c7ad8656604af2","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1840,"y":960,"wires":[["5283bd0e802bc796"]]},{"id":"f463a8efe8a86076","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1820,"y":1040,"wires":[["dac6dad23eddcfb5"]]},{"id":"1068cb1de6b3570e","type":"debug","z":"41b4f910767c89fe","name":"debug 235","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1990,"y":560,"wires":[]},{"id":"edc52a9f4129adc5","type":"sqlite","z":"41b4f910767c89fe","mydb":"0357a00ce0e2564b","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":1660,"y":1180,"wires":[["b9c04bb5d89da57e"]]},{"id":"87753bab743780b6","type":"sqlite","z":"41b4f910767c89fe","mydb":"a4c15c0e38a27cca","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":500,"y":120,"wires":[["6e907e9ca9da5039"]]},{"id":"53e08c5e7a0fa712","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"0487352be5053bfa","order":8,"width":0,"height":0,"passthru":false,"label":"RFID區","tooltip":"","color":"","bgcolor":"fuchsia","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":860,"y":140,"wires":[[]]},{"id":"d22361e93845f13b","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"e7c2632dca7fe97d","order":9,"width":6,"height":1,"passthru":false,"label":"RFID區","tooltip":"","color":"","bgcolor":"fuchsia","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":860,"y":180,"wires":[[]]},{"id":"9e6097b1322d9e80","type":"ui_button","z":"41b4f910767c89fe","name":"","group":"9bc6b410904f7720","order":2,"width":5,"height":1,"passthru":false,"label":"RFID區","tooltip":"","color":"","bgcolor":"fuchsia","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":860,"y":220,"wires":[[]]},{"id":"e7c2632dca7fe97d","type":"ui_group","name":"資料庫控制區","tab":"a70850925ff05e71","order":4,"disp":true,"width":6,"collapse":false,"className":""},{"id":"11d8514.a44dcaf","type":"ui_group","name":"新增","tab":"8f1ada5fa4df30e2","order":2,"disp":true,"width":6,"collapse":false,"className":""},{"id":"0487352be5053bfa","type":"ui_group","name":"LED輸入控制區","tab":"a70850925ff05e71","order":1,"disp":true,"width":5,"collapse":false,"className":""},{"id":"a4c15c0e38a27cca","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\EX2_3_LED.db","mode":"RWC"},{"id":"b0c194b692c58c9c","type":"ui_group","name":"LED資料顯示區","tab":"a70850925ff05e71","order":2,"disp":true,"width":8,"collapse":false,"className":""},{"id":"9bc6b410904f7720","type":"ui_group","name":"單筆控制輸入區","tab":"a70850925ff05e71","order":5,"disp":true,"width":5,"collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"2aec78ed5dc0600c","type":"ui_group","name":"RFID資料顯示區","tab":"a70850925ff05e71","order":3,"disp":true,"width":8,"collapse":false,"className":""},{"id":"0357a00ce0e2564b","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\EX2_3RFID.db","mode":"RWC"},{"id":"f87c808cc786ae80","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\EX2_2.db","mode":"RWC"},{"id":"a70850925ff05e71","type":"ui_tab","name":"作業2-3","icon":"dashboard","order":91,"disabled":false,"hidden":false},{"id":"8f1ada5fa4df30e2","type":"ui_tab","name":"作業2-1","icon":"dashboard","disabled":false,"hidden":false}]</p><p><span style="font-size: large;"><span style="background-color: #1f272a; color: #c586c0; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">#include</span><span style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"> </span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">"arduino_secrets.h"</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">組譯錯誤代表</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">缺少 </span></span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">arduino_secrets.h 檔案</span></p><p><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">裡面內容有2行</span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_SSID ""</span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"></span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_PASS ""</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"></span></p><p><span style="font-size: large;"></span></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s401/2024-02-05%2014%2024%2035.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="401" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s320/2024-02-05%2014%2024%2035.png" style="cursor: move;" width="320" /></a></span></div><p><span style="font-size: large;"><b>Arduino程式</b></span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #7f8c8d;">//GPIO 2 D1 Build in LED</span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">13</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><div><span style="color: #7f8c8d;">// WiFi SSID password , SSID 和密碼進行Wi-Fi 設定 </span></div><div><span style="color: #7f8c8d;">//const char ssid[] = "alex9ufo"; // Enter your Wi-Fi name</span></div><div><span style="color: #7f8c8d;">//const char pass[] = "alex9981"; // Enter Wi-Fi password</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic2 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led_status"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/esp32/RFID"</span>;</div><br /><div><span style="color: #7f8c8d;">//const char *topic1 = "alex9ufo/RFID/read";</span></div><div><span style="color: #7f8c8d;">//const char *topic3 = "alex9ufo/RFID/back";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/esp32/Starting"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//布林代數 LED狀態 是否連上網路ESP32 ready ?</span></div><div><span style="color: #0ca1a6;">bool</span> ledState = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> atwork = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Flash = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Timer = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div>String LEDjson = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">int</span> Count= <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String message=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> message += (<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(message);</div><div> <span style="color: #f39c12;">message</span>.<span style="color: #f39c12;">trim</span>();</div><div> <span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (Topic==<span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>) {</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"on"</span>) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn on the LED</span></div><div> ledState = <span style="color: #7fcbcd;">true</span>;<span style="color: #7f8c8d;"> //ledState = ture HIGH</span></div><div><span style="color: #7f8c8d;"> //設定 各個 旗號</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"ON"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"off"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //ledState = false LOW</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"OFF"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"flash"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">true</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"FLASH"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"timer"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">true</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TIMER"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> Count= <span style="color: #7fcbcd;">11</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"toggle"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));<span style="color: #7f8c8d;"> // Turn the LED toggle</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TOGGLE"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"-----------------------"</span>);</div><div> } </div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//判斷 旗號Flash , Timer 是否為真</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">LED_Message</span>() {</div><div> <span style="color: #c586c0;">if</span> (Flash){</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> ledState = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #c586c0;">else</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }<span style="color: #7f8c8d;"> //(Flash)</span></div><br /><div> <span style="color: #c586c0;">if</span> (Timer) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED,LOW );</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> ledState = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #c586c0;">else</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><br /><div> Count=Count-<span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #c586c0;">if</span> (Count == <span style="color: #7fcbcd;">0</span> ){</div><div> Timer=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);</div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }</div><div> }<span style="color: #7f8c8d;"> //(Timer)</span></div><br /><div><span style="color: #7f8c8d;"> ////判斷 旗號 Send 是否為真 回傳MQTT訊息到MQTT Broker </span></div><div> <span style="color: #c586c0;">if</span> (Send) {</div><div><span style="color: #7f8c8d;"> // Convert JSON string to character array</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Publish message: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><div> </div><div><span style="color: #7f8c8d;"> // Publish JSON character array to MQTT topic</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic2, <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);<span style="color: #7f8c8d;"> //LED Status</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(LEDjson);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //處理過後 旗號 Send為假</span></div><div> }</div><br /><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED initially</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"ESP32 Start working....!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topic1);</div><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(topic1, subscribeQos);</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div><span style="color: #7f8c8d;"> //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><div> </div><div> <span style="color: #f39c12;">LED_Message</span>();</div><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> //json = json +(" Card UID: ");</span></div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div><span style="color: #7f8c8d;"> //json = json +(" , PICC type: ");</span></div><div><span style="color: #7f8c8d;"> //json = json + Type;</span></div><div><span style="color: #7f8c8d;"> //json.trim();</span></div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));</span></div><div> </div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div><p><br /></p><p><br /></p><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-29853900527871523132024-01-30T20:28:00.000-08:002024-02-18T04:26:06.769-08:002024作業2-2 ESP32 + RFID + (Node-Red & SQLite ) + Line Notify <p><span style="font-size: x-large;">2024作業2-2 ESP32 + <span style="background-color: #01ffff;">RFID</span> + (Node-Red & SQLite ) + Line Notify </span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqWZk7ZueEz0JLZoQ9MwPrfWYOs1LXuyyWbq6cmtnOdmnbHQj2uWZULC0QHykJNz-DvERf5GgaHDJe0cE00ow9hxrPYo6O-xZurksds4ZPjaX8M-V5MvURgrEzVMAycEmax6lsj4yz7S-Y920TvtjrUR7Hfdv9QaNaHyNVqF8J8hvZ6Tp3KGWWZsEonw4/s1097/2024-02-18%2020%2021%2041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="1097" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgqWZk7ZueEz0JLZoQ9MwPrfWYOs1LXuyyWbq6cmtnOdmnbHQj2uWZULC0QHykJNz-DvERf5GgaHDJe0cE00ow9hxrPYo6O-xZurksds4ZPjaX8M-V5MvURgrEzVMAycEmax6lsj4yz7S-Y920TvtjrUR7Hfdv9QaNaHyNVqF8J8hvZ6Tp3KGWWZsEonw4/w640-h452/2024-02-18%2020%2021%2041.png" width="640" /></a></div><br /><span style="font-size: x-large;"><br /></span><p></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="color: red; font-size: x-large;">(Arduino , Node-Red 程式中的 alex9ufo 全部改成自己的英文命名)</span></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><img border="0" data-original-height="464" data-original-width="1347" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDPi4LbtIgTz6ZHgYdjlc87dh127rUIR3CqclndSHh8yV0aeIRI_SpW0toKwxANjlfKdqbFzh2L2LAFZXHVMlddzSOD5lFbQEMvpW0Ms6WKBhhBz8u43OUdhI_4L3YgEdVL1dpRoYr9EFCIuz9fmMQqeL7VhthqG9auIv_kyrlfY5QM7xXUeDJYbQm3Tw/w640-h220/2023-11-12%2019%2050%2042.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; color: #33aaff; font-size: large; padding: 5px; position: relative; text-align: center;" width="640" /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><br /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><br /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><br /></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><img border="0" data-original-height="721" data-original-width="1045" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNhUKFMNimKxYzKIbHqjBvDE2udYNkChBjsfyzi5N9IgNsMND_vUx1vb4hWSezuPb_2Aly05W_V1SXEbHxCPJWFoO12jSVFAPeYTAkKhyphenhyphenu__G04HQJZC5ku8HYjS2k9-Lko40t8jHMM5ma1TwZMwSnI1VlqpEXLxYT_1mlg1Cl-qAT4v6uvzgDhGUyk48/w640-h442/2023-11-12%2021%2021%2047.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; color: #33aaff; padding: 5px; position: relative; text-align: center;" width="640" /></p><div><br /></div><p><br /></p><p><span style="font-size: xxx-large;">使用Node-Red 第一次一定要先建立資料庫 不然看不到資料</span></p><p><span style="font-size: xxx-large;">資料庫的目錄位置查sqlite節點</span></p><p><span style="font-size: xxx-large;">每一個</span><span style="font-size: xxx-large;">sqlite節點都要修改成自己的目錄, alex9ufo MQTT Topic都要修改成自己的命名</span></p><p><span style="font-size: xxx-large;"> </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKkiZBm5m6iS1V6r0j9wqw1BtMyyjcYPGeV3gtKJp_jaTx6-WfnoMmDImYWMH8WOxZYTqj4OSeR8UQdMif_xnwfS3vBjCCI9p6DBKHieImqPbUv06hOixM88lrBu5jzq2U0lIrNy7mgCyz3fcx1hq_0BxnmPC51OHpo2r_t1xiSuIkMGmbWZ_jMRwjWcw/s1102/2024-01-31%2012%2051%2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="539" data-original-width="1102" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKkiZBm5m6iS1V6r0j9wqw1BtMyyjcYPGeV3gtKJp_jaTx6-WfnoMmDImYWMH8WOxZYTqj4OSeR8UQdMif_xnwfS3vBjCCI9p6DBKHieImqPbUv06hOixM88lrBu5jzq2U0lIrNy7mgCyz3fcx1hq_0BxnmPC51OHpo2r_t1xiSuIkMGmbWZ_jMRwjWcw/w640-h314/2024-01-31%2012%2051%2013.png" width="640" /></a></div><br /><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrmcvSGhzrRLh51meHPGPq-a2uAopDLLIfl-0tK35Ue2HugTNYI6od25q2YdO8Yr3CA0YOAvQIBPe5wAr3G6hkN9m22YTaA9s-kXY4ItkUNWutw-e4dJpJX4A0-PhYJuO5ZrfPFa9Xn5Jboo35ubmfbsA-FCHMJLeJ30q8SFzF-63Co4BQhWegsL_UbGw/s860/2024-01-31%2012%2044%2003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="371" data-original-width="860" height="276" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrmcvSGhzrRLh51meHPGPq-a2uAopDLLIfl-0tK35Ue2HugTNYI6od25q2YdO8Yr3CA0YOAvQIBPe5wAr3G6hkN9m22YTaA9s-kXY4ItkUNWutw-e4dJpJX4A0-PhYJuO5ZrfPFa9Xn5Jboo35ubmfbsA-FCHMJLeJ30q8SFzF-63Co4BQhWegsL_UbGw/w640-h276/2024-01-31%2012%2044%2003.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1pTZVLTUJZTRe_2NYRwP9M6P5wHQ_jU2OtoQDDAyAeXIzDXDSqxaIqrNpek97MBTcl9j8FRWCNJjHwlQ0i2eJ0DwaftRS4ze60AYqdjpfp3rvh4pvOs9JoeL4-Pq39O2GdtozzrHTLs04KGpaX3HY2zufG6hSEFRbkT3f5v7HWCZXEXzpvfDyn0BWwYA/s1363/2024-01-31%2012%2047%2047.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="534" data-original-width="1363" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1pTZVLTUJZTRe_2NYRwP9M6P5wHQ_jU2OtoQDDAyAeXIzDXDSqxaIqrNpek97MBTcl9j8FRWCNJjHwlQ0i2eJ0DwaftRS4ze60AYqdjpfp3rvh4pvOs9JoeL4-Pq39O2GdtozzrHTLs04KGpaX3HY2zufG6hSEFRbkT3f5v7HWCZXEXzpvfDyn0BWwYA/w640-h250/2024-01-31%2012%2047%2047.png" width="640" /></a></div><div><br /></div><div><b><span style="font-size: large;">arduino_secrets.h 裡面的內容</span></b></div><div><br /></div><div><div><span style="background-color: #04ff00; font-size: x-large;">#define SECRET_SSID ""</span></div><div><span style="background-color: #04ff00; font-size: x-large;">#define SECRET_PASS ""</span></div></div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSHIptIyYREzqNfJEbBBTvjnxkMYs_MdkM0im7Qhaq5aWessE7DCb80MemX9sztijUwGsQy3wN5fFQNt-X6YwMsiNYfpPTqpqrN60wjKgd8GNyF-5ZIf3eMCiWIysEwV6mcD6s-GvycVNpVxdDOTFs5iCtW3gRdRCvDnqFbEJ2vJ6n83X4uRp9rctKIlU/s314/2024-01-30%2011%2007%2052.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="314" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSHIptIyYREzqNfJEbBBTvjnxkMYs_MdkM0im7Qhaq5aWessE7DCb80MemX9sztijUwGsQy3wN5fFQNt-X6YwMsiNYfpPTqpqrN60wjKgd8GNyF-5ZIf3eMCiWIysEwV6mcD6s-GvycVNpVxdDOTFs5iCtW3gRdRCvDnqFbEJ2vJ6n83X4uRp9rctKIlU/w640-h373/2024-01-30%2011%2007%2052.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepN3GoKGCWtYNeRwEmz1L7EFSI0IvoSdAIRKEuo3nIkHu6bbTkkpEmL78orXVZyI9Dbmyr4P3cW6FgSVdVyFTkQFB3cJxQhN7vSCHpI2NUV0fd9iMqqASJxqgZOXbUxCOiSzqVjcboweT5VO72zpY1HH6dv1_eANocBlvmSsIdrcJ7BLMKyRKp7o-EgQ/s341/2024-01-31%2012%2054%2022.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="138" data-original-width="341" height="261" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgepN3GoKGCWtYNeRwEmz1L7EFSI0IvoSdAIRKEuo3nIkHu6bbTkkpEmL78orXVZyI9Dbmyr4P3cW6FgSVdVyFTkQFB3cJxQhN7vSCHpI2NUV0fd9iMqqASJxqgZOXbUxCOiSzqVjcboweT5VO72zpY1HH6dv1_eANocBlvmSsIdrcJ7BLMKyRKp7o-EgQ/w640-h261/2024-01-31%2012%2054%2022.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b>Arduino 程式需要 <span style="text-align: left;">arduino_secrets.h </span></b></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b><span style="text-align: left;"><br /></span></b></span></div><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><span style="font-size: large;"><b>Node-Red 程式畫面</b></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyXxXkv9mNZIGfKIFWsAD1K61L17wUP3ZKLWmUU6ORIkHTYXNap1LWOgQFvbXZg5JLUsktEtfq_Lw6aNPDYB3pDApnLOS-wiqUCET4rZ4NDyM7nHFYXot4V3rYUOQC1us4Qz5Jfk94bnLM13twz71-D90nj1WSzxNVbFNlAgDucCFBfag2jK2EUnhEFCk/s1316/2024-01-31%2012%2020%2009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="761" data-original-width="1316" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyXxXkv9mNZIGfKIFWsAD1K61L17wUP3ZKLWmUU6ORIkHTYXNap1LWOgQFvbXZg5JLUsktEtfq_Lw6aNPDYB3pDApnLOS-wiqUCET4rZ4NDyM7nHFYXot4V3rYUOQC1us4Qz5Jfk94bnLM13twz71-D90nj1WSzxNVbFNlAgDucCFBfag2jK2EUnhEFCk/w640-h370/2024-01-31%2012%2020%2009.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM5v220LEr8tOqlPhwdlLbWOKZGYxZZxRt6Mrf9h07DXtRaJCFgihFwDUMMeIQ3Z740BG3yQR413BVdLc_iuWVYOES8O9zcVgWbnz8itdttQkxSKUCWN7oSkqbyk03dGtCDs1H8_DqiQ5Jq_gS-HB_R0FdPmYXO540dSnjH4uyw-FU6GKRBRa3H_LBxEQ/s1252/2024-01-31%2012%2020%2058.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="1252" height="370" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjM5v220LEr8tOqlPhwdlLbWOKZGYxZZxRt6Mrf9h07DXtRaJCFgihFwDUMMeIQ3Z740BG3yQR413BVdLc_iuWVYOES8O9zcVgWbnz8itdttQkxSKUCWN7oSkqbyk03dGtCDs1H8_DqiQ5Jq_gS-HB_R0FdPmYXO540dSnjH4uyw-FU6GKRBRa3H_LBxEQ/w640-h370/2024-01-31%2012%2020%2058.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5FWWoDtY3Tmwd2TJY-D7KSaLBUbIrnCBGO2CRFp8WZ1LgnWqN5pL9NS7CxkvDDzb0kC7NnwXMujq3Bc5GlaaLHs37jhcNgphk7F9QmtSkYN0Z0pqIoP6MeKt_nviELfQ-ziKpQX6KbKoBp2BAQ3LUIA_-lKzfRbLO3xS53yAW9Xin7warVnFdPA6o5k/s1357/2024-01-31%2012%2021%2016.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="721" data-original-width="1357" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiM5FWWoDtY3Tmwd2TJY-D7KSaLBUbIrnCBGO2CRFp8WZ1LgnWqN5pL9NS7CxkvDDzb0kC7NnwXMujq3Bc5GlaaLHs37jhcNgphk7F9QmtSkYN0Z0pqIoP6MeKt_nviELfQ-ziKpQX6KbKoBp2BAQ3LUIA_-lKzfRbLO3xS53yAW9Xin7warVnFdPA6o5k/w640-h340/2024-01-31%2012%2021%2016.png" width="640" /></a></div><div><br /></div><span style="font-size: large;"><b>新增 RFID 卡片 UID</b></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnpQ714hrGAj0tVSs-PoP3FLAng9-8KJkIhvutZVp5hPQbGClZEOlBuB-ybf12z1B1kGj0ZYPsjsp_leOC4ez8IIMXbgraJxxoWnFBRieAx_Q0mM0RbYQlwlHe2EkdeTtf_9oFqVu0C1N7U-H_GeDAKbOz8yLo86FouQ2pqakNjguIrqTI5rDGoyeLlc/s1737/2024-01-31%2012%2021%2034.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="845" data-original-width="1737" height="312" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgcnpQ714hrGAj0tVSs-PoP3FLAng9-8KJkIhvutZVp5hPQbGClZEOlBuB-ybf12z1B1kGj0ZYPsjsp_leOC4ez8IIMXbgraJxxoWnFBRieAx_Q0mM0RbYQlwlHe2EkdeTtf_9oFqVu0C1N7U-H_GeDAKbOz8yLo86FouQ2pqakNjguIrqTI5rDGoyeLlc/w640-h312/2024-01-31%2012%2021%2034.png" width="640" /></a></div><div><br /></div><span style="font-size: large;"><b>刪除一筆資料</b></span><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCgYEns3Vk9TjYfyy_co4qABKDFIw7qlLC1wcznXebYot-AIjulvHIhytnShqj3iXBHp6EPS0kMdvPOQYPPR1D3bkNRzntfTCd9NpbIKRvFfvBLkhiKMw0hziaZKwA-39oQGpWc0HNNkFPAliu6-JNFi3k40BFHjQ3gnwbsaDloLXuczPoBLZa9Tk43s/s1492/2024-01-31%2012%2023%2052.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="670" data-original-width="1492" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWCgYEns3Vk9TjYfyy_co4qABKDFIw7qlLC1wcznXebYot-AIjulvHIhytnShqj3iXBHp6EPS0kMdvPOQYPPR1D3bkNRzntfTCd9NpbIKRvFfvBLkhiKMw0hziaZKwA-39oQGpWc0HNNkFPAliu6-JNFi3k40BFHjQ3gnwbsaDloLXuczPoBLZa9Tk43s/w640-h288/2024-01-31%2012%2023%2052.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZHm_SZZ9MTwmjEO7neGMqsurG5WjME2Mf3_znXJ2kolIuDgMB1f0A2-saZETon9igVjGaP7qIWWZh0PPmi9UAaILlIscCX0sqLJ3103T9i82GmttixE2IRSCNfmKscMsOTEwPOCM3ICCRliONWxe8fjvIk77Jf5xp-uZeWIpLq4PgZQQq6e22Sag0E3o/s1435/2024-01-31%2012%2025%2005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="631" data-original-width="1435" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZHm_SZZ9MTwmjEO7neGMqsurG5WjME2Mf3_znXJ2kolIuDgMB1f0A2-saZETon9igVjGaP7qIWWZh0PPmi9UAaILlIscCX0sqLJ3103T9i82GmttixE2IRSCNfmKscMsOTEwPOCM3ICCRliONWxe8fjvIk77Jf5xp-uZeWIpLq4PgZQQq6e22Sag0E3o/w640-h282/2024-01-31%2012%2025%2005.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh39_plrXI5urDh8EcryBt9UK5GYX1mJDVoj6IYqGwAa86rDiMGtWEorZGqczfCCq73C8OJVaZDTzwyVC0XF9_dLez82ilJxheCIcV3XNHPDXKwa-ESnthT0fx1xOY-cTpAapUNkSzgMRGOe3aiYqs9KeXQYBSezo2TMpXkQBiKMcOVJ9O0F-_j0p3ywzo/s1492/2024-01-31%2012%2025%2051.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="666" data-original-width="1492" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh39_plrXI5urDh8EcryBt9UK5GYX1mJDVoj6IYqGwAa86rDiMGtWEorZGqczfCCq73C8OJVaZDTzwyVC0XF9_dLez82ilJxheCIcV3XNHPDXKwa-ESnthT0fx1xOY-cTpAapUNkSzgMRGOe3aiYqs9KeXQYBSezo2TMpXkQBiKMcOVJ9O0F-_j0p3ywzo/w640-h286/2024-01-31%2012%2025%2051.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b>刪除資料庫 與 建立資料庫</b></span></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCHVIkWB7hMwc5gu8Z2CXZv6pht4yyu24ezBsKdoThSNah55q6U3baSrCHPRb4VCrH7TAU3AMWHJlgyBCNxuwhK6hGtA83gMsP9QiGl-NirArXNWGS97Ft8Of9OsxgaJssGxArMa0E_gKKa0l0U7YHOPYCWSkPvKdZd5PubnF-ynJaMPPxwyhAFbn0QuY/s1464/2024-01-31%2012%2026%2054.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1464" height="302" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCHVIkWB7hMwc5gu8Z2CXZv6pht4yyu24ezBsKdoThSNah55q6U3baSrCHPRb4VCrH7TAU3AMWHJlgyBCNxuwhK6hGtA83gMsP9QiGl-NirArXNWGS97Ft8Of9OsxgaJssGxArMa0E_gKKa0l0U7YHOPYCWSkPvKdZd5PubnF-ynJaMPPxwyhAFbn0QuY/w640-h302/2024-01-31%2012%2026%2054.png" width="640" /></a></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="font-size: large;"><b>自動比對模式 (查詢模式)</b></span></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE38C7-Pzr0v1qZ-_EOkpQT-ZPbte0TmN9k4VrLvruSj-4s0kmuUXSZK7Pe3UDY652vKOFOP4U0HhYik4vJxtxePgHG3sHHZMOZYQJqp-NxPnwtWwn0KUnXxKTXT7U4NcL7quAW9vqbkfxn6kIVF_ru8NxMsOk_GLFkfhO9IfmWc43PJvzgrpp7pb0q9E/s1510/2024-01-31%2012%2031%2058.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="655" data-original-width="1510" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE38C7-Pzr0v1qZ-_EOkpQT-ZPbte0TmN9k4VrLvruSj-4s0kmuUXSZK7Pe3UDY652vKOFOP4U0HhYik4vJxtxePgHG3sHHZMOZYQJqp-NxPnwtWwn0KUnXxKTXT7U4NcL7quAW9vqbkfxn6kIVF_ru8NxMsOk_GLFkfhO9IfmWc43PJvzgrpp7pb0q9E/w640-h278/2024-01-31%2012%2031%2058.png" width="640" /></a></div><div><br /></div><div><b style="font-size: x-large;">手動比對模式 (查詢模式)</b></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvvPuJtEAQxvGf1NSpn_dI7eXV86d1n-PwyKSp6X8p9socsUekqhMl0mCNoDmCpXGwFAymtkGdZiEsNna8OUDwo_oe_VP9PCdkPX_wpG_UmeUs_3N00NyJcu0bEdhxgmiBwUbLZkV5xXcZzWXCQIb3DXactlBfZj8WieSQfzzRDYy6bBK0VOqIUV2arM/s1515/2024-01-31%2012%2034%2022.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="629" data-original-width="1515" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVvvPuJtEAQxvGf1NSpn_dI7eXV86d1n-PwyKSp6X8p9socsUekqhMl0mCNoDmCpXGwFAymtkGdZiEsNna8OUDwo_oe_VP9PCdkPX_wpG_UmeUs_3N00NyJcu0bEdhxgmiBwUbLZkV5xXcZzWXCQIb3DXactlBfZj8WieSQfzzRDYy6bBK0VOqIUV2arM/w640-h266/2024-01-31%2012%2034%2022.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF_F0ya4i5ZRHhupbPG_6Dgvvabi85l7EtyPvoY2lkFRFggZYDnpqYU_ZzUxGbkHIU187BOtcPCxPYDXdSkSax-z9lGtjuvjbLuoxPkK8ZU7usSpX5Qh3_kwN58zAeNAVYrK3nBRaRhuwso_BxyYS9VETIcgMGMHQm9uQsMzjwnQ3IpYOLOVBPN3OAagE/s1477/2024-01-31%2012%2036%2005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="1477" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF_F0ya4i5ZRHhupbPG_6Dgvvabi85l7EtyPvoY2lkFRFggZYDnpqYU_ZzUxGbkHIU187BOtcPCxPYDXdSkSax-z9lGtjuvjbLuoxPkK8ZU7usSpX5Qh3_kwN58zAeNAVYrK3nBRaRhuwso_BxyYS9VETIcgMGMHQm9uQsMzjwnQ3IpYOLOVBPN3OAagE/w640-h272/2024-01-31%2012%2036%2005.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><br /></div><b style="font-size: x-large;">自動比對模式 / </b><b style="font-size: x-large;">手動比對模式 ==>查不到資料</b><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOFccNDZc_ZM6WsxlKru1gyMPMBKDh1rKCWTs878yj7ExACUea8yrL2TrYB8hOZK3NfDZeghKHYQmH7UqY_JD31N4usGiK5XOC0vnETvFZmUN7InuRvcNZ5OBHH2_SRlKPyu8HwSVW1H0Ica5HfD-3_bV0ALw0jeSTZrj5xluWaTPSr893p5FsgCnNRUE/s1122/2024-01-31%2012%2039%2004.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="581" data-original-width="1122" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOFccNDZc_ZM6WsxlKru1gyMPMBKDh1rKCWTs878yj7ExACUea8yrL2TrYB8hOZK3NfDZeghKHYQmH7UqY_JD31N4usGiK5XOC0vnETvFZmUN7InuRvcNZ5OBHH2_SRlKPyu8HwSVW1H0Ica5HfD-3_bV0ALw0jeSTZrj5xluWaTPSr893p5FsgCnNRUE/w640-h332/2024-01-31%2012%2039%2004.png" width="640" /></a></div><br /><p><span style="font-size: large;"><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;">Line Notify (</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: #04ff00; color: #222222;">需改成自己的權杖</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;"> </span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: #01ffff; color: #222222;">不然我會收到各位的Line)</span></span></p><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEbQJp6Ss42qDogoh6tLeJirfECnu4jwFlU4f4Tt6MPfcYq1O0fIPntxilfW9ctyGn9iaYZ5g8ZuCBNuKYj6nj0ZS3WOUMYttEg6T8kag7zShiiHAgqKvIblANNnhzMXXHJgUIfKjg50yLYm1fbPZGKarKqOskwtaskzBdf-3vC09uX1rJ2RVs70s0zQ/s994/2023-11-13%2020%2034%2059.png" style="color: #33aaff; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="994" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEbQJp6Ss42qDogoh6tLeJirfECnu4jwFlU4f4Tt6MPfcYq1O0fIPntxilfW9ctyGn9iaYZ5g8ZuCBNuKYj6nj0ZS3WOUMYttEg6T8kag7zShiiHAgqKvIblANNnhzMXXHJgUIfKjg50yLYm1fbPZGKarKqOskwtaskzBdf-3vC09uX1rJ2RVs70s0zQ/w640-h206/2023-11-13%2020%2034%2059.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: x-large;">msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer </span><span style="background-color: #01ffff; font-size: x-large;">A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB</span><span style="font-size: x-large;">'};</span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><div class="separator" style="clear: both;">msg.payload = {"message":msg.payload};</div><div class="separator" style="clear: both;">return msg;</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">(Set Line API function內)</div><div class="separator" style="clear: both;">我的權杖<span style="background-color: #01ffff;">A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB</span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;">需改成自己的權杖</span></div></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><div class="separator" style="clear: both;"><span style="font-size: large;"><div class="separator" style="clear: both;"><br /></div></span></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyGQERgYzhXwBMqy_bLTUzzDMTV1xl3NeSWhUsHTl41yMw8B8orshfDWn6I99Zk_7VJnnGwTS3TE4wD5LRlzeQuNyoTycJ8ZXLw2T5QhyhTTShZZOhNfg-1R2S_QvIkL0hpWL0HPtFJxXlYD748voyzLkiXtit4DTbKhDv8IhxHQ4z-P1cV7M3neXZ4gs/s2400/Screenshot_20231113_203030_LINE.jpg" style="color: #33aaff; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyGQERgYzhXwBMqy_bLTUzzDMTV1xl3NeSWhUsHTl41yMw8B8orshfDWn6I99Zk_7VJnnGwTS3TE4wD5LRlzeQuNyoTycJ8ZXLw2T5QhyhTTShZZOhNfg-1R2S_QvIkL0hpWL0HPtFJxXlYD748voyzLkiXtit4DTbKhDv8IhxHQ4z-P1cV7M3neXZ4gs/w288-h640/Screenshot_20231113_203030_LINE.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="288" /></a></div></div></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: large;">Line 權杖的取得</span></div><p><span style="font-size: large;"><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;"><a href="https://alex9ufoexploer.blogspot.com/2020/10/line-notify.html" style="color: #2288bb; text-decoration-line: none;">https://alex9ufoexploer.blogspot.com/2020/10/line-notify.html</a></span></span></p><p><span style="font-size: large;"><b>Node-Red 程式</b></span></p><p>[{"id":"c8fa9aba54ec59a7","type":"comment","z":"e580410840f1977a","name":"TABLE RFIDtable","info":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","x":100,"y":40,"wires":[]},{"id":"2352757b9ad7a413","type":"comment","z":"e580410840f1977a","name":"資料庫位置 C:\\Users\\User\\.node-red\\EX2_1.db","info":"","x":200,"y":80,"wires":[]},{"id":"17d9e4c5934e31b7","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":5,"width":3,"height":1,"passthru":false,"label":"建立資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":90,"y":160,"wires":[["cec32cf0368a6160","428e36df65bc5d0a"]]},{"id":"3d724916bd0ceba4","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":7,"width":6,"height":2,"passthru":false,"label":"檢視資料庫資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":600,"wires":[["e8144d7ac36b0990","0dd203ac6f82de67","9546f9f1689f5abd"]]},{"id":"27863b993a3145c5","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":4,"width":3,"height":1,"passthru":false,"label":"刪除所有資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除所有資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":860,"wires":[["f61681d67b6dfe6a","e95a213155e2ae2a"]]},{"id":"cec32cf0368a6160","type":"function","z":"e580410840f1977a","name":"CREATE DATABASE","func":"\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\nmsg.topic = \"CREATE TABLE RFIDtable(id INTEGER PRIMARY KEY AUTOINCREMENT, uidname TEXT, currentdate DATE, currenttime TIME)\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":160,"wires":[["2e873ff2215f1627"]]},{"id":"7c7b9e7101f99220","type":"debug","z":"e580410840f1977a","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":200,"wires":[]},{"id":"e910514ceb4ba7e4","type":"function","z":"e580410840f1977a","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myRFID = flow.get('uid_temp');\n\n\nmsg.topic = \"INSERT INTO RFIDtable ( uidname , currentdate, currenttime ) VALUES ($myRFID, $var_date , $var_time ) \" ;\nmsg.payload = [myRFID, var_date , var_time ]\nreturn msg;\n\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":460,"y":240,"wires":[["aceead06c5b4ca45","86a04561d5732afb"]]},{"id":"348309a2df49a7ef","type":"function","z":"e580410840f1977a","name":"刪除所有資料","func":"//DELETE from RFIDtable\nmsg.topic = \"DELETE from RFIDtable\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":560,"y":880,"wires":[["e6c4b8d95973acc8"]]},{"id":"833f20c5fc9f52d1","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":3,"width":3,"height":1,"passthru":false,"label":"刪除資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":90,"y":960,"wires":[["1a152f4111ca81fd","fde22b8219ffe519"]]},{"id":"497862d022c85886","type":"function","z":"e580410840f1977a","name":"刪除資料庫","func":"//DROP TABLE RFIDtable\nmsg.topic = \"DROP TABLE RFIDtable\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":960,"wires":[["ac223b4659d0d7a2"]]},{"id":"e89357f8bf99cd44","type":"debug","z":"e580410840f1977a","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":940,"wires":[]},{"id":"9546f9f1689f5abd","type":"function","z":"e580410840f1977a","name":"檢視資料","func":"\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n\n//SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM RFIDtable ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":740,"y":600,"wires":[["8caa729f53e3c29e","db51b6b49c4a1679"]]},{"id":"3d80f359772cdc4d","type":"function","z":"e580410840f1977a","name":"SELECT ALL","func":"var del_idtemp=msg.payload;\nflow.set(\"idtemp\", del_idtemp);\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":310,"y":800,"wires":[["d5f8a1e57c898a43"]]},{"id":"a1fd876403c87858","type":"function","z":"e580410840f1977a","name":"確認 刪除","func":"var del_id = flow.get(\"idtemp\");\n\n\nmsg.topic = \"DELETE FROM RFIDtable WHERE id= ($del_id) \" ;\nmsg.payload = [del_id]\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":740,"wires":[["2d75f8fea620282a"]]},{"id":"e4f6b192711dfd88","type":"ui_numeric","z":"e580410840f1977a","name":"","label":"刪除的database_id","tooltip":"","group":"cb0bc005d4b7ba13","order":7,"width":6,"height":1,"wrap":true,"passthru":true,"topic":"topic","topicType":"msg","format":"{{value}}","min":"1","max":"1000","step":1,"className":"","x":110,"y":800,"wires":[["3d80f359772cdc4d"]]},{"id":"4a31b56857469cb3","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":2,"width":3,"height":1,"passthru":false,"label":"刪除一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":660,"wires":[["e8144d7ac36b0990","4c4db109522eac71"]]},{"id":"d5f8a1e57c898a43","type":"debug","z":"e580410840f1977a","name":"debug 220","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":490,"y":800,"wires":[]},{"id":"11c055356daf7399","type":"mqtt in","z":"e580410840f1977a","name":"新增 RFID","topic":"alex9ufo/esp32/RFID","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":80,"y":240,"wires":[["37adfdab4179c6ec","da9dbbae9a283e86"]]},{"id":"8367becc9030c688","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":540,"y":400,"wires":[]},{"id":"7c2bb0d4fded7582","type":"function","z":"e580410840f1977a","name":"function ","func":"var temp= msg.payload;\nmsg.payload= \"新增一筆資料\" + temp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":360,"y":320,"wires":[["8367becc9030c688","9b70f6dff006576b","9a309750a2b99426"]]},{"id":"e8144d7ac36b0990","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":300,"y":640,"wires":[]},{"id":"428e36df65bc5d0a","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":240,"y":120,"wires":[]},{"id":"7096b1af0ab0453a","type":"function","z":"e580410840f1977a","name":"比對 function","func":"//SELECT trackid,name FROM \ttracks WHERE name LIKE 'Wild%'\n//Query\n//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n//msg.topic = \"DELETE FROM RFIDtable WHERE id= ($del_id) \" ;\n\nvar query_uid = flow.get(\"uidtemp\");\nmsg.topic = \"SELECT id,uidname , currentdate,currenttime FROM RFIDtable WHERE uidname LIKE ($query_uid) \";\nmsg.payload = [query_uid]\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":1040,"wires":[["0f892898e5714cfd"]]},{"id":"cc68c73eaae49094","type":"ui_button","z":"e580410840f1977a","name":"","group":"a453c7f575918a4b","order":1,"width":3,"height":1,"passthru":false,"label":"比對資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"比對資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":90,"y":1040,"wires":[["7096b1af0ab0453a","1a152f4111ca81fd","58c96606c91c99d4"]]},{"id":"5ff1d4ea2ba3eb45","type":"function","z":"e580410840f1977a","name":"SELECT ALL","func":"var query_uidtemp=msg.payload;\nflow.set(\"uidtemp\", query_uidtemp);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":440,"wires":[["8beff873e7fdd27c","7dc7477636c7404f"]]},{"id":"5544fea4843e4855","type":"ui_text_input","z":"e580410840f1977a","name":"","label":"手動查詢資料的uidname","tooltip":"","group":"cb0bc005d4b7ba13","order":4,"width":3,"height":1,"passthru":true,"mode":"text","delay":300,"topic":"topic","sendOnBlur":true,"className":"","topicType":"msg","x":330,"y":500,"wires":[["5ff1d4ea2ba3eb45"]]},{"id":"b2fe54510f211974","type":"function","z":"e580410840f1977a","name":"function ","func":"var query=msg.payload;\n\nif (query== '1' )\n msg.payload='Query';\nelse\n msg.payload='NotQuery';\n\nflow.set(\"query_temp\", msg.payload);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":540,"y":1460,"wires":[["6c6b07341575977b","af59cbe0eeea4671"]]},{"id":"8b510792cab8c4c8","type":"ui_switch","z":"e580410840f1977a","name":"","label":"新增模式 /自動比對模式 ","tooltip":"","group":"cb0bc005d4b7ba13","order":1,"width":4,"height":1,"passthru":true,"decouple":"false","topic":"s1","topicType":"str","style":"","onvalue":"1","onvalueType":"str","onicon":"","oncolor":"","offvalue":"0","offvalueType":"str","officon":"","offcolor":"","animate":false,"className":"","x":270,"y":1460,"wires":[["b2fe54510f211974","a334729b99de6386","9a3042cad990b6e4"]]},{"id":"6c6b07341575977b","type":"debug","z":"e580410840f1977a","name":"debug 221","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":690,"y":1440,"wires":[]},{"id":"573df0b38289efb2","type":"switch","z":"e580410840f1977a","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"Create","vt":"str"},{"t":"eq","v":"Query","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":130,"y":360,"wires":[["e910514ceb4ba7e4","7c2bb0d4fded7582"],["e73e704ab4e766ad"]]},{"id":"37adfdab4179c6ec","type":"function","z":"e580410840f1977a","name":"Query or Insert ","func":"var query = flow.get(\"query_temp\");\n\nflow.set(\"uid_temp\", msg.payload);\n\nif (query==='NotQuery')\n msg.payload='Create'\nelse\n msg.payload='Query'\n \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":240,"y":240,"wires":[["573df0b38289efb2"]]},{"id":"af59cbe0eeea4671","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Google US English","always":true,"x":680,"y":1480,"wires":[]},{"id":"8beff873e7fdd27c","type":"debug","z":"e580410840f1977a","name":"debug 222","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":750,"y":460,"wires":[]},{"id":"7dc7477636c7404f","type":"ui_text","z":"e580410840f1977a","group":"cb0bc005d4b7ba13","order":8,"width":6,"height":1,"name":"","label":"自動感應RFID查詢的uid","format":"{{msg.payload}}","layout":"row-left","className":"","x":790,"y":360,"wires":[]},{"id":"eb435a5d96be0c13","type":"function","z":"e580410840f1977a","name":"function ","func":"//CREATE TABLE \"RFIDtable\" (\n//\t\"id\"\tINT NOT NULL,\n// \"uidname\" TEXT,\n// \"currentdate\" DATE, \n// \"currenttime\" TIME\n//\tPRIMARY KEY(\"id\")\n//);\n\n//msg.topic = \"INSERT INTO RFIDtable ( uidname , currentdate, currenttime ) VALUES ($myRFID, $var_date , $var_time ) \" ;\n//msg.payload = [myRFID, var_date , var_time ]\n//return msg;\n\n\nvar tmp=msg.payload;\nmsg.topic = \"select count( * ) as 總共有幾筆資料 from RFIDtable where uidname=($tmp)\";\nmsg.payload=[tmp];\nreturn msg;\n\n// select count( * ) as 總共有幾筆資料 from Customers where address='Japan'","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":1180,"wires":[["f815556e7bd20e4c"]]},{"id":"4ac1e40f5421fd71","type":"function","z":"e580410840f1977a","name":"function ","func":"var num=msg.payload[0].總共有幾筆資料;\nmsg.payload=num;\nreturn msg; \n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":1180,"wires":[["9136307096e69bad","6206a4be4bb20775"]]},{"id":"0fa86f77787f9532","type":"ui_text","z":"e580410840f1977a","group":"cb0bc005d4b7ba13","order":6,"width":3,"height":1,"name":"","label":"查詢結果","format":"<font face='arial'><font size=3><font color={{fcolor}}>{{msg.payload}}","layout":"row-left","className":"","x":1040,"y":1240,"wires":[]},{"id":"cc84c8e5de754878","type":"ui_text","z":"e580410840f1977a","group":"cb0bc005d4b7ba13","order":5,"width":3,"height":1,"name":"","label":"查詢結果:筆數","format":"<font face='arial'><font size=6><font color={{fcolor}}>{{msg.payload}}","layout":"row-left","className":"","x":1060,"y":1180,"wires":[]},{"id":"edced61c20b76390","type":"mqtt in","z":"e580410840f1977a","name":"","topic":"alex9ufo/esp32/Starting","qos":"2","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":120,"y":1300,"wires":[["693ab072c6384c5a","313bba70c138c36a"]]},{"id":"693ab072c6384c5a","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Google US English","always":false,"x":320,"y":1340,"wires":[]},{"id":"9136307096e69bad","type":"change","z":"e580410840f1977a","name":"","rules":[{"t":"set","p":"fcolor","pt":"msg","to":"red","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":880,"y":1180,"wires":[["cc84c8e5de754878"]]},{"id":"069bd252f7e422bd","type":"change","z":"e580410840f1977a","name":"","rules":[{"t":"set","p":"fcolor","pt":"msg","to":"red","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":880,"y":1240,"wires":[["0fa86f77787f9532"]]},{"id":"58c96606c91c99d4","type":"function","z":"e580410840f1977a","name":"function","func":"\nvar a= flow.get(\"uidtemp\");\nmsg.payload=a;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":1180,"wires":[["eb435a5d96be0c13"]]},{"id":"297871396face2a1","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":1040,"y":1280,"wires":[]},{"id":"ceac1b14fad49384","type":"delay","z":"e580410840f1977a","name":"","pauseType":"delay","timeout":"2","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":880,"y":1280,"wires":[["297871396face2a1"]]},{"id":"6206a4be4bb20775","type":"function","z":"e580410840f1977a","name":"function ","func":"var n=msg.payload;\n\nif (n>0)\n msg.payload='RFID符合';\nelse\n msg.payload='RFID錯誤';\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":1240,"wires":[["ceac1b14fad49384","069bd252f7e422bd","b7aa65168b6f133d"]]},{"id":"9b70f6dff006576b","type":"function","z":"e580410840f1977a","name":"取得UID號碼","func":"var myRFID = flow.get('uid_temp');\nmsg.payload=myRFID;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":550,"y":360,"wires":[["7dc7477636c7404f"]]},{"id":"1a152f4111ca81fd","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":240,"y":1000,"wires":[]},{"id":"f61681d67b6dfe6a","type":"ui_audio","z":"e580410840f1977a","name":"","group":"26e583680376a2a5","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":300,"y":840,"wires":[]},{"id":"aceead06c5b4ca45","type":"function","z":"e580410840f1977a","name":"增加 日期 時間","func":"var ms1=msg.payload[0];\nvar ms2=msg.payload[1];\nvar ms3=msg.payload[2];\n\nmsg.payload=\"新增一筆:\"+ms1+\", 日期: \"+ms2+\", 時間:\"+ms3;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":620,"y":280,"wires":[["193dbe1b059eeebb"]]},{"id":"193dbe1b059eeebb","type":"function","z":"e580410840f1977a","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":790,"y":280,"wires":[["c8ba1a37a7d21f76"]]},{"id":"c8ba1a37a7d21f76","type":"http request","z":"e580410840f1977a","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":940,"y":280,"wires":[["4b0f1f7f15c069df"]]},{"id":"4b0f1f7f15c069df","type":"debug","z":"e580410840f1977a","name":"debug 225","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1090,"y":280,"wires":[]},{"id":"4473e94ad686cd24","type":"comment","z":"e580410840f1977a","name":"Line Notify Message ","info":"","x":810,"y":320,"wires":[]},{"id":"45da028e5ff2187b","type":"function","z":"e580410840f1977a","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":870,"y":1380,"wires":[["18fc9ffb4c17305c"]]},{"id":"5981d7ab159d482c","type":"comment","z":"e580410840f1977a","name":"Line Notify Message ","info":"","x":1050,"y":1420,"wires":[]},{"id":"18fc9ffb4c17305c","type":"http request","z":"e580410840f1977a","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":1020,"y":1380,"wires":[["bfbd0054f0f82240"]]},{"id":"bfbd0054f0f82240","type":"debug","z":"e580410840f1977a","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":1150,"y":1380,"wires":[]},{"id":"b7aa65168b6f133d","type":"function","z":"e580410840f1977a","name":"function","func":"\nvar a= flow.get(\"uidtemp\");\nvar b=msg.payload;\nmsg.payload=a+\"--->\"+b;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":700,"y":1340,"wires":[["45da028e5ff2187b","ec7c95943d3205b6"]]},{"id":"b821a2b279a4ae38","type":"ui_table","z":"e580410840f1977a","group":"26e583680376a2a5","name":"","order":1,"width":12,"height":11,"columns":[],"outputs":0,"cts":false,"x":1050,"y":600,"wires":[]},{"id":"70b242b47377c8fb","type":"inject","z":"e580410840f1977a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"0","payloadType":"str","x":90,"y":1460,"wires":[["8b510792cab8c4c8"]]},{"id":"a334729b99de6386","type":"change","z":"e580410840f1977a","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"1","fromt":"num","to":"查詢模式","tot":"str"},{"t":"change","p":"payload","pt":"msg","from":"0","fromt":"num","to":"新增模式","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":360,"y":1600,"wires":[["9f609962e464cb8c","960b814e224e0c5d"]]},{"id":"9f609962e464cb8c","type":"ui_text_input","z":"e580410840f1977a","name":"","label":"State:","tooltip":"","group":"cb0bc005d4b7ba13","order":3,"width":3,"height":1,"passthru":true,"mode":"text","delay":300,"topic":"","sendOnBlur":true,"className":"","topicType":"str","x":530,"y":1620,"wires":[[]]},{"id":"9a3042cad990b6e4","type":"debug","z":"e580410840f1977a","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":530,"y":1520,"wires":[]},{"id":"53e87d564850e3d0","type":"inject","z":"e580410840f1977a","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":480,"y":80,"wires":[["059e64992e70beee"]]},{"id":"059e64992e70beee","type":"function","z":"e580410840f1977a","name":"id SET ","func":"var del_idtemp=1;\nflow.set(\"idtemp\", del_idtemp);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":80,"wires":[[]]},{"id":"313bba70c138c36a","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":350,"y":1300,"wires":[]},{"id":"960b814e224e0c5d","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":570,"y":1580,"wires":[]},{"id":"e95a213155e2ae2a","type":"ui_toast","z":"e580410840f1977a","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":210,"y":900,"wires":[["2cdf9575d5c3ce4d"]]},{"id":"2cdf9575d5c3ce4d","type":"function","z":"e580410840f1977a","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":900,"wires":[["348309a2df49a7ef"],[]]},{"id":"fde22b8219ffe519","type":"ui_toast","z":"e580410840f1977a","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":250,"y":960,"wires":[["5c5e97885157f4b4"]]},{"id":"5c5e97885157f4b4","type":"function","z":"e580410840f1977a","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":420,"y":960,"wires":[["497862d022c85886"],[]]},{"id":"4c4db109522eac71","type":"ui_toast","z":"e580410840f1977a","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":210,"y":740,"wires":[["29635cb1252e1e7b"]]},{"id":"29635cb1252e1e7b","type":"function","z":"e580410840f1977a","name":"OK or Cancel","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":380,"y":740,"wires":[["a1fd876403c87858"],[]]},{"id":"71e3c9e772097c69","type":"link out","z":"e580410840f1977a","name":"link out 41","mode":"link","links":["2b440998c35377bf"],"x":845,"y":880,"wires":[]},{"id":"2b440998c35377bf","type":"link in","z":"e580410840f1977a","name":"link in 39","links":["71e3c9e772097c69","e4de9ca1fd6f1ad2","70487decb239f3c4","ce142a687d0b79f1"],"x":635,"y":560,"wires":[["9546f9f1689f5abd"]]},{"id":"e4de9ca1fd6f1ad2","type":"link out","z":"e580410840f1977a","name":"link out 43","mode":"link","links":["2b440998c35377bf"],"x":855,"y":240,"wires":[]},{"id":"ecdb23d852e3fa7f","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":1070,"y":1340,"wires":[]},{"id":"0dd203ac6f82de67","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":310,"y":560,"wires":[]},{"id":"9a309750a2b99426","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":570,"y":320,"wires":[]},{"id":"136b7f887c7ac8af","type":"debug","z":"e580410840f1977a","name":"debug","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":730,"y":160,"wires":[]},{"id":"e73e704ab4e766ad","type":"function","z":"e580410840f1977a","name":"get UID","func":"\nvar a= flow.get(\"uid_temp\");\nmsg.payload=a;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":440,"wires":[["5ff1d4ea2ba3eb45","330ac65349eea739"]]},{"id":"ec7c95943d3205b6","type":"function","z":"e580410840f1977a","name":"function","func":"var b=msg.payload;\nmsg.payload=\"Line Notify --->\"+b;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":880,"y":1340,"wires":[["ecdb23d852e3fa7f"]]},{"id":"da9dbbae9a283e86","type":"ui_toast","z":"e580410840f1977a","position":"top right","displayTime":"3","highlight":"","sendall":true,"outputs":0,"ok":"OK","cancel":"Cancel","raw":false,"className":"","topic":"","name":"","x":250,"y":200,"wires":[]},{"id":"330ac65349eea739","type":"link out","z":"e580410840f1977a","name":"link out 45","mode":"link","links":["7f20cbcaea30ce95"],"x":415,"y":420,"wires":[]},{"id":"7f20cbcaea30ce95","type":"link in","z":"e580410840f1977a","name":"link in 41","links":["330ac65349eea739"],"x":135,"y":1220,"wires":[["58c96606c91c99d4"]]},{"id":"ca9bc6e8a598b75d","type":"comment","z":"e580410840f1977a","name":"Set Default Value","info":"","x":480,"y":40,"wires":[]},{"id":"2e873ff2215f1627","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":540,"y":160,"wires":[["136b7f887c7ac8af"]]},{"id":"86a04561d5732afb","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":720,"y":240,"wires":[["e4de9ca1fd6f1ad2","7c7b9e7101f99220"]]},{"id":"8caa729f53e3c29e","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":880,"y":600,"wires":[["b821a2b279a4ae38"]]},{"id":"2d75f8fea620282a","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":680,"y":740,"wires":[["9546f9f1689f5abd"]]},{"id":"e6c4b8d95973acc8","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":720,"y":880,"wires":[["e89357f8bf99cd44","71e3c9e772097c69"]]},{"id":"ac223b4659d0d7a2","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":740,"y":960,"wires":[["e89357f8bf99cd44"]]},{"id":"0f892898e5714cfd","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":720,"y":1040,"wires":[["b821a2b279a4ae38"]]},{"id":"db51b6b49c4a1679","type":"debug","z":"e580410840f1977a","name":"debug 227","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":890,"y":560,"wires":[]},{"id":"f815556e7bd20e4c","type":"sqlite","z":"e580410840f1977a","mydb":"f87c808cc786ae80","sqlquery":"msg.topic","sql":"","name":"RFID dB","x":560,"y":1180,"wires":[["4ac1e40f5421fd71"]]},{"id":"a453c7f575918a4b","type":"ui_group","name":"命命區","tab":"3113488b40e7e950","order":1,"disp":true,"width":"6","collapse":false,"className":""},{"id":"cb0bc005d4b7ba13","type":"ui_group","name":"新增或比對","tab":"3113488b40e7e950","order":3,"disp":true,"width":"6","collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"26e583680376a2a5","type":"ui_group","name":"顯示區","tab":"3113488b40e7e950","order":2,"disp":true,"width":12,"collapse":false,"className":""},{"id":"f87c808cc786ae80","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\EX2_2.db","mode":"RWC"},{"id":"3113488b40e7e950","type":"ui_tab","name":"作業2-2","icon":"dashboard","order":90,"disabled":false,"hidden":false}]</p><p><span style="font-size: large;"><span style="background-color: #1f272a; color: #c586c0; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">#include</span><span style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"> </span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">"arduino_secrets.h"</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">組譯錯誤代表</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">缺少 </span></span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">arduino_secrets.h 檔案</span></p><p><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">裡面內容有2行</span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_SSID ""</span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"></span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_PASS ""</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"></span></p><p></p><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s401/2024-02-05%2014%2024%2035.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="401" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s320/2024-02-05%2014%2024%2035.png" style="cursor: move;" width="320" /></a></span></div><p><span style="font-size: large;">Arduino 程式</span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #7f8c8d;">//GPIO 2 D1 Build in LED</span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">13</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><div><span style="color: #7f8c8d;">// WiFi SSID password , SSID 和密碼進行Wi-Fi 設定 </span></div><div><span style="color: #7f8c8d;">//const char ssid[] = "alex9ufo"; // Enter your Wi-Fi name</span></div><div><span style="color: #7f8c8d;">//const char pass[] = "alex9981"; // Enter Wi-Fi password</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic2 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led_status"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/esp32/RFID"</span>;</div><br /><div><span style="color: #7f8c8d;">//const char *topic1 = "alex9ufo/RFID/read";</span></div><div><span style="color: #7f8c8d;">//const char *topic3 = "alex9ufo/RFID/back";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/esp32/Starting"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//布林代數 LED狀態 是否連上網路ESP32 ready ?</span></div><div><span style="color: #0ca1a6;">bool</span> ledState = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> atwork = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Flash = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Timer = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div>String LEDjson = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">int</span> Count= <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String message=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> message += (<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(message);</div><div> <span style="color: #f39c12;">message</span>.<span style="color: #f39c12;">trim</span>();</div><div> <span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (Topic==<span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>) {</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"on"</span>) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn on the LED</span></div><div> ledState = <span style="color: #7fcbcd;">true</span>;<span style="color: #7f8c8d;"> //ledState = ture HIGH</span></div><div><span style="color: #7f8c8d;"> //設定 各個 旗號</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"ON"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"off"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //ledState = false LOW</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"OFF"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"flash"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">true</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"FLASH"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"timer"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">true</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TIMER"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> Count= <span style="color: #7fcbcd;">11</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"toggle"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));<span style="color: #7f8c8d;"> // Turn the LED toggle</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TOGGLE"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"-----------------------"</span>);</div><div> } </div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//判斷 旗號Flash , Timer 是否為真</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">LED_Message</span>() {</div><div> <span style="color: #c586c0;">if</span> (Flash){</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> ledState = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #c586c0;">else</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }<span style="color: #7f8c8d;"> //(Flash)</span></div><br /><div> <span style="color: #c586c0;">if</span> (Timer) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED,LOW );</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> ledState = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #c586c0;">else</span></div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><br /><div> Count=Count-<span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #c586c0;">if</span> (Count == <span style="color: #7fcbcd;">0</span> ){</div><div> Timer=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);</div><div> ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }</div><div> }<span style="color: #7f8c8d;"> //(Timer)</span></div><br /><div><span style="color: #7f8c8d;"> ////判斷 旗號 Send 是否為真 回傳MQTT訊息到MQTT Broker </span></div><div> <span style="color: #c586c0;">if</span> (Send) {</div><div><span style="color: #7f8c8d;"> // Convert JSON string to character array</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Publish message: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><div> </div><div><span style="color: #7f8c8d;"> // Publish JSON character array to MQTT topic</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic2, <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);<span style="color: #7f8c8d;"> //LED Status</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(LEDjson);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //處理過後 旗號 Send為假</span></div><div> }</div><br /><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED initially</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"ESP32 Start working....!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topic1);</div><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(topic1, subscribeQos);</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div><span style="color: #7f8c8d;"> //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><div> </div><div> <span style="color: #f39c12;">LED_Message</span>();</div><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> //json = json +(" Card UID: ");</span></div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div><span style="color: #7f8c8d;"> //json = json +(" , PICC type: ");</span></div><div><span style="color: #7f8c8d;"> //json = json + Type;</span></div><div><span style="color: #7f8c8d;"> //json.trim();</span></div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));</span></div><div> </div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div><p><br /></p><p><br /></p><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-44469148892210455552024-01-30T04:20:00.000-08:002024-02-18T04:24:36.382-08:002024作業2-1 ESP32 + LED + (Node-Red & SQLite ) + Line Notify<p><span style="font-size: x-large;">2024作業2-1 ESP32 + <span style="background-color: #01ffff;">LED</span> + (Node-Red & SQLite ) + Line Notify </span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi3Rjah0kq3VrJWOa944YxlHlTnKxCulMZouhcU_GVWUjUzP1rJGmEAxxjeWCIag961thEskXqjAUfnhv36Vo2v0cJIDcDL6dwUUJTcIGVX4OKxsW2Y1sQng7SAh72CwfxrIuhcqTOFetV3EAv90OTa7TV-FU81a2PJo41PB7ENi1b-vpy0JFPfYvJ8K8/s1097/2024-02-18%2020%2021%2041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="1097" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgi3Rjah0kq3VrJWOa944YxlHlTnKxCulMZouhcU_GVWUjUzP1rJGmEAxxjeWCIag961thEskXqjAUfnhv36Vo2v0cJIDcDL6dwUUJTcIGVX4OKxsW2Y1sQng7SAh72CwfxrIuhcqTOFetV3EAv90OTa7TV-FU81a2PJo41PB7ENi1b-vpy0JFPfYvJ8K8/w640-h452/2024-02-18%2020%2021%2041.png" width="640" /></a></div><br /><span style="font-size: x-large;"><br /></span><p></p><p><span style="color: red; font-size: x-large;">(Arduino , Node-Red 程式中的 alex9ufo 全部改成自己的英文命名)</span></p><p><img border="0" data-original-height="464" data-original-width="1347" height="220" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDPi4LbtIgTz6ZHgYdjlc87dh127rUIR3CqclndSHh8yV0aeIRI_SpW0toKwxANjlfKdqbFzh2L2LAFZXHVMlddzSOD5lFbQEMvpW0Ms6WKBhhBz8u43OUdhI_4L3YgEdVL1dpRoYr9EFCIuz9fmMQqeL7VhthqG9auIv_kyrlfY5QM7xXUeDJYbQm3Tw/w640-h220/2023-11-12%2019%2050%2042.png" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; color: #33aaff; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: large; padding: 5px; position: relative; text-align: center;" width="640" /></p><p><br /></p><p><br /></p><p><br /></p><p><img border="0" data-original-height="721" data-original-width="1045" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNhUKFMNimKxYzKIbHqjBvDE2udYNkChBjsfyzi5N9IgNsMND_vUx1vb4hWSezuPb_2Aly05W_V1SXEbHxCPJWFoO12jSVFAPeYTAkKhyphenhyphenu__G04HQJZC5ku8HYjS2k9-Lko40t8jHMM5ma1TwZMwSnI1VlqpEXLxYT_1mlg1Cl-qAT4v6uvzgDhGUyk48/w640-h442/2023-11-12%2021%2021%2047.png" style="background: rgb(255, 255, 255); border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; color: #33aaff; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; padding: 5px; position: relative; text-align: center;" width="640" /></p><p><span style="font-size: xx-large;">使用Node-Red 第一次一定要先建立資料庫 不然看不到資料</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh38ONo8svEu5raLZQ8ddZBj14AbIZ2LjSbarCQ0TjhUQuWfm0K6-FMUAxrvqNxGDC57KvadB7ACmOFb26LQiEtneauU0iwqWK5I4HRl1tZzHtb34S0d0Rh2gH8kOsECv-I5R8wsfRYRZkqHjyw7tr5F1_2HaEUv0zTPzAUy02n1PH8B9tmxVMP665G0r4/s1305/2024-01-31%2013%2006%2059.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="757" data-original-width="1305" height="372" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh38ONo8svEu5raLZQ8ddZBj14AbIZ2LjSbarCQ0TjhUQuWfm0K6-FMUAxrvqNxGDC57KvadB7ACmOFb26LQiEtneauU0iwqWK5I4HRl1tZzHtb34S0d0Rh2gH8kOsECv-I5R8wsfRYRZkqHjyw7tr5F1_2HaEUv0zTPzAUy02n1PH8B9tmxVMP665G0r4/w640-h372/2024-01-31%2013%2006%2059.png" width="640" /></a></div><span style="font-size: x-large;">Node-Red 程式</span><p></p><p><span style="font-size: large;">1) MQTT topic "alex9ufo" 全部改成自己的名稱</span></p><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: large;">2) 資料庫 名稱 位置 </span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: large;"> <span style="background-color: #04ff00;">C:\Users\User\.node-red\LED_STATUS.db</span></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="background-color: #04ff00;"><span style="font-size: large;"><br /></span></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="background-color: #04ff00; color: red;"><span style="font-size: large;">(所有的節點 sqlite 有可能跟你不同要修改)</span></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="background-color: #04ff00;"><span style="font-size: large;"><br /></span></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="background-color: #04ff00; font-size: x-large;">CREATE TABLE LEDSTATUS (</span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">id INTEGER,</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">STATUS TEXT,</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">Date DATE,</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">Time TIME,</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">PRIMARY KEY (id)</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;">);</span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgysc19QiMJsHpPVfs4vSSmj6AmB8Sn2RAQpqBVySsLGBYhyphenhyphenFGRQUGW3VvMilr_zGSRYAY8F0zriKRrtTM1-3dZzR33KRjjSgfUF-mkSPBVQBnmMmoQtmT-NQB3qAlB5IpDlmM7B1FPIbbiaXSgDsu0tpGv3XTAw9h2wA-0dPVIG9WBIVShZkCI2o4iAo4/s564/2024-01-30%2020%2044%2001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="353" data-original-width="564" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgysc19QiMJsHpPVfs4vSSmj6AmB8Sn2RAQpqBVySsLGBYhyphenhyphenFGRQUGW3VvMilr_zGSRYAY8F0zriKRrtTM1-3dZzR33KRjjSgfUF-mkSPBVQBnmMmoQtmT-NQB3qAlB5IpDlmM7B1FPIbbiaXSgDsu0tpGv3XTAw9h2wA-0dPVIG9WBIVShZkCI2o4iAo4/w640-h400/2024-01-30%2020%2044%2001.png" width="640" /></a></div><br /><span style="font-size: large;"><br /></span></span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;"><span style="font-size: large;"><br /></span></span></div></div><p><span style="font-size: large;">3) <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;">Line Notify (</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: #04ff00; color: #222222;">需改成自己的權杖</span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;"> </span><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: #01ffff; color: #222222;">不然我會收到各位的Line)</span></span></p><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEbQJp6Ss42qDogoh6tLeJirfECnu4jwFlU4f4Tt6MPfcYq1O0fIPntxilfW9ctyGn9iaYZ5g8ZuCBNuKYj6nj0ZS3WOUMYttEg6T8kag7zShiiHAgqKvIblANNnhzMXXHJgUIfKjg50yLYm1fbPZGKarKqOskwtaskzBdf-3vC09uX1rJ2RVs70s0zQ/s994/2023-11-13%2020%2034%2059.png" style="color: #33aaff; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="320" data-original-width="994" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlEbQJp6Ss42qDogoh6tLeJirfECnu4jwFlU4f4Tt6MPfcYq1O0fIPntxilfW9ctyGn9iaYZ5g8ZuCBNuKYj6nj0ZS3WOUMYttEg6T8kag7zShiiHAgqKvIblANNnhzMXXHJgUIfKjg50yLYm1fbPZGKarKqOskwtaskzBdf-3vC09uX1rJ2RVs70s0zQ/w640-h206/2023-11-13%2020%2034%2059.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: x-large;">msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer </span><span style="background-color: #01ffff; font-size: x-large;">A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB</span><span style="font-size: x-large;">'};</span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><div class="separator" style="clear: both;">msg.payload = {"message":msg.payload};</div><div class="separator" style="clear: both;">return msg;</div><div class="separator" style="clear: both;"><br /></div><div class="separator" style="clear: both;">(Set Line API function內)</div><div class="separator" style="clear: both;">我的權杖<span style="background-color: #01ffff;">A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB</span></div><div class="separator" style="clear: both;"><span style="background-color: #04ff00;">需改成自己的權杖</span></div></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><div class="separator" style="clear: both;"><span style="font-size: large;"><div class="separator" style="clear: both;"><br /></div></span></div><div class="separator" style="clear: both;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyGQERgYzhXwBMqy_bLTUzzDMTV1xl3NeSWhUsHTl41yMw8B8orshfDWn6I99Zk_7VJnnGwTS3TE4wD5LRlzeQuNyoTycJ8ZXLw2T5QhyhTTShZZOhNfg-1R2S_QvIkL0hpWL0HPtFJxXlYD748voyzLkiXtit4DTbKhDv8IhxHQ4z-P1cV7M3neXZ4gs/s2400/Screenshot_20231113_203030_LINE.jpg" style="color: #33aaff; margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="2400" data-original-width="1080" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyGQERgYzhXwBMqy_bLTUzzDMTV1xl3NeSWhUsHTl41yMw8B8orshfDWn6I99Zk_7VJnnGwTS3TE4wD5LRlzeQuNyoTycJ8ZXLw2T5QhyhTTShZZOhNfg-1R2S_QvIkL0hpWL0HPtFJxXlYD748voyzLkiXtit4DTbKhDv8IhxHQ4z-P1cV7M3neXZ4gs/w288-h640/Screenshot_20231113_203030_LINE.jpg" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="288" /></a></div></div></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span style="font-size: large;"><br /></span></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"><span style="font-size: large;">4) Line 權杖的取得</span></div><p><span style="font-size: large;"><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222;"><a href="https://alex9ufoexploer.blogspot.com/2020/10/line-notify.html" style="color: #2288bb; text-decoration-line: none;">https://alex9ufoexploer.blogspot.com/2020/10/line-notify.html</a></span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: x-large;">5) Node-Red 畫面 (含如何使用)</span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;"> <b>新增</b></span></span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp0AegUVDw0Mc2PyOBOYqC9ahKj3L6FG9HUT7TMOTkHQOiynONj6GCk3RVwhB0IXUxFkZwnf507gtsFI7NOdEen9LD2fBJADL9hKxpjyrjBxH3CjNcRyrJWoSNLOdG9teYSd-bktzo1womojiUH476W8cvzAR5dhAlV7CyNAkdMpnpaiTPYilLd-jUSMs/s1827/2024-01-30%2019%2045%2056.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="1827" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp0AegUVDw0Mc2PyOBOYqC9ahKj3L6FG9HUT7TMOTkHQOiynONj6GCk3RVwhB0IXUxFkZwnf507gtsFI7NOdEen9LD2fBJADL9hKxpjyrjBxH3CjNcRyrJWoSNLOdG9teYSd-bktzo1womojiUH476W8cvzAR5dhAlV7CyNAkdMpnpaiTPYilLd-jUSMs/w640-h278/2024-01-30%2019%2045%2056.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCVBI0VUblN8fLSJTLIeRhiUPuY6M_h9Jt8e4Nuw2L8DJRwXEmcwfLay56n4Efx32ZXh4NKqdiNDTlNHqnVjdofUQFhAis1ilFUoMyonqblXh7VhRtV4QjhaNvlTgrt8UBebvC8e78VkulLV_dbuq3Qo6pTF9IdIx-vKzoOfluzRY5zvLYmxEu9JTcfTI/s1589/2024-01-30%2019%2049%2007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="763" data-original-width="1589" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCVBI0VUblN8fLSJTLIeRhiUPuY6M_h9Jt8e4Nuw2L8DJRwXEmcwfLay56n4Efx32ZXh4NKqdiNDTlNHqnVjdofUQFhAis1ilFUoMyonqblXh7VhRtV4QjhaNvlTgrt8UBebvC8e78VkulLV_dbuq3Qo6pTF9IdIx-vKzoOfluzRY5zvLYmxEu9JTcfTI/w640-h308/2024-01-30%2019%2049%2007.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"> <b><span style="font-size: large;">刪除所有資料</span></b></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbnHE8SwDRBqHcIqgeMYTVEk_7dzEW30UQLfy5viLpPk-R2r5K7RqVNKy2djy45110b5ddwGygePRWOA56HaI9YoWPVCi9TdnNimArKpVBUJzGtfdNfnIl1FuOX4wPg_Wi-mxkDYWOQ0NgNXapwMWOqY0OnHEHKAfZVi-Uyh7dO8m4Esc5eWiF-KL6MbM/s988/2024-01-30%2019%2049%2055.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="750" data-original-width="988" height="486" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbnHE8SwDRBqHcIqgeMYTVEk_7dzEW30UQLfy5viLpPk-R2r5K7RqVNKy2djy45110b5ddwGygePRWOA56HaI9YoWPVCi9TdnNimArKpVBUJzGtfdNfnIl1FuOX4wPg_Wi-mxkDYWOQ0NgNXapwMWOqY0OnHEHKAfZVi-Uyh7dO8m4Esc5eWiF-KL6MbM/w640-h486/2024-01-30%2019%2049%2055.png" width="640" /></a></div><p> <span style="font-size: large;"><b>刪除資料庫 與 建立資料庫</b></span></p><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQfg_gh3EV2vDVQxIPE94LCKuAKEau22H0pYff_YKQJQ_Pc0TBbuANi1n1OLAjbaFBfiqEw1n4APK0jaLtXg38ePsK6_tcYGRTnaaEcAjzEOqsTi_mv7fqRHXEKCqGG_gau-V1sUg0oq2rlHaKB50ary6fVuvrpoJnTo4nE5z9tJf9FOKqfaMmtAncHjI/s1226/2024-01-30%2019%2050%2056.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="803" data-original-width="1226" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQfg_gh3EV2vDVQxIPE94LCKuAKEau22H0pYff_YKQJQ_Pc0TBbuANi1n1OLAjbaFBfiqEw1n4APK0jaLtXg38ePsK6_tcYGRTnaaEcAjzEOqsTi_mv7fqRHXEKCqGG_gau-V1sUg0oq2rlHaKB50ary6fVuvrpoJnTo4nE5z9tJf9FOKqfaMmtAncHjI/w640-h420/2024-01-30%2019%2050%2056.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"> <span style="font-size: large;"><b>查詢一筆資料</b></span></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdx6XHglU_vdX_pNVlkdul5-UdljqCmMv-GsgMjyADSPKDyXe4hfwoA3Y8OozBY3LVHxxdg5Ia-bzk5NVet8Bj4qChwSTWe38StSg3XNOxQf-mYvnIaiDUa0J5FqRMVx1r3MUqTVw1unEO2-zyYyPEBOmAP2VqCb7t_MVMXU7mwBrrV8TZbqvCshdRb0w/s1212/2024-01-30%2019%2051%2055.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="693" data-original-width="1212" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdx6XHglU_vdX_pNVlkdul5-UdljqCmMv-GsgMjyADSPKDyXe4hfwoA3Y8OozBY3LVHxxdg5Ia-bzk5NVet8Bj4qChwSTWe38StSg3XNOxQf-mYvnIaiDUa0J5FqRMVx1r3MUqTVw1unEO2-zyYyPEBOmAP2VqCb7t_MVMXU7mwBrrV8TZbqvCshdRb0w/w640-h366/2024-01-30%2019%2051%2055.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b> </b></span></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b>查詢所有資料</b></span></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7yojabjBq6R11T_k9GpbI3sA3jXcxNsCJ3ygpiLmWNuClhTGysYRtP3DdrWhivjMFi7tRrE3kCuSYmF0m6SQTcMDiyJLuBV-Vjp565Rt00h31BOQ3Nrxn6_xlmC5P3JfcRy2hqMYvxd5JX1KVfEZUcgIlxPyukUs6rCdEeqB9N8s4C-kzhQy6utL4it4/s958/2024-01-30%2019%2053%2016.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="589" data-original-width="958" height="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7yojabjBq6R11T_k9GpbI3sA3jXcxNsCJ3ygpiLmWNuClhTGysYRtP3DdrWhivjMFi7tRrE3kCuSYmF0m6SQTcMDiyJLuBV-Vjp565Rt00h31BOQ3Nrxn6_xlmC5P3JfcRy2hqMYvxd5JX1KVfEZUcgIlxPyukUs6rCdEeqB9N8s4C-kzhQy6utL4it4/w640-h394/2024-01-30%2019%2053%2016.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;"> </div><div class="separator" style="clear: both; text-align: left;"> <b><span style="font-size: large;"> 刪除一筆資料</span></b></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkXYf15i42vmgNGj4O_fZ2w1584AGKym2EHceZAJ9xg6qe2ym-fqaxAmFtJL3qFu4rVpS6r1pFheu_oJrfhyS9TlHfFdE0xBA57LJR60wjJ39-KqOqwNHTQ1ojLTptLYlkOrkBjLxRVUfySXb48MTHh5t6rZVfeTMzLLqwM05BRHBbuO89Tu2XFZ4IUq4/s1225/2024-01-30%2019%2054%2009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="682" data-original-width="1225" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkXYf15i42vmgNGj4O_fZ2w1584AGKym2EHceZAJ9xg6qe2ym-fqaxAmFtJL3qFu4rVpS6r1pFheu_oJrfhyS9TlHfFdE0xBA57LJR60wjJ39-KqOqwNHTQ1ojLTptLYlkOrkBjLxRVUfySXb48MTHh5t6rZVfeTMzLLqwM05BRHBbuO89Tu2XFZ4IUq4/w640-h356/2024-01-30%2019%2054%2009.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3tgNxzrUxZ-5XAPFkvYWHOKTwjwjZFR9otMtfBMLpXX07e2fQdH1UtJdhFamxg0jfZaHW-6Hh0CqU2tjNjAHmKDKY0rUkd1izk8bbgMqNo8G4YT6ouURuPQo6J7mmawOZcyJ4vyJBnuYYiatSFCRGdGiB2EPbSvD-UGLpFb0pDAqSqX_UKdcoPMrEX0Y/s1199/2024-01-30%2019%2055%2006.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="598" data-original-width="1199" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3tgNxzrUxZ-5XAPFkvYWHOKTwjwjZFR9otMtfBMLpXX07e2fQdH1UtJdhFamxg0jfZaHW-6Hh0CqU2tjNjAHmKDKY0rUkd1izk8bbgMqNo8G4YT6ouURuPQo6J7mmawOZcyJ4vyJBnuYYiatSFCRGdGiB2EPbSvD-UGLpFb0pDAqSqX_UKdcoPMrEX0Y/w640-h320/2024-01-30%2019%2055%2006.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"> <span style="font-size: large;"><b> 更正一筆資料</b></span></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8NTaq9LtmzuoAivdthI-IENzwNwyAx_DfbgruD92E6wd5BBoIYDEURHns2iCswz7o6wQfJHxs0gIFLuxirhRrL2JF5HFRRhNVwm_cwxma2Ic78PWXSVBJyrnyU3tQJ4h73kMfNuDSy6SMTQ1d_FJY5J1whAJ7J7Vo27dF-yCWax72Xl0FJn5jjILHm8/s1220/2024-01-30%2019%2059%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1220" height="366" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp8NTaq9LtmzuoAivdthI-IENzwNwyAx_DfbgruD92E6wd5BBoIYDEURHns2iCswz7o6wQfJHxs0gIFLuxirhRrL2JF5HFRRhNVwm_cwxma2Ic78PWXSVBJyrnyU3tQJ4h73kMfNuDSy6SMTQ1d_FJY5J1whAJ7J7Vo27dF-yCWax72Xl0FJn5jjILHm8/w640-h366/2024-01-30%2019%2059%2031.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnfO12X04xebUA3gZCPv9D25TzTzoZGBzwMiZk1m6L904ngTkbhU8FhALEmbL3GPrlF5YB1F_vxJGsG3LTSUsxIPYkOiLWlecLkqqLNO4lv-NJ61aE2x9XFrdWYYWs3W5G-E4XKki_cnuU2htPQig0Ef8jWVbynUlqZ4qrf7vVsEQhcHMkmw0pP5kQ7dA/s1222/2024-01-30%2020%2003%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="625" data-original-width="1222" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnfO12X04xebUA3gZCPv9D25TzTzoZGBzwMiZk1m6L904ngTkbhU8FhALEmbL3GPrlF5YB1F_vxJGsG3LTSUsxIPYkOiLWlecLkqqLNO4lv-NJ61aE2x9XFrdWYYWs3W5G-E4XKki_cnuU2htPQig0Ef8jWVbynUlqZ4qrf7vVsEQhcHMkmw0pP5kQ7dA/w640-h328/2024-01-30%2020%2003%2031.png" width="640" /></a></div><p></p><p> <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: x-large;">6) Node-Red 程式畫面 </span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKHv_KvCQqDjElW4HyJDvMBUg9-4e_06T4tJLCPN0wsorzWNM1rXPOTxnz2V3o_wvnkulBihw9mwOMWv8uQ13GLLzMBTAPGZ6cIWljntV5WNzmtathD3RCo3LrXJyhrprvnKRY7psktKpu7aCGGo98pYYjCfzom-8JGbczzc5gVwJCn0rtozGF6g83qU/s874/2024-01-30%2020%2030%2009.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="594" data-original-width="874" height="434" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghKHv_KvCQqDjElW4HyJDvMBUg9-4e_06T4tJLCPN0wsorzWNM1rXPOTxnz2V3o_wvnkulBihw9mwOMWv8uQ13GLLzMBTAPGZ6cIWljntV5WNzmtathD3RCo3LrXJyhrprvnKRY7psktKpu7aCGGo98pYYjCfzom-8JGbczzc5gVwJCn0rtozGF6g83qU/w640-h434/2024-01-30%2020%2030%2009.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtcjOrP8hAWR_SO9zkV4Ty3pLJYi5uzdPNcFL2JzSr92ZrsVbDfsAAQD4Mj2KM2ktWU8MKAsftaxTK07sNXYudUFMlt9eEIejRUcEg2M0TVz5HJ6zTo2yjIgWUdi0dEW03A01ukbc7zWk_YIkSlpqaWCgf4L3G97aplEeMMS6LdLPsLcVMhlpVEapU3E4/s1180/2024-01-30%2020%2030%2030.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="652" data-original-width="1180" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtcjOrP8hAWR_SO9zkV4Ty3pLJYi5uzdPNcFL2JzSr92ZrsVbDfsAAQD4Mj2KM2ktWU8MKAsftaxTK07sNXYudUFMlt9eEIejRUcEg2M0TVz5HJ6zTo2yjIgWUdi0dEW03A01ukbc7zWk_YIkSlpqaWCgf4L3G97aplEeMMS6LdLPsLcVMhlpVEapU3E4/w640-h354/2024-01-30%2020%2030%2030.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxTbyHTm9miSI26JIYR0P1DS8nDCX-JUbxb3tTGE7v56U8gzmXDUCrKRySGIRGBSm5GMC8qhyphenhyphenh5X2bw9AtG96nh27w-RgotqUdH4c0kCWrZTR7TV4no9ch3HdaP-FuXmq56DPVotMDC0kko3AoHTmS0RBavNA5XmW6i99Gc8tzN8nb6PAN66bYtQ75kJM/s1172/2024-01-30%2020%2030%2053.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="727" data-original-width="1172" height="396" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxTbyHTm9miSI26JIYR0P1DS8nDCX-JUbxb3tTGE7v56U8gzmXDUCrKRySGIRGBSm5GMC8qhyphenhyphenh5X2bw9AtG96nh27w-RgotqUdH4c0kCWrZTR7TV4no9ch3HdaP-FuXmq56DPVotMDC0kko3AoHTmS0RBavNA5XmW6i99Gc8tzN8nb6PAN66bYtQ75kJM/w640-h396/2024-01-30%2020%2030%2053.png" width="640" /></a></div><br /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: x-large;"><br /></span><p></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;">7) 程式</span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: xx-small;"><span style="background-color: white;">[{"id":"4a40fc27017c4aee","type":"inject","z":"0fce84474a62af64","name":"CREATE","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));","payload":"","payloadType":"date","x":120,"y":80,"wires":[["c0d2ae99a4a73349"]]},{"id":"a4cb50b05f479276","type":"inject","z":"0fce84474a62af64","name":"SELECT","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"SELECT * FROM LEDSTATUS","payload":"","payloadType":"date","x":120,"y":160,"wires":[["c0d2ae99a4a73349"]]},{"id":"e415790f1e84d8a8","type":"inject","z":"0fce84474a62af64","name":"INSERT","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"INSERT INTO LEDSTATUS (STATUS , Date , Time )values(\"on\", \"11/01\" , \"21:05\") ","payload":"","payloadType":"date","x":120,"y":120,"wires":[["c0d2ae99a4a73349"]]},{"id":"d375168ccfdb75e5","type":"inject","z":"0fce84474a62af64","name":"DELETE","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"DELETE from LEDSTATUS","payload":"","payloadType":"date","x":120,"y":200,"wires":[["c0d2ae99a4a73349"]]},{"id":"05a9d9bdea7d1628","type":"inject","z":"0fce84474a62af64","name":"DROP TABLE","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"DROP TABLE LEDSTATUS","payload":"","payloadType":"date","x":130,"y":240,"wires":[["c0d2ae99a4a73349"]]},{"id":"c0d2ae99a4a73349","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":380,"y":160,"wires":[["1956224795d14e15"]]},{"id":"1956224795d14e15","type":"debug","z":"0fce84474a62af64","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":550,"y":160,"wires":[]},{"id":"7c3e8c967f2eb1af","type":"comment","z":"0fce84474a62af64","name":"TABLE LEDSTATUS","info":"CREATE TABLE LEDSTATUS (\nid INTEGER,\nSTATUS TEXT,\nDate DATE,\nTime TIME,\nPRIMARY KEY (id)\n);","x":130,"y":40,"wires":[]},{"id":"60cd47793ea467da","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":520,"y":320,"wires":[["3f5d47f9347bd813"]]},{"id":"86890c516abc64f3","type":"function","z":"0fce84474a62af64","name":"CREATE DATABASE","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id))\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":320,"wires":[["60cd47793ea467da"]]},{"id":"b71764bc7d416065","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":7,"width":0,"height":0,"passthru":false,"label":"建立資料庫","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"建立資料庫","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":320,"wires":[["86890c516abc64f3","af73b77670b68487"]]},{"id":"af73b77670b68487","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":235,"y":280,"wires":[],"l":false},{"id":"92e3aaf631114a93","type":"ui_button","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","order":1,"width":0,"height":0,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":90,"y":360,"wires":[["d1059aaa9c5af665","a23a21b05a85191f","be407a41ce22b543","7e0f729ac9e41697"]]},{"id":"0b6f9a928c5974e3","type":"ui_button","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","order":2,"width":0,"height":0,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":90,"y":400,"wires":[["d1059aaa9c5af665","a23a21b05a85191f","be407a41ce22b543","7e0f729ac9e41697"]]},{"id":"f7c8be64ba8c0a1b","type":"ui_button","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","order":3,"width":0,"height":0,"passthru":false,"label":"TOGGLE","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"toggle","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":440,"wires":[["d1059aaa9c5af665","a23a21b05a85191f","be407a41ce22b543","7e0f729ac9e41697"]]},{"id":"95883ea8be2abb9b","type":"ui_button","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","order":4,"width":0,"height":0,"passthru":false,"label":"TIMER","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"timer","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":480,"wires":[["d1059aaa9c5af665","a23a21b05a85191f","be407a41ce22b543","7e0f729ac9e41697"]]},{"id":"c8aa802f0a761174","type":"ui_button","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","order":5,"width":0,"height":0,"passthru":false,"label":"FLASH","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"flash","payloadType":"str","topic":"topic","topicType":"msg","x":100,"y":520,"wires":[["a23a21b05a85191f","d1059aaa9c5af665","be407a41ce22b543","7e0f729ac9e41697"]]},{"id":"a23a21b05a85191f","type":"function","z":"0fce84474a62af64","name":"INSERT","func":"var Today = new Date();\nvar yyyy = Today.getFullYear(); //年\nvar MM = Today.getMonth()+1; //月\nvar dd = Today.getDate(); //日\nvar h = Today.getHours(); //時\nvar m = Today.getMinutes(); //分\nvar s = Today.getSeconds(); //秒\nif(MM<10)\n{\n MM = '0'+MM;\n}\n\nif(dd<10)\n{\n dd = '0'+dd;\n}\n\nif(h<10)\n{\n h = '0'+h;\n}\n\nif(m<10)\n{\n m = '0' + m;\n}\n\nif(s<10)\n{\n s = '0' + s;\n}\nvar var_date = yyyy+'/'+MM+'/'+dd;\nvar var_time = h+':'+m+':'+s;\n\nvar myLED = msg.payload;\n\n\nmsg.topic = \"INSERT INTO LEDSTATUS ( STATUS , Date , Time ) VALUES ($myLED, $var_date , $var_time ) \" ;\nmsg.payload = [myLED, var_date , var_time ]\nreturn msg;\n\n\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":460,"wires":[["b9d317cad4523445"]]},{"id":"d1059aaa9c5af665","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":255,"y":420,"wires":[],"l":false},{"id":"b9d317cad4523445","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":480,"y":460,"wires":[["1723ef473e3dde7e","d5663f9afbb3fa6d"]]},{"id":"3f5d47f9347bd813","type":"debug","z":"0fce84474a62af64","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":320,"wires":[]},{"id":"1723ef473e3dde7e","type":"debug","z":"0fce84474a62af64","name":"debug ","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":690,"y":460,"wires":[]},{"id":"d135a6ec97fba847","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":8,"width":0,"height":0,"passthru":false,"label":"檢視資料庫資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"檢視資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":620,"wires":[["d5663f9afbb3fa6d","2e1fb770146e7bd5"]]},{"id":"d5663f9afbb3fa6d","type":"function","z":"0fce84474a62af64","name":"檢視資料","func":"//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;\n\nmsg.topic = \"SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50\";\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":340,"y":620,"wires":[["be334eb3c9c72c77"]]},{"id":"c833d46f61a95f22","type":"ui_table","z":"0fce84474a62af64","group":"821196f103500796","name":"","order":1,"width":10,"height":10,"columns":[],"outputs":0,"cts":false,"x":790,"y":620,"wires":[]},{"id":"be334eb3c9c72c77","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":520,"y":620,"wires":[["c833d46f61a95f22"]]},{"id":"9244615e88c96c40","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":1,"width":2,"height":1,"passthru":false,"label":"刪除資料庫 ","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除資料庫 ","payloadType":"str","topic":"topic","topicType":"msg","x":110,"y":860,"wires":[["2d3cc6f5ba1af6f0","7ca5dd04f5e01509"]]},{"id":"cd1d9de75df07cd0","type":"function","z":"0fce84474a62af64","name":"DROP DATABASE","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"DROP TABLE LEDSTATUS\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":520,"y":800,"wires":[["28ecf1d0f6f3982f"]]},{"id":"28ecf1d0f6f3982f","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":740,"y":720,"wires":[["3f3c89fd5a478259"]]},{"id":"d71be695ba437ed1","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":2,"width":2,"height":1,"passthru":false,"label":"刪除所有資料 ","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除所有資料 ","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":760,"wires":[["7ca5dd04f5e01509","d74709cfd5386eb4"]]},{"id":"6f16cd694e3efb89","type":"function","z":"0fce84474a62af64","name":"DELETE ALL DATA","func":"//CREATE TABLE LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n//CREATE TABLE LEDSTATUS (id INTEGER,STATUS TEXT,Date DATE,Time TIME,PRIMARY KEY (id));\nmsg.topic = \"DELETE from LEDSTATUS\";\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":390,"y":700,"wires":[["28ecf1d0f6f3982f"]]},{"id":"2d3cc6f5ba1af6f0","type":"ui_toast","z":"0fce84474a62af64","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":310,"y":860,"wires":[["9acf06a4cf765e75"]]},{"id":"9acf06a4cf765e75","type":"function","z":"0fce84474a62af64","name":"function 84","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":860,"wires":[["cd1d9de75df07cd0"],[]]},{"id":"7ca5dd04f5e01509","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":205,"y":800,"wires":[],"l":false},{"id":"d74709cfd5386eb4","type":"ui_toast","z":"0fce84474a62af64","position":"prompt","displayTime":"3","highlight":"","sendall":true,"outputs":1,"ok":"OK","cancel":"Cancel","raw":true,"className":"","topic":"","name":"","x":330,"y":760,"wires":[["eeaa85327128f533"]]},{"id":"eeaa85327128f533","type":"function","z":"0fce84474a62af64","name":"function 85","func":"var topic=msg.payload;\nif (topic==\"\"){\n return [msg,null];\n \n}\nif (topic==\"Cancel\"){\n return [null,msg];\n \n}\nreturn msg;","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":490,"y":760,"wires":[["6f16cd694e3efb89"],[]]},{"id":"2e1fb770146e7bd5","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":195,"y":660,"wires":[],"l":false},{"id":"968be0bad8c6a400","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":3,"width":2,"height":1,"passthru":false,"label":"查詢一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"查詢一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":920,"wires":[["7ca5dd04f5e01509","cc4f8309b006ace3"]]},{"id":"1d68074d89550fe0","type":"function","z":"0fce84474a62af64","name":"查詢一筆資料","func":"//\nvar id = msg.payload.id;\nvar s=global.get(\"SEL1\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==1)\n{\n temp =\"SELECT * FROM LEDSTATUS\";\n temp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n}\nmsg.topic=temp;\nglobal.set(\"SEL1\",0);\n\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":660,"y":920,"wires":[["a7451617bea651ab"]]},{"id":"a7451617bea651ab","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":720,"y":840,"wires":[["c833d46f61a95f22"]]},{"id":"1b74c7a4478ca5ac","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":4,"width":2,"height":1,"passthru":false,"label":"刪除一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"刪除一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":980,"wires":[["b6bffe3d5d1a6d85","c1208026cc2835a5"]]},{"id":"b6bffe3d5d1a6d85","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"11d8514.a44dcaf","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":true,"x":255,"y":1020,"wires":[],"l":false},{"id":"d4eb7ebe30fccb1a","type":"ui_form","z":"0fce84474a62af64","name":"","label":"輸入id","group":"e48ffa90611225eb","order":1,"width":0,"height":0,"options":[{"label":"ID","value":"id","type":"number","required":true,"rows":null}],"formValue":{"id":""},"payload":"","submit":"Submit","cancel":"Cancle","topic":"Form","topicType":"str","splitLayout":false,"className":"","x":510,"y":980,"wires":[["1d68074d89550fe0","acef5c22c3f96d7c","aa219bb4f9628fd7"]]},{"id":"acef5c22c3f96d7c","type":"function","z":"0fce84474a62af64","name":"刪除一筆資料","func":"//\nvar id = msg.payload.id;\nvar s=global.get(\"SEL2\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==2)\n{\n temp =\"DELETE FROM LEDSTATUS\";\n temp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n}\n\nmsg.topic=temp;\nglobal.set(\"SEL2\",0)\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":680,"y":980,"wires":[["8686af22dec010df","7e14c2085b11e5a6"]]},{"id":"3f3c89fd5a478259","type":"link out","z":"0fce84474a62af64","name":"link out 38","mode":"link","links":["c2630df45cb7cf5a"],"x":875,"y":720,"wires":[]},{"id":"c2630df45cb7cf5a","type":"link in","z":"0fce84474a62af64","name":"link in 35","links":["3f3c89fd5a478259"],"x":255,"y":660,"wires":[["d5663f9afbb3fa6d"]]},{"id":"8686af22dec010df","type":"sqlite","z":"0fce84474a62af64","mydb":"4e71ffcc.32ba8","sqlquery":"msg.topic","sql":"","name":"LED_STATUS","x":920,"y":980,"wires":[["3f3c89fd5a478259"]]},{"id":"68efbd423e887bff","type":"ui_button","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","order":5,"width":2,"height":1,"passthru":false,"label":"更正一筆資料","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"更正一筆資料","payloadType":"str","topic":"topic","topicType":"msg","x":120,"y":1060,"wires":[["b6bffe3d5d1a6d85","acb3259d5ea386b4"]]},{"id":"e30ac89122be88d0","type":"comment","z":"0fce84474a62af64","name":"UPDATE查詢的WHERE","info":"UPDATE查詢的WHERE子句的基本語法如下:\n\nUPDATE table_name\nSET column1 = value1, column2 = value2...., columnN = valueN\nWHERE [condition];","x":140,"y":1100,"wires":[]},{"id":"81dc801b7395682e","type":"function","z":"0fce84474a62af64","name":"更正一筆資料","func":"//\nvar id = global.get(\"ID\");\nvar status = msg.payload.Status;\nvar date = msg.payload.date;\nvar time = msg.payload.time;\n\nvar s=global.get(\"SEL3\")\nmsg.topic=\"\";\nvar temp=\"\";\n\nif (s==3)\n{\n temp =\"update LEDSTATUS set \";\n temp=temp+\" STATUS= '\" + status +\"'\";\n temp=temp+\" , Date= '\" + date +\"'\";\n temp=temp+\" , Time= '\" + time +\"'\";\n temp=temp+\" WHERE id=\" + id;\n \n //msg.topic = \"update LEDSTATUS set ( id , STATUS , Date , Time ) VALUES ($id, $status , $date , $time ) \" ;\n //msg.payload = [id,status,date,time]\n}\nmsg.topic=temp;\n\nreturn msg;\n\n//msg.topic = \"INSERT INTO LEDSTATUS ( STATUS , Date , Time ) VALUES ($myLED, $var_date , $var_time ) \" ;\n//msg.payload = [myLED, var_date , var_time ]\n\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":780,"y":1100,"wires":[["8686af22dec010df","4f380e124a31dff3"]]},{"id":"cc4f8309b006ace3","type":"function","z":"0fce84474a62af64","name":"function flow set1","func":"var s1=1;\nglobal.set(\"SEL1\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":920,"wires":[["d4eb7ebe30fccb1a"]]},{"id":"c1208026cc2835a5","type":"function","z":"0fce84474a62af64","name":"function flow set2","func":"var s1=2;\nglobal.set(\"SEL2\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":980,"wires":[["d4eb7ebe30fccb1a"]]},{"id":"acb3259d5ea386b4","type":"function","z":"0fce84474a62af64","name":"function flow set3","func":"var s1=3;\nglobal.set(\"SEL3\",s1);\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":1060,"wires":[["d4eb7ebe30fccb1a"]]},{"id":"4db9cf0725d987e7","type":"ui_form","z":"0fce84474a62af64","name":"","label":"更正欄位","group":"e48ffa90611225eb","order":2,"width":0,"height":0,"options":[{"label":"STATUS","value":"Status","type":"text","required":true,"rows":null},{"label":"DATE","value":"date","type":"text","required":true,"rows":null},{"label":"TIME","value":"time","type":"text","required":true,"rows":null}],"formValue":{"Status":"","date":"","time":""},"payload":"","submit":"Submit","cancel":"Cancle","topic":"Form","topicType":"str","splitLayout":false,"className":"","x":600,"y":1100,"wires":[["81dc801b7395682e"]]},{"id":"7e14c2085b11e5a6","type":"debug","z":"0fce84474a62af64","name":"debug 213","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"topic","targetType":"msg","statusVal":"","statusType":"auto","x":890,"y":940,"wires":[]},{"id":"aa219bb4f9628fd7","type":"function","z":"0fce84474a62af64","name":"Store ID資料","func":"//\nvar id = msg.payload.id;\nglobal.set(\"ID\",id)\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//DELETE FROM COMPANY WHERE ID = 7;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":610,"y":1040,"wires":[["4db9cf0725d987e7","2b9eedaea9204c7c"]]},{"id":"2b9eedaea9204c7c","type":"function","z":"0fce84474a62af64","name":"查詢一筆資料","func":"//\nvar id = global.get(\"ID\");\nmsg.topic=\"\";\nvar temp=\"\";\ntemp =\"SELECT * FROM LEDSTATUS\";\ntemp=temp+\" WHERE id LIKE '\"+ id +\"'\";\n\nmsg.topic=temp;\n\nreturn msg;\n\n//SELECT * FROM COMPANY WHERE AGE LIKE 'XXX%';\n//INSERT INTO LEDSTATUS (\n//id INTEGER,\n//STATUS TEXT,\n//Date DATE,\n//Time TIME,\n//PRIMARY KEY (id)\n//);\n\n//SELECT * FROM LEDSTATUS ORDER BY id DESC LIMIT 50;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":800,"y":1040,"wires":[["a7451617bea651ab"]]},{"id":"4f380e124a31dff3","type":"debug","z":"0fce84474a62af64","name":"debug 214","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"topic","targetType":"msg","statusVal":"","statusType":"auto","x":970,"y":1100,"wires":[]},{"id":"5d641321bfdfbf15","type":"mqtt in","z":"0fce84474a62af64","name":"LED status ","topic":"alex9ufo/esp32/led_status","qos":"2","datatype":"utf8","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":100,"y":1220,"wires":[["fb140769705e273b"]]},{"id":"fb140769705e273b","type":"function","z":"0fce84474a62af64","name":"function ","func":"msg.payload=\" ---ESP32回來資料---\" +msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":1220,"wires":[["2c387813f211da41","6ae1285801fdfac9","6b9bb575755aa602"]]},{"id":"2c387813f211da41","type":"function","z":"0fce84474a62af64","name":"Set Line API ","func":"msg.headers = {'content-type':'application/x-www-form-urlencoded','Authorization':'Bearer A4wwPNh2WqB7dlfeQyyIAwtggn1kfZSI5LkkCdia1gB'};\nmsg.payload = {\"message\":msg.payload};\nreturn msg;\n\n//oR7KdXvK1eobRr2sRRgsl4PMq23DjDlhfUs96SyUBZu","outputs":1,"noerr":0,"x":470,"y":1220,"wires":[["ab636fb8db587e31"]]},{"id":"ab636fb8db587e31","type":"http request","z":"0fce84474a62af64","name":"","method":"POST","ret":"txt","paytoqs":false,"url":"https://notify-api.line.me/api/notify","tls":"","persist":false,"proxy":"","authType":"","x":640,"y":1220,"wires":[["518658013844da1f"]]},{"id":"518658013844da1f","type":"debug","z":"0fce84474a62af64","name":"debug 216","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":810,"y":1220,"wires":[]},{"id":"5f285af41714e6b3","type":"comment","z":"0fce84474a62af64","name":"Line Notify Message ","info":"","x":490,"y":1180,"wires":[]},{"id":"be407a41ce22b543","type":"mqtt out","z":"0fce84474a62af64","name":"Control LED","topic":"alex9ufo/esp32/led","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":310,"y":360,"wires":[]},{"id":"f7fcccffe983a8bf","type":"comment","z":"0fce84474a62af64","name":"alex9ufo/esp32/led","info":"","x":370,"y":400,"wires":[]},{"id":"7e0f729ac9e41697","type":"ui_text","z":"0fce84474a62af64","group":"11d8514.a44dcaf","order":6,"width":6,"height":1,"name":"","label":"Node-RED發行到MQTT的資料 : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":370,"y":500,"wires":[]},{"id":"6b9bb575755aa602","type":"ui_text","z":"0fce84474a62af64","group":"4392f6e50bbac53e","order":8,"width":12,"height":1,"name":"","label":"Node-RED 訂閱MQTT的資料 : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":530,"y":1300,"wires":[]},{"id":"11b6ff83d92b0791","type":"ui_audio","z":"0fce84474a62af64","name":"","group":"4392f6e50bbac53e","voice":"Microsoft Hanhan - Chinese (Traditional, Taiwan)","always":"","x":640,"y":1260,"wires":[]},{"id":"6ae1285801fdfac9","type":"delay","z":"0fce84474a62af64","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"allowrate":false,"outputs":1,"x":460,"y":1260,"wires":[["11b6ff83d92b0791"]]},{"id":"93c7cb13f0c8d42f","type":"comment","z":"0fce84474a62af64","name":"資料庫位置 C:\\Users\\User\\.node-red\\LED_STATUS.db","info":"","x":620,"y":280,"wires":[]},{"id":"811f6ad7e3a3abd7","type":"comment","z":"0fce84474a62af64","name":"資料庫位置 C:\\Users\\User\\.node-red\\LED_STATUS.db","info":"","x":500,"y":120,"wires":[]},{"id":"4e71ffcc.32ba8","type":"sqlitedb","db":"C:\\Users\\User\\.node-red\\LED_STATUS.db","mode":"RWC"},{"id":"4392f6e50bbac53e","type":"ui_group","name":"命令","tab":"8f1ada5fa4df30e2","order":4,"disp":true,"width":"6","collapse":false,"className":""},{"id":"11d8514.a44dcaf","type":"ui_group","name":"新增","tab":"8f1ada5fa4df30e2","order":2,"disp":true,"width":6,"collapse":false,"className":""},{"id":"821196f103500796","type":"ui_group","name":"顯示","tab":"8f1ada5fa4df30e2","order":2,"disp":true,"width":10,"collapse":false,"className":""},{"id":"e48ffa90611225eb","type":"ui_group","name":"單筆資料","tab":"8f1ada5fa4df30e2","order":4,"disp":true,"width":4,"collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"8f1ada5fa4df30e2","type":"ui_tab","name":"作業2-1","icon":"dashboard","disabled":false,"hidden":false}]</span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;"><br /></span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;">SQlite DB Browser 使用</span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;">1) 教學</span></span></p><p><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="color: #222222; font-size: large;"><span style="background-color: white;"><a href="https://www.ruyut.com/2021/12/sqlite-tool.html">https://www.ruyut.com/2021/12/sqlite-tool.html</a></span></span></p><div style="background-color: white; font-family: Merriweather, Georgia, serif; font-size: 16px;"><span style="font-size: large;">先到 <a href="https://sqlitebrowser.org/dl/" rel="nofollow" style="background: transparent; color: #729c0b; text-decoration-line: none;" target="_blank">DB Browser for SQLite的官方網站</a>下載</span></div><div style="background-color: white; font-family: Merriweather, Georgia, serif; font-size: 16px;"><span style="font-size: large;">(如果電腦是32位元的請下載32位元的版本,不清楚就下載32位元的)</span></div><div style="background-color: white; font-family: Merriweather, Georgia, serif;"><div class="separator" style="clear: both; font-size: large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhug__ZE4BNdI_glUNw3uQLPA8kNuhWH8rQYBVwxlJwVsWwcXLo4OfMH6Qod4OTilX79tOkhUG42BE9fTVkkHxrikzzKqdrCA_KBzqw5JSPDIn0Ug_-FcnE-pd212nyiDVU3uR3VNn8w4E/" style="background: transparent; color: #729c0b; margin-left: 1em; margin-right: 1em; outline: 0px; text-decoration-line: none;"><img alt="" data-original-height="1065" data-original-width="1754" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhug__ZE4BNdI_glUNw3uQLPA8kNuhWH8rQYBVwxlJwVsWwcXLo4OfMH6Qod4OTilX79tOkhUG42BE9fTVkkHxrikzzKqdrCA_KBzqw5JSPDIn0Ug_-FcnE-pd212nyiDVU3uR3VNn8w4E/s16000/image.png" style="border: 0px; height: inherit; max-width: 100%;" /></a></div><div class="separator" style="clear: both; font-size: large; text-align: center;"><div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: medium; text-align: left;"><span style="font-size: large;"> 資料庫 名稱 位置 </span></div><div class="separator" style="clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: medium; text-align: left;"><span style="font-size: large;"> <span style="background-color: #04ff00;">C:\Users\User\.node-red\LED_STATUS.db</span></span></div></div><div class="separator" style="clear: both; font-size: large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXt9j9JBjoHQZkzJrfdAYBCpBT_J6N-MK10KLuFdNrdl2T098eUmViCnbV29aFkfnLmyZy9KXw_DyNWuLlLx0vc2E6e-U1SIhkH7U2AmyaYvWAp8r8Hq3ODmqYB1E4vsl9M0FCDLoInSyVcm-TFoloMDzzXqrLAIsaV7x80vLEFEyYAVrREidv8YgSrUg/s975/2024-01-30%2020%2037%2048.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="975" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXt9j9JBjoHQZkzJrfdAYBCpBT_J6N-MK10KLuFdNrdl2T098eUmViCnbV29aFkfnLmyZy9KXw_DyNWuLlLx0vc2E6e-U1SIhkH7U2AmyaYvWAp8r8Hq3ODmqYB1E4vsl9M0FCDLoInSyVcm-TFoloMDzzXqrLAIsaV7x80vLEFEyYAVrREidv8YgSrUg/w640-h412/2024-01-30%2020%2037%2048.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuzbKDiyPiLCwoomb-yP0gQUq41byHdqAQMculuCOAiQHW_yOAe6crb5IsLqPew5NqmgvFaP-EATK2X64wcF9-UCCHQMLlvXZ8edraPEMkqHBrfcfAQLvc4wiz0UPJa9TDcq0LuvqO_dKXxnp_MpEv7UZf4iV0y132lYARtXW_ForrLBL58kfugMc0ags/s1208/2024-01-30%2020%2039%2010.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="485" data-original-width="1208" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuzbKDiyPiLCwoomb-yP0gQUq41byHdqAQMculuCOAiQHW_yOAe6crb5IsLqPew5NqmgvFaP-EATK2X64wcF9-UCCHQMLlvXZ8edraPEMkqHBrfcfAQLvc4wiz0UPJa9TDcq0LuvqO_dKXxnp_MpEv7UZf4iV0y132lYARtXW_ForrLBL58kfugMc0ags/w640-h256/2024-01-30%2020%2039%2010.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5HKoU5paqb8lmwiaOFW14kbp8VJuCkCoLFVlNvhyihXdGCVeX7uIaoyJ2KB1lf0r6isJaUdRQXpM5mp8pcZ5rB5ZhjFKtMhslDxpekty3OYPnj5nxMR0UT1m6mvnSLypzbkcejqvQP0fkDI6DhmU7gFo9w05C6-WA9BiqEeWjvlTC80Qj580kB1_TCEg/s1332/2024-01-30%2021%2001%2001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="614" data-original-width="1332" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5HKoU5paqb8lmwiaOFW14kbp8VJuCkCoLFVlNvhyihXdGCVeX7uIaoyJ2KB1lf0r6isJaUdRQXpM5mp8pcZ5rB5ZhjFKtMhslDxpekty3OYPnj5nxMR0UT1m6mvnSLypzbkcejqvQP0fkDI6DhmU7gFo9w05C6-WA9BiqEeWjvlTC80Qj580kB1_TCEg/w640-h296/2024-01-30%2021%2001%2001.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6TqmjaIdN4D4ICpojLde0kw-X-9-BiDgOMHvrYDOo8b-lqqkj5ZqWtWGoZEcEfvTf1UvkNO8TmHTDwNDf-x6aCba4QwcX_W-Paem7yZH_FmU166rXiSUcTbPyQJidvRovA8ilTJBFs0F57wA00mP_l8M-36beWLoDoZOZ_yJ8cTpNiAxE3fSZioB2nhY/s892/2024-01-30%2021%2001%2038.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="633" data-original-width="892" height="454" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6TqmjaIdN4D4ICpojLde0kw-X-9-BiDgOMHvrYDOo8b-lqqkj5ZqWtWGoZEcEfvTf1UvkNO8TmHTDwNDf-x6aCba4QwcX_W-Paem7yZH_FmU166rXiSUcTbPyQJidvRovA8ilTJBFs0F57wA00mP_l8M-36beWLoDoZOZ_yJ8cTpNiAxE3fSZioB2nhY/w640-h454/2024-01-30%2021%2001%2038.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RZis2rZv1bQ1x6IsKi2H49YMlHJzI_hvcl2JxNFYQ2rgMULogu1KVj6uTnskAWm4Wy0-YJmxZESCe5z10TXub01K77WprTLXKdLxmAqzn3GgMAEUbR4Cik1hEHUCHWhPSJOEChcohXCoQll9eW1ZtTsy4RjE_2VmjD6QMtGrSh1HG2k3B0LvclltJPQ/s611/2024-01-30%2021%2009%2050.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="507" data-original-width="611" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9RZis2rZv1bQ1x6IsKi2H49YMlHJzI_hvcl2JxNFYQ2rgMULogu1KVj6uTnskAWm4Wy0-YJmxZESCe5z10TXub01K77WprTLXKdLxmAqzn3GgMAEUbR4Cik1hEHUCHWhPSJOEChcohXCoQll9eW1ZtTsy4RjE_2VmjD6QMtGrSh1HG2k3B0LvclltJPQ/w640-h532/2024-01-30%2021%2009%2050.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX2_gxkaUwx8WeKdT4JwPv6Yo1r0NQ8tYn-C5bcweuiF_q_aapXsntoshKV4qTudP4ldi6YUeRwncTIWNF791LAmrA7nQ1huFKSUJPTlFsjTMiaXKDIIHpWB026cl1P3gD-EDjoVzQHs5P68BlAkqfOtj_E5xSR6B-CP61i_wTJYVbntaPMnObeVjJ6T4/s591/2024-01-30%2021%2003%2003.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="591" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgX2_gxkaUwx8WeKdT4JwPv6Yo1r0NQ8tYn-C5bcweuiF_q_aapXsntoshKV4qTudP4ldi6YUeRwncTIWNF791LAmrA7nQ1huFKSUJPTlFsjTMiaXKDIIHpWB026cl1P3gD-EDjoVzQHs5P68BlAkqfOtj_E5xSR6B-CP61i_wTJYVbntaPMnObeVjJ6T4/w640-h466/2024-01-30%2021%2003%2003.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: large; text-align: center;"><br /></div><div class="separator" style="clear: both; font-size: large; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><span style="font-size: large;"><b>資料結構</b></span></div><div class="separator" style="clear: both; font-size: large; text-align: left;"><br /></div><div class="separator" style="clear: both; font-size: large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJSTg4JjNbAva427W0zpduSbfZQPFUePQU-hlvjFOJBVM7to9K1xls33p8SGUZ6XZupC7JNY1U3QS_yFkr5u3Ze5-VM8-S_m42MBl4YsuElFMzvFMJi-vxW8ufkJc57JAHXjHZuGA-mo_R87OAIIIYZZ0embIgUOmC7kJGeDH6wBYz19RpsfpZQ0R0FTM/s1096/2024-01-30%2020%2044%2059.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="625" data-original-width="1096" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJSTg4JjNbAva427W0zpduSbfZQPFUePQU-hlvjFOJBVM7to9K1xls33p8SGUZ6XZupC7JNY1U3QS_yFkr5u3Ze5-VM8-S_m42MBl4YsuElFMzvFMJi-vxW8ufkJc57JAHXjHZuGA-mo_R87OAIIIYZZ0embIgUOmC7kJGeDH6wBYz19RpsfpZQ0R0FTM/w640-h364/2024-01-30%2020%2044%2059.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><b><span style="font-size: large;">資料瀏覽</span></b></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieR9alZgEl4ztoJkVtU7qMjG_LD4kzoiNUp94epLXXoHcZqk2NZyfbqmKRHUF7-fpoSE9CratiPnup15tnnWQyYrC7MAewLBmk2GTq_dTOkylVF_9DODIlEPKtM6TKNEOoeAVj-ZCpQye0Y2chTc4xOHnHSpC20T_tSxD6UXwOPBAShIHT-tTjNcxcYIY/s865/2024-01-30%2020%2045%2039.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="487" data-original-width="865" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieR9alZgEl4ztoJkVtU7qMjG_LD4kzoiNUp94epLXXoHcZqk2NZyfbqmKRHUF7-fpoSE9CratiPnup15tnnWQyYrC7MAewLBmk2GTq_dTOkylVF_9DODIlEPKtM6TKNEOoeAVj-ZCpQye0Y2chTc4xOHnHSpC20T_tSxD6UXwOPBAShIHT-tTjNcxcYIY/w640-h360/2024-01-30%2020%2045%2039.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: large; text-align: left;"><br /></div></div><p><span style="font-size: large;"><span style="background-color: #1f272a; color: #c586c0; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">#include</span><span style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"> </span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">"arduino_secrets.h"</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">組譯錯誤代表</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;">缺少 </span></span><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">arduino_secrets.h 檔案</span></p><p><span style="background-color: #1f272a; color: #7fcbcd; font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;">裡面內容有2行</span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_SSID ""</span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="background-color: #1f272a; font-size: 20px; white-space: pre;"></span></span></p><p><span style="color: red; font-family: Consolas, Courier New, monospace;"><span style="font-size: 20px; white-space: pre;">#define SECRET_PASS ""</span></span></p><p><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s401/2024-02-05%2014%2024%2035.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="401" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj3NyQqX_GFgKp1nClaY3gcZyPDY0wgifvsD8xQf0-IyDVdUeYjjjM5hq5QadonkHZ9f3WxE6MKOXcfst7FKKtTyyJj3xxtE_qBwUCFpbwFJCr8lIsvM26ZVSckHXAu4M2Vva0X703ieMD4pEQfzc6-X-Z-OV3U57JEGS87wRY2xyjXG_3C9YOx1KcVgqo/s320/2024-02-05%2014%2024%2035.png" width="320" /></a></span></div><span style="color: #7fcbcd; font-family: Consolas, Courier New, monospace;"><br /></span><p></p><p><span style="font-size: large;">Arduino 程式</span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #7f8c8d;">//GPIO 2 D1 Build in LED</span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">13</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><div><span style="color: #7f8c8d;">// WiFi SSID password , SSID 和密碼進行Wi-Fi 設定 </span></div><div><span style="color: #7f8c8d;">//const char ssid[] = "alex9ufo"; // Enter your Wi-Fi name</span></div><div><span style="color: #7f8c8d;">//const char pass[] = "alex9981"; // Enter Wi-Fi password</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic2 = <span style="color: #7fcbcd;">"alex9ufo/esp32/led_status"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/esp32/RFID"</span>;</div><br /><div><span style="color: #7f8c8d;">//const char *topic1 = "alex9ufo/RFID/read";</span></div><div><span style="color: #7f8c8d;">//const char *topic3 = "alex9ufo/RFID/back";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/esp32/Starting"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//布林代數 LED狀態 是否連上網路ESP32 ready ?</span></div><div><span style="color: #0ca1a6;">bool</span> ledState = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> atwork = <span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Flash = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Timer = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div><span style="color: #0ca1a6;">bool</span> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //true</span></div><div>String LEDjson = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">int</span> Count= <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String message=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> message += (<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(message);</div><div> <span style="color: #f39c12;">message</span>.<span style="color: #f39c12;">trim</span>();</div><div> <span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (Topic==<span style="color: #7fcbcd;">"alex9ufo/esp32/led"</span>) {</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"on"</span>) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn on the LED</span></div><div> //ledState = <span style="color: #7fcbcd;">true</span>;<span style="color: #7f8c8d;"> //ledState = ture HIGH</span></div><div><span style="color: #7f8c8d;"> //設定 各個 旗號</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"ON"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"off"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> //ledState = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //ledState = false LOW</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"OFF"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"flash"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">true</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"FLASH"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"timer"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // Turn off the LED</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">true</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TIMER"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ;</div><div> Count= <span style="color: #7fcbcd;">11</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> }</div><br /><div> <span style="color: #c586c0;">if</span> (message == <span style="color: #7fcbcd;">"toggle"</span> ) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));<span style="color: #7f8c8d;"> // Turn the LED toggle</span></div><div> Flash = <span style="color: #7fcbcd;">false</span>;</div><div> Timer = <span style="color: #7fcbcd;">false</span>;</div><div> LEDjson =<span style="color: #7fcbcd;">"TOGGLE"</span>;</div><div> Send = <span style="color: #7fcbcd;">true</span> ; </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"LED ="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson); </div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"-----------------------"</span>);</div><div> } </div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//判斷 旗號Flash , Timer 是否為真</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">LED_Message</span>() {</div><div> <span style="color: #c586c0;">if</span> (Flash){</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, !<span style="color: #f39c12;">digitalRead</span>(LED));</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> //<span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> // ledState = <span style="color: #7fcbcd;">true</span>;</div><div> //<span style="color: #c586c0;">else</span></div><div> // ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }<span style="color: #7f8c8d;"> //(Flash)</span></div><br /><div> <span style="color: #c586c0;">if</span> (Timer) {</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED,LOW );</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> //<span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">digitalRead</span>(LED))</div><div> // ledState = <span style="color: #7fcbcd;">true</span>;</div><div> //<span style="color: #c586c0;">else</span></div><div> // ledState = <span style="color: #7fcbcd;">false</span>;</div><br /><div> Count=Count-<span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #c586c0;">if</span> (Count == <span style="color: #7fcbcd;">0</span> ){</div><div> Timer=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);</div><div> //ledState = <span style="color: #7fcbcd;">false</span>;</div><div> }</div><div> }<span style="color: #7f8c8d;"> //(Timer)</span></div><br /><div><span style="color: #7f8c8d;"> ////判斷 旗號 Send 是否為真 回傳MQTT訊息到MQTT Broker </span></div><div> <span style="color: #c586c0;">if</span> (Send) {</div><div><span style="color: #7f8c8d;"> // Convert JSON string to character array</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Publish message: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(LEDjson);</div><div> <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><div> </div><div><span style="color: #7f8c8d;"> // Publish JSON character array to MQTT topic</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic2, <span style="color: #f39c12;">LEDjson</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);<span style="color: #7f8c8d;"> //LED Status</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(LEDjson);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> Send = <span style="color: #7fcbcd;">false</span>;<span style="color: #7f8c8d;"> //處理過後 旗號 Send為假</span></div><div> }</div><br /><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);</div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // Turn off the LED initially</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"ESP32 Start working....!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topic1);</div><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(topic1, subscribeQos);</div><br /><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div><span style="color: #7f8c8d;"> //mfrc522.PCD_DumpVersionToSerial(); // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><div> </div><div> <span style="color: #f39c12;">LED_Message</span>();</div><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = json +(<span style="color: #7fcbcd;">" Card UID: "</span>);</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> json = json +(<span style="color: #7fcbcd;">" , PICC type: "</span>);</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // mfrc522.PICC_DumpToSerial(&(mfrc522.uid));</span></div><div> </div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-65858792761755519792024-01-30T00:10:00.000-08:002024-01-30T00:10:49.539-08:00 Node-Red MQTT基本實驗<p> <b style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-large; text-align: center;"> <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif">Node-Red MQTT基本實驗</span></b></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfx-RRR861KGoJieXKG-ku8pDoCY8RmFzeLmmru7d7xO0Ar1_3Oy6bWyaLyUFqoszmxNqh29PPN2msg8Psn2vAiS1mHHWeqZbaStsdCwriWSsTCq08Nk5JxHbmIGLKVfENVhbK26RgYhrGXswnWFNJXLbpRQVY9O-CF1tqH9afqlrQYdK7vgcmV5pVSTc/s640/ps_mqs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="360" data-original-width="640" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfx-RRR861KGoJieXKG-ku8pDoCY8RmFzeLmmru7d7xO0Ar1_3Oy6bWyaLyUFqoszmxNqh29PPN2msg8Psn2vAiS1mHHWeqZbaStsdCwriWSsTCq08Nk5JxHbmIGLKVfENVhbK26RgYhrGXswnWFNJXLbpRQVY9O-CF1tqH9afqlrQYdK7vgcmV5pVSTc/w640-h360/ps_mqs.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7SNS84JkbCBysNuCGgW79lFg86tQ36wFGX5ycmz2SxjxOd0k5VKWvS7VU75RBn7PeZ1U4GOCkxFTlvyL0xd2srJc5JSKHHzZdjPl0YPl21EfGozl0nJgdpcn65D0R8LHc8nc8fmM-FOQa_3nH2eB5BfNVgyveo0fiC5mcC9ZSutGPKWDBZykZpfC8BXE/s640/2023-12-31%2019%2022%2050.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="640" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7SNS84JkbCBysNuCGgW79lFg86tQ36wFGX5ycmz2SxjxOd0k5VKWvS7VU75RBn7PeZ1U4GOCkxFTlvyL0xd2srJc5JSKHHzZdjPl0YPl21EfGozl0nJgdpcn65D0R8LHc8nc8fmM-FOQa_3nH2eB5BfNVgyveo0fiC5mcC9ZSutGPKWDBZykZpfC8BXE/w640-h256/2023-12-31%2019%2022%2050.png" width="640" /></a></div><br /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqHlYRBclYAnhBJpPvdNa5ryRxgxpweWTET7Nfnlm2GNuMXBbnDWEv6FlJmKXsNtayvDTEvtjThCeP0h9IzTdQaCJc7tk433hyxUp0Iw_8Y9Y_KOcOdGzPAK2XhrrNsSePEMrs7XlBGsYbqTKOAF2Pj9OUaKgPEQdYXSmvQh9CjMsD0MGX7ihGF5CLLbg/s878/2024-01-30%2016%2006%2010.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="458" data-original-width="878" height="334" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqHlYRBclYAnhBJpPvdNa5ryRxgxpweWTET7Nfnlm2GNuMXBbnDWEv6FlJmKXsNtayvDTEvtjThCeP0h9IzTdQaCJc7tk433hyxUp0Iw_8Y9Y_KOcOdGzPAK2XhrrNsSePEMrs7XlBGsYbqTKOAF2Pj9OUaKgPEQdYXSmvQh9CjMsD0MGX7ihGF5CLLbg/w640-h334/2024-01-30%2016%2006%2010.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxsZpszf0gqIOIzF-F5s6WMk-1uOXx62-ow9EAm95rnM7Ns-JoJ3ScszXALJ5_kvMNS_OImCHHcF-dLVSfUzs13U1hyJCgGvfkiZLY2NcjaIgknJsrjI70bZ0AW9nXt3CVbahCxBMjKpm-gVdcxrCvUDzaos96YQ9DF1ZfjCHrKO81OzkoYcxp4B7ckfA/s1064/2024-01-30%2016%2006%2041.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="697" data-original-width="1064" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxsZpszf0gqIOIzF-F5s6WMk-1uOXx62-ow9EAm95rnM7Ns-JoJ3ScszXALJ5_kvMNS_OImCHHcF-dLVSfUzs13U1hyJCgGvfkiZLY2NcjaIgknJsrjI70bZ0AW9nXt3CVbahCxBMjKpm-gVdcxrCvUDzaos96YQ9DF1ZfjCHrKO81OzkoYcxp4B7ckfA/w640-h420/2024-01-30%2016%2006%2041.png" width="640" /></a></div><br /><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="background-color: white; border-collapse: collapse; border: none; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><tbody><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">ON Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span><span lang="EN-US">on<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">OFF Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span><span lang="EN-US">off<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT out</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/node-red/out<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT in</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/node-red/out<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Audio Out </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><span style="font-size: large;"><span lang="EN-US">1.<span style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal;"> </span></span><span lang="EN-US">Microsoft Yatinf—Chinese<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Function </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">var onoff=msg.payload;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> </span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">if (onoff=="on")<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">{<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> msg.payload=true;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">}<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">if (onoff=="off")<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">{<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> msg.payload=false;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">} <o:p></o:p></span></p><p class="MsoListParagraph" style="margin-left: 18pt;"><span lang="EN-US" style="font-size: large;">return msg;<o:p></o:p></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">勤益科大</span> <span lang="EN-US">Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span> <span face=""新細明體",serif">勤益科大</span><span lang="EN-US"><o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Hello Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span> <span lang="EN-US">hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT out</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/esp32/hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT in</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/esp32/hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Text </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Label :</span><span face=""新細明體",serif"> 訂閱主題</span><span lang="EN-US"> :<o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: large;">Value format{{msg.payload}}<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Layout:</span><span face=""新細明體",serif"> 上中</span><span lang="EN-US"><o:p></o:p></span></span></p></td></tr></tbody></table><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"></p><p class="MsoNormal" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span lang="EN-US"> </span></p><p><br /></p><p>[{"id":"b3f8ec721059e777","type":"debug","z":"67d337ef020161d4","name":"debug 215","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":40,"wires":[]},{"id":"4c879d39eefe146b","type":"inject","z":"67d337ef020161d4","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"30","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":60,"wires":[[]]},{"id":"23672f0f8e0ad12d","type":"function","z":"67d337ef020161d4","name":"模擬RFID UID","func":"const MIN = 0;\nconst MAX = 255;\nvar hex_v=0;\n//The maximum is exclusive and the minimum is inclusive\nfunction getRandomInt(min = MIN, max = MAX) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min)) + min;\n}\n\nfunction decToHex(dec) {\n hex_v= dec.toString(16);\n if(hex_v<10)\n {\n hex_v= '0'+hex_v;\n }\n return hex_v;\n}\n\nvar no1=getRandomInt(min = MIN, max = MAX);\nvar no2=getRandomInt(min = MIN, max = MAX);\nvar no3=getRandomInt(min = MIN, max = MAX);\nvar no4=getRandomInt(min = MIN, max = MAX);\nvar no5=getRandomInt(min = MIN, max = MAX);\nvar no6=getRandomInt(min = MIN, max = MAX);\nvar no7=getRandomInt(min = MIN, max = MAX);\nvar no8=getRandomInt(min = MIN, max = MAX);\nvar var1=decToHex(no1);\nvar var2=decToHex(no2);\nvar var3=decToHex(no3);\nvar var4=decToHex(no4);\nvar var5=decToHex(no5);\nvar var6=decToHex(no6);\nvar var7=decToHex(no7);\nvar var8=decToHex(no8);\n\nmsg.payload=[var1,var2,var3,var4,var5,var6,var7,var8];\n\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":320,"y":60,"wires":[["a0a0aebe98475ee0"]]},{"id":"a0a0aebe98475ee0","type":"function","z":"67d337ef020161d4","name":"整理輸出","func":"var temp=\"\";\nfor (var i = 0; i < msg.payload.length; i++) \n{\n temp=temp+ \" \" + msg.payload[i];\n temp=temp.toUpperCase();\n}\nmsg.payload=temp;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":480,"y":60,"wires":[["b3f8ec721059e777","7cb46951e2242e13"]]},{"id":"7cb46951e2242e13","type":"mqtt out","z":"67d337ef020161d4","name":"node-red/RFID","topic":"alex9ufo/node-red/RFID","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":660,"y":80,"wires":[]},{"id":"5985ccd980cadbc0","type":"mqtt in","z":"67d337ef020161d4","name":"node-red/out","topic":"alex9ufo/node-red/out","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":550,"y":360,"wires":[["7d50813717d9c144","29cfb54d20b988ba"]]},{"id":"7d50813717d9c144","type":"function","z":"67d337ef020161d4","name":"function LED on ,off","func":"var onoff=msg.payload;\n\nif (onoff==\"on\")\n{\n msg.payload=true;\n}\nif (onoff==\"off\")\n{\n msg.payload=false;\n} \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":750,"y":340,"wires":[["ccb103c0fc516c71"]]},{"id":"ccb103c0fc516c71","type":"ui_led","z":"67d337ef020161d4","order":3,"group":"955405990ff40136","width":3,"height":3,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"","x":930,"y":340,"wires":[]},{"id":"cfd2998590e660dd","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":3,"width":3,"height":1,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":340,"wires":[["3cbd0b17930c8655"]]},{"id":"5da71322cb4f139e","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":5,"width":3,"height":1,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":380,"wires":[["3cbd0b17930c8655"]]},{"id":"3cbd0b17930c8655","type":"mqtt out","z":"67d337ef020161d4","name":"node-red/out","topic":"alex9ufo/node-red/out","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":310,"y":360,"wires":[]},{"id":"18f3c0d36c1ff134","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":7,"width":3,"height":1,"passthru":false,"label":"hello","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"hello","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":540,"wires":[["e3c069f1897ee572"]]},{"id":"e3c069f1897ee572","type":"mqtt out","z":"67d337ef020161d4","name":"esp32/hello","topic":"alex9ufo/esp32/hello","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":310,"y":540,"wires":[]},{"id":"3e679a331c7d78a1","type":"mqtt in","z":"67d337ef020161d4","name":"esp32/hello","topic":"alex9ufo/esp32/hello","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":550,"y":540,"wires":[["a59845502a7ca7e7","998d7a289c204070"]]},{"id":"a59845502a7ca7e7","type":"ui_text","z":"67d337ef020161d4","group":"955405990ff40136","order":9,"width":0,"height":0,"name":"","label":"訂閱主題 : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":730,"y":540,"wires":[]},{"id":"1336ba3046dc85e9","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":9,"width":3,"height":1,"passthru":false,"label":"勤益科大","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"勤益科大","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":500,"wires":[["e3c069f1897ee572"]]},{"id":"29cfb54d20b988ba","type":"ui_audio","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","voice":"Microsoft Yating - Chinese (Traditional, Taiwan)","always":"","x":720,"y":380,"wires":[]},{"id":"998d7a289c204070","type":"ui_audio","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","voice":"Microsoft Yating - Chinese (Traditional, Taiwan)","always":"","x":720,"y":600,"wires":[]},{"id":"3002fa82da16e976","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":1,"width":7,"height":1,"passthru":false,"label":"送RFID UID到MQTT Broker","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":180,"y":120,"wires":[["23672f0f8e0ad12d"]]},{"id":"1bed4dee0d82ca96","type":"mqtt in","z":"67d337ef020161d4","name":"node-red/RFID","topic":"alex9ufo/node-red/RFID","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":540,"y":180,"wires":[["0447f59735f86a0e","62bd73114746850a"]]},{"id":"0447f59735f86a0e","type":"ui_text","z":"67d337ef020161d4","group":"955405990ff40136","order":1,"width":0,"height":0,"name":"","label":"訂閱UID : ","format":"{{msg.payload}}","layout":"row-left","className":"","x":700,"y":180,"wires":[]},{"id":"62bd73114746850a","type":"ui_audio","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","voice":"Microsoft Yating - Chinese (Traditional, Taiwan)","always":"","x":700,"y":240,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"955405990ff40136","type":"ui_group","name":"MQTT 回來的訊息","tab":"68b2e080d17dd8ac","order":2,"disp":true,"width":7,"collapse":false,"className":""},{"id":"680cff3c5de3a744","type":"ui_group","name":"到MQTT的訊息","tab":"68b2e080d17dd8ac","order":2,"disp":true,"width":"7","collapse":false,"className":""},{"id":"68b2e080d17dd8ac","type":"ui_tab","name":"LED","icon":"dashboard","order":1,"disabled":false,"hidden":false}]</p><p><br /></p><p><br /></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-5620231259068123592024-01-29T23:37:00.000-08:002024-01-29T23:38:26.725-08:00 Node-Red MQTT基本實驗<p style="text-align: center;"><span style="font-size: x-large;"><b> <span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; text-align: center;">Node-Red MQTT基本實驗</span></b></span></p><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"></p><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHI8jfv2XLhcNCY9ytG3tar8-K2wuE3o-wFU2hzH8u22m6AtA3Kway9lRGZrzZXVu9OCCNrGStt-xWVGVlZsvfpNh3_uxQzXjoaeU0CJl-6UKZM19NfDYUAvZQvukkxlUM1ZXW8jQKQr9enLGA9_cgs2GCsFwaD0mCRz0G_whQCQ7XhciFZvzHy4OB324/s1280/ps_mqs.png" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="720" data-original-width="1280" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHI8jfv2XLhcNCY9ytG3tar8-K2wuE3o-wFU2hzH8u22m6AtA3Kway9lRGZrzZXVu9OCCNrGStt-xWVGVlZsvfpNh3_uxQzXjoaeU0CJl-6UKZM19NfDYUAvZQvukkxlUM1ZXW8jQKQr9enLGA9_cgs2GCsFwaD0mCRz0G_whQCQ7XhciFZvzHy4OB324/w640-h360/ps_mqs.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh749XOSWnlrcoIFszC9fm9XkrwCpNb0ZOXu2wGEFQ-KsgZNmGaIgLeeTVD8glKf-Jm9QuP-GFVWdYccFCY_B-fQQFI1jQdzNE_HY91Hb1feyLxF4KSJyglMqP_sdajxzhcM9limRQInkuzVf5JC34ht7rh2zphOjDvYMbZuJV2KPV8VNl25T-giwM04uk/s1011/2023-12-31%2019%2022%2050.png" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="405" data-original-width="1011" height="256" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh749XOSWnlrcoIFszC9fm9XkrwCpNb0ZOXu2wGEFQ-KsgZNmGaIgLeeTVD8glKf-Jm9QuP-GFVWdYccFCY_B-fQQFI1jQdzNE_HY91Hb1feyLxF4KSJyglMqP_sdajxzhcM9limRQInkuzVf5JC34ht7rh2zphOjDvYMbZuJV2KPV8VNl25T-giwM04uk/w640-h256/2023-12-31%2019%2022%2050.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><span face="Arial, Tahoma, Helvetica, FreeSans, sans-serif" style="background-color: white; color: #222222; font-size: x-large;"><br /></span><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"></p><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgra-6KFz9LekN9csoS1byElnAqJ1Y4mS_aF_BuMiDJEThIqbBygeqFjrDRre6caTRPjZJkDR1fBMx5NKpXSQAWb7u0OEGJWxXfspsCEWUscEkIi4Gg9yvf-iLg5187tZSzSfuaD0aCyCsu0RyanhBaITda6rWd4lMnt9l6UE0QdJhzrYcVxLmrphHHBAc/s533/2023-12-31%2019%2024%2010.png" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="533" data-original-width="483" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgra-6KFz9LekN9csoS1byElnAqJ1Y4mS_aF_BuMiDJEThIqbBygeqFjrDRre6caTRPjZJkDR1fBMx5NKpXSQAWb7u0OEGJWxXfspsCEWUscEkIi4Gg9yvf-iLg5187tZSzSfuaD0aCyCsu0RyanhBaITda6rWd4lMnt9l6UE0QdJhzrYcVxLmrphHHBAc/w580-h640/2023-12-31%2019%2024%2010.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="580" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilrwZ0XR_Ao47BwMWjM8irK7hJ_hRNCLcSbyTdpdwp1Bx_SNrUbhfY1a47LF1fcp9OkoSWY9tCRQXTxgh7tixYqfQg0dV0Dl3ePCjV4hENHB8Cu61NxkGiqqkzwYi7uJeA5z50YE3c90exmDb-tKuzfqvGB7_SYWkbYP3fxtxqnK97SfRKwDX0_JUwJUI/s594/2023-12-31%2019%2023%2047.png" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="594" data-original-width="510" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilrwZ0XR_Ao47BwMWjM8irK7hJ_hRNCLcSbyTdpdwp1Bx_SNrUbhfY1a47LF1fcp9OkoSWY9tCRQXTxgh7tixYqfQg0dV0Dl3ePCjV4hENHB8Cu61NxkGiqqkzwYi7uJeA5z50YE3c90exmDb-tKuzfqvGB7_SYWkbYP3fxtxqnK97SfRKwDX0_JUwJUI/w550-h640/2023-12-31%2019%2023%2047.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="550" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisIPRIao8kFswjZYkYPqdyoTZYjP43rBwSqXe8nzJhyphenhyphen6mdek1ys1a_uGTnGhWDkLew-32sXHYhnyObA-W8194-JIKYSQev31IvCMoQbo4jRD6k0sKqmFxGwUJwkpNY9x0x41PvMaQfbRADnmW0xXIX4xXkgo3uEBJnhTtwP07HaoNol5BxxvTMAZJna8c/s554/2023-12-31%2019%2045%2017.png" style="color: #2288bb; margin-left: 1em; margin-right: 1em; text-decoration-line: none;"><img border="0" data-original-height="405" data-original-width="554" height="468" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisIPRIao8kFswjZYkYPqdyoTZYjP43rBwSqXe8nzJhyphenhyphen6mdek1ys1a_uGTnGhWDkLew-32sXHYhnyObA-W8194-JIKYSQev31IvCMoQbo4jRD6k0sKqmFxGwUJwkpNY9x0x41PvMaQfbRADnmW0xXIX4xXkgo3uEBJnhTtwP07HaoNol5BxxvTMAZJna8c/w640-h468/2023-12-31%2019%2045%2017.png" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; border: 1px solid rgb(238, 238, 238); box-shadow: rgba(0, 0, 0, 0.1) 1px 1px 5px; padding: 5px; position: relative;" width="640" /></a></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><div class="separator" style="background-color: white; clear: both; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px; text-align: center;"><br /></div><br style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;" /><table border="1" cellpadding="0" cellspacing="0" class="MsoTableGrid" style="background-color: white; border-collapse: collapse; border: none; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><tbody><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">ON Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span><span lang="EN-US">on<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">OFF Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span><span lang="EN-US">off<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT out</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/node-red/out<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT in</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/node-red/out<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Audio Out </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoListParagraph" style="margin-left: 18pt; text-indent: -18pt;"><span style="font-size: large;"><span lang="EN-US">1.<span style="font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-stretch: normal; font-variant-alternates: normal; font-variant-east-asian: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal;"> </span></span><span lang="EN-US">Microsoft Yatinf—Chinese<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Function </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">var onoff=msg.payload;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> </span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">if (onoff=="on")<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">{<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> msg.payload=true;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">}<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">if (onoff=="off")<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">{<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;"> msg.payload=false;<o:p></o:p></span></p><p class="MsoListParagraph"><span lang="EN-US" style="font-size: large;">} <o:p></o:p></span></p><p class="MsoListParagraph" style="margin-left: 18pt;"><span lang="EN-US" style="font-size: large;">return msg;<o:p></o:p></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">勤益科大</span> <span lang="EN-US">Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span> <span face=""新細明體",serif">勤益科大</span><span lang="EN-US"><o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Hello Bouuton </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Payload :</span><span face=""新細明體",serif"> </span> <span lang="EN-US">hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT out</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/esp32/hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">MQTT in</span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Server :broker.hivemq.com :</span><span face=""新細明體",serif"> </span><span lang="EN-US">1883<o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Qos=1 </span><span face=""新細明體",serif">保留</span><span lang="EN-US">: </span><span face=""新細明體",serif">是</span><span lang="EN-US"><o:p></o:p></span></span></p><p class="MsoNormal"><span style="font-size: large;"><span face=""新細明體",serif">發行主題</span><span lang="EN-US"> : alex9ufo/esp32/hello<o:p></o:p></span></span></p></td></tr><tr><td style="border: 1pt solid windowtext; padding: 0cm 5.4pt; width: 140.1pt;" valign="top" width="187"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Text </span><span face=""新細明體",serif">節點</span><span lang="EN-US"><o:p></o:p></span></span></p></td><td style="border-bottom: 1pt solid windowtext; border-left: none; border-right: 1pt solid windowtext; border-top: none; padding: 0cm 5.4pt; width: 278pt;" valign="top" width="371"><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Label :</span><span face=""新細明體",serif"> 訂閱主題</span><span lang="EN-US"> :<o:p></o:p></span></span></p><p class="MsoNormal"><span lang="EN-US" style="font-size: large;">Value format{{msg.payload}}<o:p></o:p></span></p><p class="MsoNormal"><span style="font-size: large;"><span lang="EN-US">Layout:</span><span face=""新細明體",serif"> 上中</span><span lang="EN-US"><o:p></o:p></span></span></p></td></tr></tbody></table><p style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"></p><p class="MsoNormal" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span lang="EN-US"> </span></p><p class="MsoNormal" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;"><span lang="EN-US"><span style="font-size: x-large;">Node-Red程式</span></span></p><p class="MsoNormal" style="background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13.2px;">[{"id":"5985ccd980cadbc0","type":"mqtt in","z":"67d337ef020161d4","name":"node-red/out","topic":"alex9ufo/node-red/out","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":150,"y":320,"wires":[["7d50813717d9c144","29cfb54d20b988ba"]]},{"id":"7d50813717d9c144","type":"function","z":"67d337ef020161d4","name":"function LED on ,off","func":"var onoff=msg.payload;\n\nif (onoff==\"on\")\n{\n msg.payload=true;\n}\nif (onoff==\"off\")\n{\n msg.payload=false;\n} \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":330,"y":320,"wires":[["ccb103c0fc516c71"]]},{"id":"ccb103c0fc516c71","type":"ui_led","z":"67d337ef020161d4","order":3,"group":"680cff3c5de3a744","width":3,"height":2,"label":"","labelPlacement":"left","labelAlignment":"left","colorForValue":[{"color":"#ff0000","value":"false","valueType":"bool"},{"color":"#008000","value":"true","valueType":"bool"}],"allowColorForValueInMessage":false,"shape":"circle","showGlow":true,"name":"","x":490,"y":320,"wires":[]},{"id":"cfd2998590e660dd","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":9,"width":3,"height":1,"passthru":false,"label":"ON","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"on","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":240,"wires":[["3cbd0b17930c8655"]]},{"id":"5da71322cb4f139e","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":11,"width":3,"height":1,"passthru":false,"label":"OFF","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"off","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":280,"wires":[["3cbd0b17930c8655"]]},{"id":"3cbd0b17930c8655","type":"mqtt out","z":"67d337ef020161d4","name":"node-red/out","topic":"alex9ufo/node-red/out","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":310,"y":260,"wires":[]},{"id":"18f3c0d36c1ff134","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":14,"width":3,"height":1,"passthru":false,"label":"hello","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"hello","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":440,"wires":[["e3c069f1897ee572"]]},{"id":"e3c069f1897ee572","type":"mqtt out","z":"67d337ef020161d4","name":"esp32/hello","topic":"alex9ufo/esp32/hello","qos":"1","retain":"true","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":310,"y":440,"wires":[]},{"id":"3e679a331c7d78a1","type":"mqtt in","z":"67d337ef020161d4","name":"esp32/hello","topic":"alex9ufo/esp32/hello","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":150,"y":500,"wires":[["a59845502a7ca7e7","998d7a289c204070"]]},{"id":"a59845502a7ca7e7","type":"ui_text","z":"67d337ef020161d4","group":"680cff3c5de3a744","order":8,"width":0,"height":0,"name":"","label":"訂閱主題 : ","format":"{{msg.payload}}","layout":"row-center","className":"","x":350,"y":500,"wires":[]},{"id":"1336ba3046dc85e9","type":"ui_button","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","order":12,"width":3,"height":1,"passthru":false,"label":"勤益科大","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"勤益科大","payloadType":"str","topic":"topic","topicType":"msg","x":140,"y":400,"wires":[["e3c069f1897ee572"]]},{"id":"29cfb54d20b988ba","type":"ui_audio","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","voice":"Microsoft Yating - Chinese (Traditional, Taiwan)","always":"","x":300,"y":360,"wires":[]},{"id":"998d7a289c204070","type":"ui_audio","z":"67d337ef020161d4","name":"","group":"680cff3c5de3a744","voice":"Microsoft Yating - Chinese (Traditional, Taiwan)","always":"","x":340,"y":540,"wires":[]},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"680cff3c5de3a744","type":"ui_group","name":"LED ON OFF","tab":"68b2e080d17dd8ac","order":2,"disp":true,"width":7,"collapse":false,"className":""},{"id":"68b2e080d17dd8ac","type":"ui_tab","name":"LED","icon":"dashboard","order":1,"disabled":false,"hidden":false}]</p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-78730135854049752412024-01-29T20:16:00.000-08:002024-01-29T23:09:39.894-08:002024 RFID 作業1 (ESP32 + MFRC522 + MQTT + Node-Red )<p><b><span style="font-size: x-large;">2024 RFID 作業1 (ESP32 + MFRC522 + MQTT + Node-Red )</span></b></p><p><span style="font-size: large;">系統圖:</span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikVWAfSbkdd_jJj5TElBzH2jjl9m5557Evv-kpihQRybMNl7crLOlP0JreHnfr_nslXY92epcmid0if-ei1Zz4xJvZd_WqWhbmjpX8OFvNmOqPRJEnjpQMzO8HvZLpC_LQHjhgIClWcGwMftqc_R-j9f_LyWHmKzEahBIUkkTnuDwpITPW8FJEVp9gk6M/s1095/2024-01-30%2011%2017%2001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="704" data-original-width="1095" height="412" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikVWAfSbkdd_jJj5TElBzH2jjl9m5557Evv-kpihQRybMNl7crLOlP0JreHnfr_nslXY92epcmid0if-ei1Zz4xJvZd_WqWhbmjpX8OFvNmOqPRJEnjpQMzO8HvZLpC_LQHjhgIClWcGwMftqc_R-j9f_LyWHmKzEahBIUkkTnuDwpITPW8FJEVp9gk6M/w640-h412/2024-01-30%2011%2017%2001.png" width="640" /></a></div><br /><span style="font-size: large;"><br /></span><p></p><p><span style="font-size: large;">硬體: </span><span style="font-size: x-large;">usb 線 </span><span style="font-size: x-large;">MFRC522 + 卡片 </span><span style="font-size: x-large;">ESP32 </span></p><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCeIqN-JApTeP1hEWKXpWj9QQxDnEa4p9iyonF29lJI953HaHjWacsaRiVYVoVgCkLIaZvJhwoDwQCXBHDhEiomSFTWpV4v9kFf6dN1cd2UmPLJ0o34azuFTk6Hp0QrUJzWKB8_sTdRuyjztwyQbW8Rm3ES_y-gyc9tNjK1bi5pHORhr1FUQnNWmRWpg0/s444/2024-01-30%2011%2019%2055.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="431" data-original-width="444" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCeIqN-JApTeP1hEWKXpWj9QQxDnEa4p9iyonF29lJI953HaHjWacsaRiVYVoVgCkLIaZvJhwoDwQCXBHDhEiomSFTWpV4v9kFf6dN1cd2UmPLJ0o34azuFTk6Hp0QrUJzWKB8_sTdRuyjztwyQbW8Rm3ES_y-gyc9tNjK1bi5pHORhr1FUQnNWmRWpg0/s320/2024-01-30%2011%2019%2055.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqXLUxzOaUmr76KDRNQF9hAXZlOpdUmmRIOIz96HiAr32DS1nHT5HR0CDMK_uAQBSXt1FkFWHO3UTu9TIa90ERtsR0I2T9tzT-L6ODQVK8RN-HkyGLSzdYjFaTJIU4z1-DvcNlIVb4Rfr47x2ZF0P6ykaVchvUmhi_-HWP3AnJ9b5emSylQ8fFXnvNz-o/s414/2024-01-30%2011%2020%2030.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="319" data-original-width="414" height="247" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqXLUxzOaUmr76KDRNQF9hAXZlOpdUmmRIOIz96HiAr32DS1nHT5HR0CDMK_uAQBSXt1FkFWHO3UTu9TIa90ERtsR0I2T9tzT-L6ODQVK8RN-HkyGLSzdYjFaTJIU4z1-DvcNlIVb4Rfr47x2ZF0P6ykaVchvUmhi_-HWP3AnJ9b5emSylQ8fFXnvNz-o/s320/2024-01-30%2011%2020%2030.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtSbNooqIEmzM2TVIRJVcSXjWdvuRJD354TE4oAbItTxJYaQ1Same940dxZ9wX2E-7nMnjr2_lWdS1S8P4_KnMA0x94wCHBlDlZPhtBA2YuTHYlBLnk1m9BWpVqL5uWX3J3hLygB5Si5A-YCVPMVV64KduX8hjoQI8x98DChGub5AGmM2l2DI_AZyBh3s/s420/2024-01-30%2011%2021%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="420" data-original-width="262" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtSbNooqIEmzM2TVIRJVcSXjWdvuRJD354TE4oAbItTxJYaQ1Same940dxZ9wX2E-7nMnjr2_lWdS1S8P4_KnMA0x94wCHBlDlZPhtBA2YuTHYlBLnk1m9BWpVqL5uWX3J3hLygB5Si5A-YCVPMVV64KduX8hjoQI8x98DChGub5AGmM2l2DI_AZyBh3s/s320/2024-01-30%2011%2021%2031.png" width="200" /></a></div><div><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpB5h7LsTvscbQVDOL_5m5SC8HHLmTbPJsaIeUK7Kujwuu3pp2eSwrhVGgekYlUJ2nSpQTxb1eTC1AhYTZJ_QJ9SEfSkb6z-GPQGtkR9GkXHfm1r_WrNUD_Xa4QD6Ki1U2Gy6cX4YvkHZ2_WM8irYPQBfLPa2Di49OR3ZbhDoML8M2X8qMKxXhSerwrgk/s804/ESP32+MFRC522_2.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="804" data-original-width="539" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpB5h7LsTvscbQVDOL_5m5SC8HHLmTbPJsaIeUK7Kujwuu3pp2eSwrhVGgekYlUJ2nSpQTxb1eTC1AhYTZJ_QJ9SEfSkb6z-GPQGtkR9GkXHfm1r_WrNUD_Xa4QD6Ki1U2Gy6cX4YvkHZ2_WM8irYPQBfLPa2Di49OR3ZbhDoML8M2X8qMKxXhSerwrgk/w430-h640/ESP32+MFRC522_2.png" width="430" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><ul style="background: rgb(255, 255, 255); border: 0px; box-sizing: border-box; color: #666666; font-family: Dosis, Helvetica, Arial, Lucida, sans-serif; line-height: 26px; list-style-image: initial; list-style-position: initial; margin: 0px 0px 0px 40px; outline: 0px; padding: 0px 0px 23px 1em; text-size-adjust: 100%; vertical-align: baseline;"><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">Vcc <-> 3V3 (or Vin(5V) depending on the module version)</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">RST (Reset) <-> D0</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">GND (Masse) <-> GND</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">MISO (Master Input Slave Output) <-> 19</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">MOSI (Master Output Slave Input) <-> 23</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">SCK (Serial Clock) <-> 18</span></b></li><li style="background: transparent; border: 0px; box-sizing: border-box; margin: 0px; outline: 0px; padding: 0px; text-size-adjust: 100%; vertical-align: baseline;"><b><span style="font-size: medium;">SS/SDA (Slave select) <-> 5</span></b><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFGx3DMogMFtb9Et0rCSnu_NyTn1UcoGEgZpHxF6NqFPzD5Sd4O-PWLy7MNCNbwEdEMj1rkuQE0WSX09AY2edyJlnHTKhz_BS3ekZNc0c1OZbZ8wLKcaqOqfHsfCVk1e19_haHEt3lKjIqFNWUBkDe_ZBKIX86lxxX-2pQUvTM_B0OyuJ_Tc1bzP5TYTw/s1035/nodemcu-esp32-rfid-rc522_bb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><span style="font-size: large;"><b><img border="0" data-original-height="1035" data-original-width="618" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFGx3DMogMFtb9Et0rCSnu_NyTn1UcoGEgZpHxF6NqFPzD5Sd4O-PWLy7MNCNbwEdEMj1rkuQE0WSX09AY2edyJlnHTKhz_BS3ekZNc0c1OZbZ8wLKcaqOqfHsfCVk1e19_haHEt3lKjIqFNWUBkDe_ZBKIX86lxxX-2pQUvTM_B0OyuJ_Tc1bzP5TYTw/w382-h640/nodemcu-esp32-rfid-rc522_bb.png" width="382" /></b></span></a></div><br /></li></ul><span style="font-size: large;"><br /></span><p></p><p><span style="font-size: large;">軟體:</span></p><p><span style="font-size: large;">Arduino IDE <a href="https://www.arduino.cc/en/software">https://www.arduino.cc/en/software</a></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP5UnQYahaIxQWHFGsyi0E3IYjHhYd8PMOqzlsoX81inNeEetdOhyWFoWNjIk9ngkK2-RhGm3a2dN1tJKglGl41lyvZGefFtZEMKQQ8xNJKdCL-R44WZQPpS72rdvujIcw87wMNxFo0z4Svd61JbhAlN_6KKefmEslhoUyiL5ymr3zm0r7jsMIzz_iGkI/s950/2024-01-30%2011%2023%2005.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="417" data-original-width="950" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP5UnQYahaIxQWHFGsyi0E3IYjHhYd8PMOqzlsoX81inNeEetdOhyWFoWNjIk9ngkK2-RhGm3a2dN1tJKglGl41lyvZGefFtZEMKQQ8xNJKdCL-R44WZQPpS72rdvujIcw87wMNxFo0z4Svd61JbhAlN_6KKefmEslhoUyiL5ymr3zm0r7jsMIzz_iGkI/w400-h175/2024-01-30%2011%2023%2005.png" width="400" /></a></div><br /><p><br /></p><p><span style="font-size: large;">MQTT Explorer <a href="https://mqtt-explorer.com/">https://mqtt-explorer.com/</a></span></p><h2 aria-describedby="popover342335" class="part" data-endline="83" data-id="推薦2-MQTT-explorer" data-original-title="" data-startline="83" id="推薦2-MQTT-explorer" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; border-bottom: 1px solid rgb(238, 238, 238); box-sizing: border-box; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, "PingFang TC", "Microsoft JhengHei", 微軟正黑, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; letter-spacing: 0.35px; line-height: 1.25; margin-bottom: 16px; margin-top: 24px; padding-bottom: 0.3em;" title=""><span data-position="1548" data-size="17" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">MQTT-explorer</span><div class="popover selection-popover top in" id="popover342335" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-clip: padding-box; background-color: #777777; border-radius: 6px; border: 1px solid rgba(0, 0, 0, 0.2); box-shadow: rgba(0, 0, 0, 0.2) 0px 5px 10px; box-sizing: border-box; color: white; cursor: pointer; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-weight: 400; left: 340.055px; letter-spacing: normal; line-break: auto; line-height: 1.42857; margin-top: -10px; max-width: 276px; overflow-wrap: normal; padding: 1px; position: absolute; text-shadow: none; text-wrap: nowrap; top: 6628.34px; word-break: normal; word-spacing: normal; z-index: 1000;"><div class="arrow" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border-color: transparent; border-style: solid; border-width: 11px 11px 0px; bottom: -11px; box-sizing: border-box; height: 0px; left: 1px; margin-left: -11px; position: absolute; width: 0px;"></div><div class="popover-inner" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;"><div class="popover-content !px-0" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-bottom: 9px; padding-left: 0px !important; padding-right: 0px !important; padding-top: 9px; padding: 9px 0px; user-select: none;"></div></div></div></h2><p class="part" data-endline="84" data-position="1566" data-size="0" data-startline="84" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; box-sizing: border-box; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, "PingFang TC", "Microsoft JhengHei", 微軟正黑, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; letter-spacing: 0.35px; margin: 0px 0px 16px;"><img alt="" data-position="1566" data-rawsrc="https://i.imgur.com/BVWiCWX.png" data-size="36" loading="lazy" src="https://imgur-backup.hackmd.io/BVWiCWX.png" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px; box-sizing: content-box; max-width: 100%; vertical-align: middle;" /></p><p class="part" data-endline="86" data-original-title="" data-position="1604" data-size="0" data-startline="86" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; box-sizing: border-box; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, "PingFang TC", "Microsoft JhengHei", 微軟正黑, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; letter-spacing: 0.35px; margin: 0px 0px 16px;" title=""><a href="https://mqtt-explorer.com/" rel="noopener" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: transparent; box-sizing: border-box; color: #337ab7; text-decoration-line: none;" target="_blank">https://mqtt-explorer.com/</a></p><p class="part" data-endline="89" data-position="1632" data-size="0" data-startline="88" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; box-sizing: border-box; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, "PingFang TC", "Microsoft JhengHei", 微軟正黑, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; letter-spacing: 0.35px; margin: 0px 0px 16px;"><span data-position="1632" data-size="21" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">MQTT-explorer</span><span data-position="1654" data-size="9" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">提供了更完整的功能</span></p><ul class="part" data-endline="99" data-original-title="" data-position="1664" data-size="0" data-startline="90" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; background-color: white; box-sizing: border-box; color: #333333; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, Roboto, Arial, "PingFang TC", "Microsoft JhengHei", 微軟正黑, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; font-size: 16px; letter-spacing: 0.35px; margin-bottom: 16px; margin-top: 0px; padding-left: 2em;" title=""><li data-endline="90" data-position="1666" data-size="0" data-startline="90" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;"><span data-position="1666" data-size="16" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">可視化Topic和Topic活動</span></li><li data-endline="91" data-position="1685" data-size="0" data-startline="91" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1685" data-size="10" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">刪除保留的Topic</span></li><li data-endline="92" data-position="1698" data-size="0" data-startline="92" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1698" data-size="10" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">搜索/過濾Topic</span></li><li data-endline="93" data-position="1711" data-size="0" data-startline="93" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1711" data-size="7" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">發布Topic</span></li><li data-endline="94" data-position="1721" data-size="0" data-startline="94" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1721" data-size="15" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">繪製數值類型的Topic折線圖</span></li><li data-endline="95" data-position="1739" data-size="0" data-startline="95" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1739" data-size="14" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">保留每個Topic的歷史記錄</span></li><li data-endline="99" data-position="1756" data-size="0" data-startline="96" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box; padding-top: 0.25em;"><span data-position="1756" data-size="9" style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgb(59 130 246 / .5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 #0000; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 #0000; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 #0000; --tw-shadow: 0 0 #0000; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; box-sizing: border-box;">深色/淺色外觀主題</span></li></ul><p><span style="font-size: large;"></span></p><div class="separator" style="clear: both; text-align: center;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSbm8ohactsYo1eBWaJyylkxDKAeLaIGw27ZEe6OetqwrqnvIW6o-sETh1L2HnBSEgmvADA6w3F7Sae6gBwUpftwWueu7sNJffOPO9jvY9j_h8HHun5sQ2XUuIZ7VuBWZhvoKe7R289D1GahFshKblshYtEKVVOttbGoXEXZqH_Lo2k5JKX853AQRbsOg/s1039/2024-01-30%2011%2024%2039.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="584" data-original-width="1039" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSbm8ohactsYo1eBWaJyylkxDKAeLaIGw27ZEe6OetqwrqnvIW6o-sETh1L2HnBSEgmvADA6w3F7Sae6gBwUpftwWueu7sNJffOPO9jvY9j_h8HHun5sQ2XUuIZ7VuBWZhvoKe7R289D1GahFshKblshYtEKVVOttbGoXEXZqH_Lo2k5JKX853AQRbsOg/w400-h225/2024-01-30%2011%2024%2039.png" width="400" /></a></div><br /><span style="font-size: large;"><br /></span></div><span style="font-size: large;">Node-Red 安裝方法 </span><div><span style="font-size: large;"><br /></span><div><span style="font-size: large;"><a href="https://ithelp.ithome.com.tw/articles/10201795">https://ithelp.ithome.com.tw/articles/10201795</a></span><p></p><p><span style="font-size: large;"><br /></span></p><p><span style="font-size: large;">Node-Red Dashboard 安裝方法</span></p><p><span style="font-size: x-large;"> </span><a href="http://blog.3dgowl.com/node-red-dashboard%E5%84%80%E8%A1%A8%E6%9D%BF/" style="font-size: x-large;">http://blog.3dgowl.com/node-red-dashboard%E5%84%80%E8%A1%A8%E6%9D%BF/</a></p><p><span style="font-size: large;"><br /><br /></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUV1ykMUD8_eGW3T6AzbnsvTKvekosh0flzPnoWAiHY8eBDp3vbHma_3CR2ky09aMB54W6rFGU5gT_ioMkHBha11_pEW3mh4xMtgbLZ3BrFjHwdTNPSK_xfsG_lgE-Ff2tPicsgh7tzX68TS6vy2WagGxGVjMZSj-1-E5ULDKL1bAZyZP2Qvt5Hhj_C5g/s666/2024-01-30%2011%2027%2047.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="666" data-original-width="593" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUV1ykMUD8_eGW3T6AzbnsvTKvekosh0flzPnoWAiHY8eBDp3vbHma_3CR2ky09aMB54W6rFGU5gT_ioMkHBha11_pEW3mh4xMtgbLZ3BrFjHwdTNPSK_xfsG_lgE-Ff2tPicsgh7tzX68TS6vy2WagGxGVjMZSj-1-E5ULDKL1bAZyZP2Qvt5Hhj_C5g/s320/2024-01-30%2011%2027%2047.png" width="285" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxBoVA3wN6fHxCmtiMR2psaOwqZ3QizasgayuBYTy3Hb9iZcY4Rdmu7r_9g9tOCy1UR-EJ0wkqGclTACMVGKIMk_Bc5wXWP8iHuLFoPaess9hiWnysl6mpJuwqGDPDYqXt-bykRoVPNTr1LAV7riGTAv4N7lc6dhH_ggvR7mU-89EdSimHZmROkbhrEE/s770/2024-01-30%2011%2026%2013.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="688" data-original-width="770" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfxBoVA3wN6fHxCmtiMR2psaOwqZ3QizasgayuBYTy3Hb9iZcY4Rdmu7r_9g9tOCy1UR-EJ0wkqGclTACMVGKIMk_Bc5wXWP8iHuLFoPaess9hiWnysl6mpJuwqGDPDYqXt-bykRoVPNTr1LAV7riGTAv4N7lc6dhH_ggvR7mU-89EdSimHZmROkbhrEE/s320/2024-01-30%2011%2026%2013.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p><span style="font-size: large;"> ESP32與MFRC522連接方式 (<span style="background-color: red;">請 留意 每個人買到的ESP32 腳位 會不太一樣</span>)</span></p><p><span style="font-size: large;"></span></p><h1 class="entry-title" style="background-color: white; border: 0px; box-sizing: border-box; color: #ba3925; font-family: Poppins; line-height: 1.22; margin: 0px auto 15px; outline: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; vertical-align: baseline; width: 700px;"><span style="font-size: medium;"><br /></span></h1><h1 class="entry-title" style="background-color: white; border: 0px; box-sizing: border-box; color: #ba3925; font-family: Poppins; line-height: 1.22; margin: 0px auto 15px; outline: 0px; overflow-wrap: break-word; padding: 0px; text-align: left; vertical-align: baseline; width: 700px;"><span style="font-size: medium;">ESP32 Pinout Reference – A Complete Guide</span></h1><p><span style="font-size: large;"><a href="https://linuxhint.com/esp32-pinout-reference/#1.1">https://linuxhint.com/esp32-pinout-reference/#1.1</a></span></p><p><span style="font-size: large;"><br /></span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">==== =========================================================</span></div></div><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_bT1RNNZJ3b4VT0-TjBdZ-TSXysL_4AlVBuGLgU085FhqI5qNvtZZc5IMOVQD0UbfCcNGZcHIGvEYL5kd9TH5MquE1B5h8XxDLqrFXATrZbb_g8urTgh524tB-bnjansb3J-UN7HI6-F1ALloGb461b-9qo0CvNR0z3nZqk5eMD5EGXWTdnJMafMSEq4/s750/RC522-RFID-Reader-Module-Pinout.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="750" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_bT1RNNZJ3b4VT0-TjBdZ-TSXysL_4AlVBuGLgU085FhqI5qNvtZZc5IMOVQD0UbfCcNGZcHIGvEYL5kd9TH5MquE1B5h8XxDLqrFXATrZbb_g8urTgh524tB-bnjansb3J-UN7HI6-F1ALloGb461b-9qo0CvNR0z3nZqk5eMD5EGXWTdnJMafMSEq4/w400-h308/RC522-RFID-Reader-Module-Pinout.jpg" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTCNLnvnA9txUn-F93-H1DmVipUGqdsCLS7ymXCChfyFKo7mrqr1VI-pn57iKUjSvxak5d1UZhaR8pPUJsc0cDTEkb-d2OkHTHekGAVZ1bZn5QnjIlr1Xtx-Qa_NDpvriHrx_DJ6wIihjhRDi5LMCt6W8zE_fMzZ2GbeQQ7-5bg7dbWaOmb578JE0ArZc/s750/RFID-Reader-Module-Working.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="750" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTCNLnvnA9txUn-F93-H1DmVipUGqdsCLS7ymXCChfyFKo7mrqr1VI-pn57iKUjSvxak5d1UZhaR8pPUJsc0cDTEkb-d2OkHTHekGAVZ1bZn5QnjIlr1Xtx-Qa_NDpvriHrx_DJ6wIihjhRDi5LMCt6W8zE_fMzZ2GbeQQ7-5bg7dbWaOmb578JE0ArZc/w400-h249/RFID-Reader-Module-Working.gif" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguf9cTrxqlb2iiuRkCQNnAhE4ZylAlY9gmgSZtKi4eAxO_1JZvYOoRw2ZFlRDQn4rRgdDpjBY89ril0j4XZAbsoQKn0C3wJLng-PKoayzEDOO3OV-hqoUhMCcaTPZIL1h6useNlyrvUqaosl1dGnB7OtupeEY92Tf-R6eqH2V6WQbEpK8NsWGu96I6AP8/s348/MIFIRE.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="145" data-original-width="348" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguf9cTrxqlb2iiuRkCQNnAhE4ZylAlY9gmgSZtKi4eAxO_1JZvYOoRw2ZFlRDQn4rRgdDpjBY89ril0j4XZAbsoQKn0C3wJLng-PKoayzEDOO3OV-hqoUhMCcaTPZIL1h6useNlyrvUqaosl1dGnB7OtupeEY92Tf-R6eqH2V6WQbEpK8NsWGu96I6AP8/w400-h166/MIFIRE.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><span style="background-color: #04ff00; font-size: large;"><br /></span><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBwkJsOV2IKjVvokhhKDXDM5Nv4cKRPSuuvBCzPYXAK2SPvPaa6XsZHEWJgnGCn6CHTyhifFUC_TY4U_4TfpOKLDaMNSPL9OqRgSwBRCefC-9_PJSWAgTjf5j6dgPyKCeUPcPZvzQRNX-s3xaNXUwNnEwJduxIj5_vNWz-LCbf1h0aA4dd7QJ-vKvw-k/s747/2024-01-30%2013%2011%2031.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="428" data-original-width="747" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBwkJsOV2IKjVvokhhKDXDM5Nv4cKRPSuuvBCzPYXAK2SPvPaa6XsZHEWJgnGCn6CHTyhifFUC_TY4U_4TfpOKLDaMNSPL9OqRgSwBRCefC-9_PJSWAgTjf5j6dgPyKCeUPcPZvzQRNX-s3xaNXUwNnEwJduxIj5_vNWz-LCbf1h0aA4dd7QJ-vKvw-k/w400-h229/2024-01-30%2013%2011%2031.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8aMeejXUWJOY9KqdMTtr58oae9Vp9ef_VkxP3hOVL7At9yERjkn08EYEQpLkdOz2Y6culX8MHycJRzZNzlAeXlLbVA6jKTs6Fg3LqMYHaF_zZ-j_oVQ1uUdcK39BRhOebR-Lhok-qJFe7P7EMqMiewS4WL4sSfO7GXgKj5IBH2V6EldQNvO8_BLMezJU/s752/2024-01-30%2013%2011%2007.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="653" data-original-width="752" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg8aMeejXUWJOY9KqdMTtr58oae9Vp9ef_VkxP3hOVL7At9yERjkn08EYEQpLkdOz2Y6culX8MHycJRzZNzlAeXlLbVA6jKTs6Fg3LqMYHaF_zZ-j_oVQ1uUdcK39BRhOebR-Lhok-qJFe7P7EMqMiewS4WL4sSfO7GXgKj5IBH2V6EldQNvO8_BLMezJU/w400-h348/2024-01-30%2013%2011%2007.png" width="400" /></a></div><br /><p><span style="background-color: #04ff00; font-size: large;">arduino_secrets.h 檔案內容</span><span style="background-color: #04ff00; font-size: x-large;">用wordpad 編輯存檔</span></p><p><span style="background-color: #04ff00; font-size: large;">#define SECRET_SSID ""</span></p><p><span style="background-color: #04ff00; font-size: large;">#define SECRET_PASS ""</span></p><p><span style="font-size: large;"><span style="background-color: #04ff00;">沒有此檔案 compile (Verify)會錯誤</span></span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaKJl9t5Vd1y7u8U478ygSnUniqjui5aXghahilb8lZ0tyB2gwIW-AERzpjHcOqSw2ioGThA7P1xHgKKNPm-la_Md-F-V4prx6G7DOpjvjrQU8Z77ysTEL791LTltllYijY2JcLWPaXTT3grdwu6Nbzt2tKOMg_mgeS2eFxDNK4FHi4QjayeU8m3BrRVI/s314/2024-01-30%2011%2007%2052.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="183" data-original-width="314" height="373" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaKJl9t5Vd1y7u8U478ygSnUniqjui5aXghahilb8lZ0tyB2gwIW-AERzpjHcOqSw2ioGThA7P1xHgKKNPm-la_Md-F-V4prx6G7DOpjvjrQU8Z77ysTEL791LTltllYijY2JcLWPaXTT3grdwu6Nbzt2tKOMg_mgeS2eFxDNK4FHi4QjayeU8m3BrRVI/w640-h373/2024-01-30%2011%2007%2052.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6URFgdXQWU68clFOeoOxox2tK_v2hUgXaW1GgmM-GafX5XnyRRGYAgIqVoGfV0iuEw29x9JWnZAHhPhmDXrtPcQQWC2KEWeduChvw-B2xj4syJhTJZWOPaufvUmrxad6f3KYVMlC_9SYMH5gE8U84Lh-VXueLU03kMzC6oX24PA1X8s7LWbkxB0ErXRk/s570/2024-01-30%2011%2011%2021.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="445" data-original-width="570" height="500" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6URFgdXQWU68clFOeoOxox2tK_v2hUgXaW1GgmM-GafX5XnyRRGYAgIqVoGfV0iuEw29x9JWnZAHhPhmDXrtPcQQWC2KEWeduChvw-B2xj4syJhTJZWOPaufvUmrxad6f3KYVMlC_9SYMH5gE8U84Lh-VXueLU03kMzC6oX24PA1X8s7LWbkxB0ErXRk/w640-h500/2024-01-30%2011%2011%2021.png" width="640" /></a></div><br /><div><br /></div><div><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><br /><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">// Wifi 與 MQttClient 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">//MFRC522 程式庫</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><br /><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/RFID/read"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/RFID/back"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/will"</span>;</div><div><span style="color: #7f8c8d;">//======================================================</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String topicIN=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> topicIN=topicIN+(<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><br /><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topicIN);</div><div> <span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">trim</span>();</div><div>}</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open: </span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);<span style="color: #7f8c8d;"> // Initialize serial communications with the PC</span></div><div> <span style="color: #c586c0;">while</span> (!Serial);<span style="color: #7f8c8d;"> // Do nothing if no serial port is opened (added for Arduinos based on ATMEGA32U4)</span></div><div> </div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> </div><div> String willPayload = <span style="color: #7fcbcd;">"oh no!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><br /><br /><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();<span style="color: #7f8c8d;"> // Init SPI bus</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // Init MFRC522</span></div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">4</span>);<span style="color: #7f8c8d;"> // Optional delay. Some board do need more time after init to be ready, see Readme</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_DumpVersionToSerial</span>();<span style="color: #7f8c8d;"> // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Scan PICC to see UID, SAK, type, and data blocks..."</span>));</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div> </div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><br /><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = json +(<span style="color: #7fcbcd;">" Card UID: "</span>);</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> json = json +(<span style="color: #7fcbcd;">" , PICC type: "</span>);</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> </span><span style="color: #7f8c8d;">// Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div style="line-height: 27px;"><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_DumpToSerial</span>(&(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div></div><div><span style="color: #7f8c8d;"><br /></span></div><div><span style="color: #7f8c8d;"><br /></span></div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">////===========================================================</span></div></div></div><div><br /></div><div><span style="font-size: large;"><b>Node-Red程式:</b></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="background-color: #fcff01; font-size: medium;">[{"id":"4499ce1a4824f4e6","type":"ui_text","z":"3c83a362ab19a958","group":"c3d8097ebce346d7","order":1,"width":10,"height":2,"name":"","label":"ESP回來字串","format":"{{msg.payload}}","layout":"row-spread","className":"","x":400,"y":120,"wires":[]},{"id":"088e9a8c1ed9784e","type":"mqtt in","z":"3c83a362ab19a958","name":"","topic":"alex9ufo/RFID/back","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":170,"y":120,"wires":[["4499ce1a4824f4e6"]]},{"id":"c3d8097ebce346d7","type":"ui_group","name":"RFID UID READ","tab":"048debf3dd7e9641","order":3,"disp":true,"width":10,"collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"048debf3dd7e9641","type":"ui_tab","name":"2024 RFID ","icon":"dashboard","disabled":false,"hidden":false}]</span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="font-size: large;"><b>把 node-red 程式 copy 後 匯入到 node-red中 </b></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><div class="x11i5rnm xat24cr x1mh8g0r x1vvkbs xtlvy1s x126k92a" style="background-color: white; color: #050505; font-family: "Segoe UI Historic", "Segoe UI", Helvetica, Arial, sans-serif; margin: 0.5em 0px 0px; overflow-wrap: break-word; white-space-collapse: preserve;"><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">一、安裝/刪除節點</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">1.點選右上角的三條橫線下拉選單→「節點管理」(圖1)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">2.進入後可以看到已安裝的節點,在此可以禁用或刪除(圖2)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">3.被刪除的節點可以再次重新安裝</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">4.切換至安裝頁面,上方可輸入關鍵字搜尋(圖3)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">5.選取要得節點後按下右下角安裝即會進入安裝狀態</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">特別提醒:安裝和刪除時請確保Node-RED正確運作,切勿關閉或斷線,會造成系統異常而無法開啟和編輯</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">6.新增的節點將會出現於主畫面左側的節點區</span></div></div><div class="x11i5rnm xat24cr x1mh8g0r x1vvkbs xtlvy1s x126k92a" style="background-color: white; color: #050505; font-family: "Segoe UI Historic", "Segoe UI", Helvetica, Arial, sans-serif; margin: 0.5em 0px 0px; overflow-wrap: break-word; white-space-collapse: preserve;"><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">二、匯入/匯出流程</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">1.點選右上角的三條橫線下拉選單→「匯入、匯出」(圖4)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">(1)匯入:將外部檔案放入自己的Node-RED中編輯使用</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">(2)匯出:將自己的專案轉成jason或文字碼供他人使用</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">2.點選「匯入」→「匯入所選檔案」→「匯入」(圖5)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">特別提醒:若匯入他人資料時本身沒有資料中的結點,Node-RED會無法辨識而跳出警示,需要針對該節點去新增安裝後重新匯入一次,始得正常使用</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">3.點選「匯出」→「現在的節點」→「下載」(圖6)</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">(1)按下下載後會匯出jason檔案,需要時再使用匯入功能即可取回資料至Node-RED中</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">(2)下載旁的「匯出到剪貼簿」會生成文字碼(記事本可開啟),兩種都可以作為匯出的方式</span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: medium;">(3)建議當專案完成後即可匯出檔案作為備份以免遺失</span></div></div></div><div><span style="font-size: large;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNpgNHipHkxSEbKYKC2i7Wr4XRFn_kl6yOw0jsQ9v-K_szTrHzLUSeLONZuZaql0Uqm9fOrG43P_u-k7bmVWgJjWjSbN6IkoLZjFk29YZJ9ChyphenhyphenDN4l8mMqoeU6XsR1aAWSkPX2yg-gUtQitFe-tZOJQQyvE8ANmiASTzd8SIq1u7XUqYfW0mtqk6zkwOQ/s691/2024-01-30%2012%2004%2044.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="691" data-original-width="511" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNpgNHipHkxSEbKYKC2i7Wr4XRFn_kl6yOw0jsQ9v-K_szTrHzLUSeLONZuZaql0Uqm9fOrG43P_u-k7bmVWgJjWjSbN6IkoLZjFk29YZJ9ChyphenhyphenDN4l8mMqoeU6XsR1aAWSkPX2yg-gUtQitFe-tZOJQQyvE8ANmiASTzd8SIq1u7XUqYfW0mtqk6zkwOQ/w296-h400/2024-01-30%2012%2004%2044.png" width="296" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0fJcuLOy2e_WxXHg_Q7EaX_f9iOLHGy1c2M1BkINlYJcY5jkCxMwza4k97uPvhGQjCdmlsXqnE55D29A06s8jY5fH8aItcRF9E91Crvrq27C9vlPS1h_VIGRrjaaH0Z5ShPLX2umdwcdYCobAX1_5NFtYghjOuZ2SumjrCtlREgFGSc6XL5FYllHs4O0/s799/2024-01-30%2012%2005%2043.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="706" data-original-width="799" height="354" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0fJcuLOy2e_WxXHg_Q7EaX_f9iOLHGy1c2M1BkINlYJcY5jkCxMwza4k97uPvhGQjCdmlsXqnE55D29A06s8jY5fH8aItcRF9E91Crvrq27C9vlPS1h_VIGRrjaaH0Z5ShPLX2umdwcdYCobAX1_5NFtYghjOuZ2SumjrCtlREgFGSc6XL5FYllHs4O0/w400-h354/2024-01-30%2012%2005%2043.png" width="400" /></a></div></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="font-size: large;"><b>實驗結果:</b></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><span style="font-size: large;"><b>1) Arduino Serial monitor</b></span></div><div><span style="font-size: large;"><b><br /></b></span></div><div><b><span style="font-size: medium;"><br /></span></b></div><div><b><span style="font-size: medium;"><div>You're connected to the MQTT broker!</div><div><br /></div><div>Firmware Version: 0x92 = v2.0</div><div>Scan PICC to see UID, SAK, type, and data blocks...</div><div>Please scan MIFARE Classic card...</div><div>PICC type: MIFARE 1KB</div><div>UID Size: 4</div><div>id[0]: 86</div><div>id[1]: D5</div><div>id[2]: EA</div><div>id[3]: 6A</div><div><br /></div><div><br /></div><div>Card UID: 86 D5 EA 6A</div><div>Card SAK: 08</div><div>PICC type: MIFARE 1KB</div><div>Sector Block 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 AccessBits</div><div> 15 63 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </div><div> 62 61 6C 65 78 39 75 66 6F 74 65 73 74 69 6E 67 35 [ 0 0 0 ] </div><div> 61 61 6C 65 78 39 75 66 6F 74 65 73 74 69 6E 67 31 [ 0 0 0 ] </div><div> 60 61 6C 65 78 39 75 66 6F 74 65 73 74 69 6E 67 35 [ 0 0 0 ] </div><div> 14 59 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </div><div> 58 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div><div> 57 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div><div> 56 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div><div> 13 55 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </div><div> 54 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div><div> 53 4B 65 65 70 20 48 61 63 6B 69 6E 67 21 00 00 00 [ 0 0 0 ] </div><div> 52 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div></span></b><b><span style="font-size: medium;"><div> 12 51 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </div><div> 50 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div></span></b><b><span style="font-size: medium;"><div> 49 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div></span></b><b><span style="font-size: medium;"><div> 48 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div></span></b><b><span style="font-size: medium;"><div> 11 47 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </div><div> 46 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 0 0 0 ] </div></span></b></div><div><div><b><span style="font-size: medium;"> 45 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 44 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 10 43 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 41 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 9 39 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 38 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00</span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 37 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 36 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 8 35 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 33 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 32 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 7 31 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 29 74 65 73 74 00 48 61 63 6B 69 6E 67 21 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 28 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 6 27 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 26 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 25 61 6C 65 78 39 75 66 6F 20 74 65 73 74 69 6E 67</span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 24 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 5 23 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 21 61 6C 65 78 39 75 66 6F 20 74 65 73 74 69 6E 67 [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 4 19 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 17 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 16 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 3 15 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 14 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 13 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 12 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 2 11 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 10 2B 39 32 33 30 30 34 34 34 37 37 37 37 20 20 20 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 9 32 38 2D 30 39 2D 31 39 38 39 20 20 20 20 20 20 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 8 4A 68 6F 6E 20 41 62 72 61 68 75 6D 20 20 20 20 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 1 7 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF </span></b><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 6 41 6E 74 68 6F 6E 79 20 20 20 20 20 20 20 20 20 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 5 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 4 01 02 03 04 05 06 07 08 00 00 00 00 00 00 00 00 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 0 3 00 00 00 00 00 00 FF 07 80 69 FF FF FF FF FF FF [ 0 0 1 ] </span></b></div><div><b><span style="font-size: medium;"> 2 61 6C 65 78 39 75 66 6F 20 74 65 73 74 69 6E 67 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;"> [ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 1 61 6C 65 78 20 20 20 20 20 20 20 20 20 20 20 20 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div><b><span style="font-size: medium;"> 0 86 D5 EA 6A D3 08 04 00 62 63 64 65 66 67 68 69 </span></b><span style="font-size: large; font-weight: 700;"> </span><span style="font-size: large; font-weight: 700;"> </span><b><span style="font-size: medium;">[ 0 0 0 ] </span></b></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnmNNc0drMIxHppOQyMmaLS-AozztFtYffVr0FbY3ycQKpkKQ2yejfOjOd5Uo31V5K4PdALTOiLWwptfui_F_m2dzQFml0guCLkDGInZRONm6lifpmBGhcCiZLv4iILOdFm1n_TAgDacrTjVG-URdQupzjhJ0SMb43lZmmLeg4nLqUdKwv5IUR30eD-Yc/s882/2024-01-30%2011%2044%2050.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="882" data-original-width="723" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnmNNc0drMIxHppOQyMmaLS-AozztFtYffVr0FbY3ycQKpkKQ2yejfOjOd5Uo31V5K4PdALTOiLWwptfui_F_m2dzQFml0guCLkDGInZRONm6lifpmBGhcCiZLv4iILOdFm1n_TAgDacrTjVG-URdQupzjhJ0SMb43lZmmLeg4nLqUdKwv5IUR30eD-Yc/w524-h640/2024-01-30%2011%2044%2050.png" width="524" /></a></div><br /><div style="font-size: x-large; font-weight: bold;"><b>2) Node-Red 畫面</b></div></div><div style="font-size: x-large; font-weight: bold;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTiDPJacH17ChsYABsvVLc6bquVkbVKCWizdZ1cLydHzHuz3wK85gr94nHLnTgSfek89yrzss7qi6zJ3CBQ0gr7f-sKEeUPdnuDOOyMPojqfMlYGD9XL4H9dxI1_-jAV7gku4ZzELR8aPQUHKtqRLTD8zhLPsarZtMioiox7Q-QGNHbLrVzVODz2R612o/s835/2024-01-30%2011%2049%2025.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="628" data-original-width="835" height="301" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTiDPJacH17ChsYABsvVLc6bquVkbVKCWizdZ1cLydHzHuz3wK85gr94nHLnTgSfek89yrzss7qi6zJ3CBQ0gr7f-sKEeUPdnuDOOyMPojqfMlYGD9XL4H9dxI1_-jAV7gku4ZzELR8aPQUHKtqRLTD8zhLPsarZtMioiox7Q-QGNHbLrVzVODz2R612o/w400-h301/2024-01-30%2011%2049%2025.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJIikZ2DWDYiYStb0JrQQ7ll0aX2lrddpDMWZIJa4R6Y0IIgAU6eYSo3k6U9oOSUxrKyiUL17FFOeVpSre2eShLKBZ4gtr-nb7So_ru7GT7JvDxxmtaESJBS7FzoVdWt0kaXw8ti848RU4qRdNO9ZEWkUw6lIIhI3-C07IpxmJLYo6ld_jIfhe98DN7Hk/s584/2024-01-30%2011%2058%2036.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="298" data-original-width="584" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJIikZ2DWDYiYStb0JrQQ7ll0aX2lrddpDMWZIJa4R6Y0IIgAU6eYSo3k6U9oOSUxrKyiUL17FFOeVpSre2eShLKBZ4gtr-nb7So_ru7GT7JvDxxmtaESJBS7FzoVdWt0kaXw8ti848RU4qRdNO9ZEWkUw6lIIhI3-C07IpxmJLYo6ld_jIfhe98DN7Hk/w400-h204/2024-01-30%2011%2058%2036.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiP24xq2UqpXU4unwLduUBhUWU00PnXarA9rgjtOt_EUVSHzic4nbDrPes5yc4U2GNCqYQOXpWulQJaYXZM4_c7Vn4gttrbnDKz-1vTNRrvqU3m9n1QBMsdfb6GSY734Otqp5tJ9YiStG-Qa5CEYJ3Ti2mRgRjUwQKSADEV200tG8R7aZIPN2Xdcumxs4/s617/2024-01-30%2011%2059%2015.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="250" data-original-width="617" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiP24xq2UqpXU4unwLduUBhUWU00PnXarA9rgjtOt_EUVSHzic4nbDrPes5yc4U2GNCqYQOXpWulQJaYXZM4_c7Vn4gttrbnDKz-1vTNRrvqU3m9n1QBMsdfb6GSY734Otqp5tJ9YiStG-Qa5CEYJ3Ti2mRgRjUwQKSADEV200tG8R7aZIPN2Xdcumxs4/w400-h163/2024-01-30%2011%2059%2015.png" width="400" /></a></div><br /><b><br /></b></div><div style="font-size: x-large; font-weight: bold;"><b><br /></b></div><div style="font-size: x-large; font-weight: bold;">3) MQTT Explorer<b>畫面</b></div><div style="font-size: x-large; font-weight: bold;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9SzJr6bLx1-fldREKHTfvnicC79zBkubcRaP0zDUiQ0MKmz9xr51mcrN56VjyiJxfJar-y3_GEmQT_CDDP2cZvZSx5vGB1viobxPQozXVuZY97tz2k_NFMy72n_6GWVQhmIthc4vK1j5v4G2w-1MAXjSXG6iAxqf78-abmT4A9R0seDVwwnLd_p9e7pc/s1014/2024-01-30%2012%2010%2019.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="566" data-original-width="1014" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9SzJr6bLx1-fldREKHTfvnicC79zBkubcRaP0zDUiQ0MKmz9xr51mcrN56VjyiJxfJar-y3_GEmQT_CDDP2cZvZSx5vGB1viobxPQozXVuZY97tz2k_NFMy72n_6GWVQhmIthc4vK1j5v4G2w-1MAXjSXG6iAxqf78-abmT4A9R0seDVwwnLd_p9e7pc/w400-h224/2024-01-30%2012%2010%2019.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYarMnOvI8Jz-HAeLfJTShDTL7OKYnAczSJT5W38lnPgseoTN75VmD7QHffzPJ7q_SGzEk-dMNNxcvrVAz_swko1n6KWxJRlQlryuIcrDGxEXBxJEkTlS06lASkIaFibx0OiViFzPzTu0Da-liE5TPDtJJoW3R6rf861CEjN63C4sVkuTPQNNe8b3we8c/s872/2024-01-30%2012%2012%2008.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="465" data-original-width="872" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYarMnOvI8Jz-HAeLfJTShDTL7OKYnAczSJT5W38lnPgseoTN75VmD7QHffzPJ7q_SGzEk-dMNNxcvrVAz_swko1n6KWxJRlQlryuIcrDGxEXBxJEkTlS06lASkIaFibx0OiViFzPzTu0Da-liE5TPDtJJoW3R6rf861CEjN63C4sVkuTPQNNe8b3we8c/w400-h214/2024-01-30%2012%2012%2008.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4jz_GmB-5ZTW4EsUoDBTk_FnpybIBntHe6euRS8z7g9kkhsIN6xGJDNoMj7lZSXUV6Rjn7pyr-NA9MANaLxeYN8NtV1cZ82Mv-26I4r5z9pnH-nJxlK43949BveWqhVlrv5KeoQVhOxVkAUQmRPJV0wTHScL4-FkG5LsxvKQwwmALnYyLU3arGkX1H3c/s881/2024-01-30%2012%2012%2059.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="460" data-original-width="881" height="209" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj4jz_GmB-5ZTW4EsUoDBTk_FnpybIBntHe6euRS8z7g9kkhsIN6xGJDNoMj7lZSXUV6Rjn7pyr-NA9MANaLxeYN8NtV1cZ82Mv-26I4r5z9pnH-nJxlK43949BveWqhVlrv5KeoQVhOxVkAUQmRPJV0wTHScL4-FkG5LsxvKQwwmALnYyLU3arGkX1H3c/w400-h209/2024-01-30%2012%2012%2059.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS3JJBl3MvJfNSfz-BN3Am1Fv7jM-Y-gs6IkVrCryWt1iIGZ370w6xezqeVV6nafxpYYoovrQNYCblS8IuZKxPJs-XUy2sIQDebZxr8IqzfDoljvV9VkC20ZlKB8XEVP3QLpP0AKhi0kz8tv2ghMgHgQ_HdvtxP-BdW_b0RTEvnCpYlY2Cjvn-pgSfkJo/s975/2024-01-30%2012%2014%2058.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="574" data-original-width="975" height="235" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS3JJBl3MvJfNSfz-BN3Am1Fv7jM-Y-gs6IkVrCryWt1iIGZ370w6xezqeVV6nafxpYYoovrQNYCblS8IuZKxPJs-XUy2sIQDebZxr8IqzfDoljvV9VkC20ZlKB8XEVP3QLpP0AKhi0kz8tv2ghMgHgQ_HdvtxP-BdW_b0RTEvnCpYlY2Cjvn-pgSfkJo/w400-h235/2024-01-30%2012%2014%2058.png" width="400" /></a></div><br /><b><br /></b></div><div style="font-size: x-large; font-weight: bold;"><b><br /></b></div><div style="font-size: x-large; font-weight: bold;"><span style="background-color: #ffa400;">將實驗過程及結果拍攝影片上傳至yt 並將連結寫於作業上</span></div><div style="font-size: x-large; font-weight: bold;"><br /></div><div><span style="font-size: x-large;"><br /></span></div><div><span style="font-size: x-large;">作業格式</span></div><div><br /></div><div><br /></div><div><br /></div><div><p align="center" style="background: white; margin-bottom: .0001pt; margin: 0cm; text-align: center;"><b><span face="標楷體" style="color: black; font-size: 18pt; mso-bidi-font-family: "Segoe UI";">作業一<span lang="EN-US">:<span style="mso-spacerun: yes;">
</span>RFID</span>基礎實驗之實驗</span></b><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><o:p></o:p></span></p>
<p align="center" style="background: white; margin-bottom: .0001pt; margin: 0cm; text-align: center;"><b><span face="標楷體" style="color: black; font-size: 18pt; mso-bidi-font-family: "Segoe UI";">學生<span lang="EN-US">: </span>學號<span lang="EN-US">: </span>姓名<span lang="EN-US">: </span>班級<span lang="EN-US">: </span></span></b><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><o:p></o:p></span></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 28.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 28.8pt; mso-list: l0 level1 lfo1; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">一、<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">實習目的 <span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";"><o:p> </o:p></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 28.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 28.8pt; mso-list: l0 level1 lfo1; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">二、<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">實習設備及器材<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><o:p> </o:p></span></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">三、實習步驟<span lang="EN-US">(</span>硬體連接 軟體設定<span lang="EN-US">)<o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";"><o:p> </o:p></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">四、程式<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 52.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 52.8pt; mso-list: l1 level1 lfo2; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">1.<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">Arduino </span></b><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">程式<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 52.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 52.8pt; mso-list: l1 level1 lfo2; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">2.<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">Node-Red</span></b><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">程式<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">五、實習結果 <span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 52.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 52.8pt; mso-list: l2 level1 lfo3; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">1.<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">Arduino </span></b><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">程式<span lang="EN-US"><span style="mso-spacerun: yes;"> </span>monitor </span>輸出<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 52.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 52.8pt; mso-list: l2 level1 lfo3; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">2.<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">Node-Red</span></b><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">程式 畫面<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: 0cm; margin-left: 52.8pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 52.8pt; mso-list: l2 level1 lfo3; text-indent: -28.8pt;"><!--[if !supportLists]--><b><span face="標楷體" lang="EN-US" style="color: black; font-size: 13.5pt; mso-bidi-font-family: 標楷體;"><span style="mso-list: Ignore;">3.<span style="font: 7pt "Times New Roman";"> </span></span></span></b><!--[endif]--><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">軟體或<span lang="EN-US">APP </span>畫面<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><o:p> </o:p></span></p>
<p class="docxa3" style="background: white; margin-bottom: 0cm; margin-left: 36.0pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 36pt; text-indent: -36pt;"><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">六、實習心得<span lang="EN-US"><o:p></o:p></span></span></b></p>
<p class="docxa3" style="background: white; margin-bottom: 0cm; margin-left: 36.0pt; margin-right: 0cm; margin-top: 0cm; margin: 0cm 0cm 0cm 36pt; text-indent: -36pt;"><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><span style="mso-spacerun: yes;"> </span></span><span face="勤益科大標楷體" lang="EN-US" style="color: black; font-size: 18pt; mso-bidi-font-family: "Segoe UI";"><span style="mso-spacerun: yes;"> </span><span style="background: yellow; mso-highlight: yellow;">(</span></span><span face="勤益科大標楷體" style="background: yellow; color: black; font-size: 18pt; mso-bidi-font-family: "Segoe UI"; mso-highlight: yellow;">實驗過程遇到的問題<span lang="EN-US">) </span>不要寫官話</span><span face="勤益科大標楷體" lang="EN-US" style="color: black; font-size: 18pt; mso-bidi-font-family: "Segoe UI";"><o:p></o:p></span></p>
<p style="background: white; margin-bottom: .0001pt; margin: 0cm;"><b><span face="標楷體" style="color: black; font-size: 13.5pt; mso-bidi-font-family: "Segoe UI";">七、 參考文獻</span></b><span face=""Segoe UI",sans-serif" lang="EN-US" style="color: black; font-size: 9pt;"><o:p></o:p></span></p><br /></div></div></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br />alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-55677084629289784462024-01-29T03:55:00.000-08:002024-01-29T04:16:45.358-08:00 ESP32 MFRC522 RFID Reader 使用 ArduinoMqttClient 程式庫 執行 Node-Red + MQTT + 讀取Mifare卡片的資料 <p><span style="font-size: x-large;"><b> ESP32 MFRC522 RFID Reader 使用 ArduinoMqttClient 程式庫 執行 Node-Red + MQTT + 讀取Mifare卡片的資料 </b></span></p><p><span style="font-size: x-large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlWfosYhP4jzZMHSm7FYunP-dKw5WNE5iucDIFIcrPSRBA2ePLN9c1tILPS2aQPznivJKrraE3C-idWarEmSjVeSRQRXxgLviYsupW5_Vu-WAIslARqO5R5d5VqcP_RHmfJu4Hu4B1l8e52zvPHs_giqgYFcaL2Hzxpb0bJscrhthHILO4C6XcF-EVQY/s990/2024-01-29%2020%2009%2021.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="650" data-original-width="990" height="420" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnlWfosYhP4jzZMHSm7FYunP-dKw5WNE5iucDIFIcrPSRBA2ePLN9c1tILPS2aQPznivJKrraE3C-idWarEmSjVeSRQRXxgLviYsupW5_Vu-WAIslARqO5R5d5VqcP_RHmfJu4Hu4B1l8e52zvPHs_giqgYFcaL2Hzxpb0bJscrhthHILO4C6XcF-EVQY/w640-h420/2024-01-29%2020%2009%2021.png" width="640" /></a></span></div><span style="font-size: x-large;"><br /><b><br /></b></span><p></p><p><span style="font-size: x-large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWTX16NP1a-_aZU6gKUzQ44MQ3F_PlESqix-s0heDvVn1wID26uuIA5rujCqoIQdFfIWE8R77bFdLJU9-uRgpG3bXZuCn7Wn1MtqPXz8ILcBvd9I0wbcplDKaj2R7arByP9MIhhhwgyryi0aiTB6LoiYmb8EN6jkdlzJxeqrdxAhZS56B6zMBkH-_qNXc/s616/2024-01-29%2019%2051%2018.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="348" data-original-width="616" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWTX16NP1a-_aZU6gKUzQ44MQ3F_PlESqix-s0heDvVn1wID26uuIA5rujCqoIQdFfIWE8R77bFdLJU9-uRgpG3bXZuCn7Wn1MtqPXz8ILcBvd9I0wbcplDKaj2R7arByP9MIhhhwgyryi0aiTB6LoiYmb8EN6jkdlzJxeqrdxAhZS56B6zMBkH-_qNXc/w400-h226/2024-01-29%2019%2051%2018.png" width="400" /></a></span></div><span style="font-size: x-large;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEaw53LYTB02QouXnNMMAAYyN3G-Up-8mBjAspOscB2SQAI9Ri3V9b6HI1t70RtGXs_nMOpyGwRbkuR1tX33qUPxF69_P657FsyymyKgpdu7gBPmf0QVBTXHVfq5ZzhmYykfBSjsNLKiec54KGJJoyAL3gV3rflOkUpiaDtqrndFYpASudaFKMI0ZlliE/s637/2024-01-29%2019%2053%2005.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="380" data-original-width="637" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiEaw53LYTB02QouXnNMMAAYyN3G-Up-8mBjAspOscB2SQAI9Ri3V9b6HI1t70RtGXs_nMOpyGwRbkuR1tX33qUPxF69_P657FsyymyKgpdu7gBPmf0QVBTXHVfq5ZzhmYykfBSjsNLKiec54KGJJoyAL3gV3rflOkUpiaDtqrndFYpASudaFKMI0ZlliE/w400-h239/2024-01-29%2019%2053%2005.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7iYCK14KDMNzGSfCttzrEgBMNzc8-CPbARwkcEjoHkc6aaTvC7hKYwR0Gl_ef3-B1LZ_bo0OKhc596I85eA4MFbko-OYXQD5FKWl7qB2qziR9VwsLnPnrHCxGNomzna6oX5Gp7DMOeRtjihAQaa6ALCm0eqsbVw52trgo8c6xINZCFqS1Ik9frFnXYE4/s613/2024-01-29%2019%2053%2048.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="333" data-original-width="613" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7iYCK14KDMNzGSfCttzrEgBMNzc8-CPbARwkcEjoHkc6aaTvC7hKYwR0Gl_ef3-B1LZ_bo0OKhc596I85eA4MFbko-OYXQD5FKWl7qB2qziR9VwsLnPnrHCxGNomzna6oX5Gp7DMOeRtjihAQaa6ALCm0eqsbVw52trgo8c6xINZCFqS1Ik9frFnXYE4/w400-h217/2024-01-29%2019%2053%2048.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja4bUSE1At197GJ85_u_C8c2preyFB-gmaWsyVbVWW6GM9qT0_VloVe2RMvKvJizKSIp1SAb3Pm3hNJXT75q1I5kxU2khD-U1mE_kjHnqSmWE4dePEvXvXdJuY6Xg6NXOEt89VsG1mStFQAqV_k_vY7wwdNa6h9FURACFOKReMG0O-jJ0ILHxUTYlElvk/s971/2024-01-29%2019%2054%2024.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="555" data-original-width="971" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEja4bUSE1At197GJ85_u_C8c2preyFB-gmaWsyVbVWW6GM9qT0_VloVe2RMvKvJizKSIp1SAb3Pm3hNJXT75q1I5kxU2khD-U1mE_kjHnqSmWE4dePEvXvXdJuY6Xg6NXOEt89VsG1mStFQAqV_k_vY7wwdNa6h9FURACFOKReMG0O-jJ0ILHxUTYlElvk/w400-h229/2024-01-29%2019%2054%2024.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59RM5F5XaweDQVbmY4kuSUdyu4vEYoQNsbyaoO77thvVAXgFisgDDGcPQavFO9sSOn2NYu3PH20HbPpPic6ST7Z9vb7APr75xoik-mZBSigoFpcnzJHA_wbkRh6rA_kdjfhKXaRPhRXizH7Mq_go87MpdEHYUHX0wyABZtns0yNzQa2cf3y1vYdBbs88/s610/2024-01-29%2019%2056%2044.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="356" data-original-width="610" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg59RM5F5XaweDQVbmY4kuSUdyu4vEYoQNsbyaoO77thvVAXgFisgDDGcPQavFO9sSOn2NYu3PH20HbPpPic6ST7Z9vb7APr75xoik-mZBSigoFpcnzJHA_wbkRh6rA_kdjfhKXaRPhRXizH7Mq_go87MpdEHYUHX0wyABZtns0yNzQa2cf3y1vYdBbs88/w400-h234/2024-01-29%2019%2056%2044.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbUGyZgvvRzg452nZI6ylPqOVScOidpHwN1wy9YSdPcPj1pnAuao5xUeV2NUkGWzR-B8DUWSTMywzpqtRlLgP1N8pa4yJZqhtZMWQSPMOyOONjhgPG4RmJ0qZPaagAE9KzfrUrZt5GR4_MBmqUGC5iH8OoT_qpw6zFKYeRJw1_qBzGawQNuN2arz9tZUc/s818/2024-01-29%2019%2058%2040.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="818" data-original-width="648" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbUGyZgvvRzg452nZI6ylPqOVScOidpHwN1wy9YSdPcPj1pnAuao5xUeV2NUkGWzR-B8DUWSTMywzpqtRlLgP1N8pa4yJZqhtZMWQSPMOyOONjhgPG4RmJ0qZPaagAE9KzfrUrZt5GR4_MBmqUGC5iH8OoT_qpw6zFKYeRJw1_qBzGawQNuN2arz9tZUc/w316-h400/2024-01-29%2019%2058%2040.png" width="316" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkvw_wKX5MRmwEqau3HskXGNaozVTO-E4ocRrMAnfyCaxu3W8VUDGi6CDnpHFIPMJehaqinoVmdl8XdGOtnH_KBUWw9Vpw17VjE0visziV4KV_OZJhr4DlPw7mC8xqQ945RLhCqup6kkqiWod3S7leANT6yhdKQxHqi6XmV_7ou90amH04JpdnG1sUX1I/s776/2024-01-29%2019%2059%2025.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="776" data-original-width="621" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkvw_wKX5MRmwEqau3HskXGNaozVTO-E4ocRrMAnfyCaxu3W8VUDGi6CDnpHFIPMJehaqinoVmdl8XdGOtnH_KBUWw9Vpw17VjE0visziV4KV_OZJhr4DlPw7mC8xqQ945RLhCqup6kkqiWod3S7leANT6yhdKQxHqi6XmV_7ou90amH04JpdnG1sUX1I/w320-h400/2024-01-29%2019%2059%2025.png" width="320" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOFKZB-Aa0N9Sd_4lSYiMLTpI4qAWMQ0PICRn_VHN_wt458lVw3rHrpH_fU9MWhxB5XzrphahlK2x6OMXSIdF37QyWI2R-VDJ3XAeZJLEaBNRsnpSFpl9YpYFPyIHNS6WnP14Ii5iYOEG3cPJqT7kAkYlpzJAURJJpINNNfjuId84STuOs3zC9ScdYNmY/s602/RFID_principle.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="210" data-original-width="602" height="224" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOFKZB-Aa0N9Sd_4lSYiMLTpI4qAWMQ0PICRn_VHN_wt458lVw3rHrpH_fU9MWhxB5XzrphahlK2x6OMXSIdF37QyWI2R-VDJ3XAeZJLEaBNRsnpSFpl9YpYFPyIHNS6WnP14Ii5iYOEG3cPJqT7kAkYlpzJAURJJpINNNfjuId84STuOs3zC9ScdYNmY/w640-h224/RFID_principle.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3q7nLcvhti9kk9uGUPQsfxKoBRfx1zYAQbVD0DeeA8Yx84wuSxsDxGOVIRzZk_MF0gHrjZdvmJSdS0xG7zXVG9b0ZaUZhlrWSd-pntqafkOW3Yul-h0U32vi75j8qt4_P-9bSSjiGpUZGwZrlDcQCEwRsSFUnRRl5snBhChFL8og2B8iKjExMcF2t40/s750/RFID-Reader-Module-Working.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="750" height="249" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK3q7nLcvhti9kk9uGUPQsfxKoBRfx1zYAQbVD0DeeA8Yx84wuSxsDxGOVIRzZk_MF0gHrjZdvmJSdS0xG7zXVG9b0ZaUZhlrWSd-pntqafkOW3Yul-h0U32vi75j8qt4_P-9bSSjiGpUZGwZrlDcQCEwRsSFUnRRl5snBhChFL8og2B8iKjExMcF2t40/w400-h249/RFID-Reader-Module-Working.gif" width="400" /></a></div><br /><b><br /></b></span><p></p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p></p><h2 style="background-color: white; box-sizing: inherit; color: #16181a; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; line-height: 1.4;"><span style="font-size: large;">讀取與寫入資料到Mifare卡片</span></h2><p style="background-color: white; box-sizing: inherit; color: #363b40; font-family: Roboto; line-height: inherit; margin: 0px 0px 10px;"><span style="font-size: large;">底下列舉本單元使用到的MFRC522程式物件的方法和屬性:</span></p><p><span style="font-size: large;"></span></p><ul style="background-color: white; box-sizing: border-box; color: #363b40; font-family: Roboto; list-style: square; margin: 0px 0px 1.6rem 1.6rem; padding-left: 0px;"><li style="box-sizing: inherit;"><span style="font-size: large;">MFRC522物件.<span style="box-sizing: inherit; font-weight: 700;">PCD_Authenticate()</span>:驗證金鑰,相當於比對輸入密碼和卡片裡的密碼,唯通過驗證才能存取區段資料。</span></li><li style="box-sizing: inherit;"><span style="font-size: large;">MFRC522物件.<span style="box-sizing: inherit; font-weight: 700;">GetStatusCodeName()</span>:取得狀態碼的名稱</span></li><li style="box-sizing: inherit;"><span style="font-size: large;">MFRC522物件.<span style="box-sizing: inherit; font-weight: 700;">MIFARE_Read()</span>:讀取指定區塊的內容</span></li><li style="box-sizing: inherit;"><span style="font-size: large;">MFRC522物件.<span style="box-sizing: inherit; font-weight: 700;">MIFARE_Write()</span>:在指定區塊寫入資料</span></li><li style="box-sizing: inherit;"><span style="font-size: large;">MFRC522物件.<span style="box-sizing: inherit; font-weight: 700;">PICC_DumpMifareClassicSectorToSerial()</span>:在序列埠監控視窗顯示指定的區段內容</span></li></ul><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"></span></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">/*</span></div><div><span style="color: #7f8c8d;"> ArduinoMqttClient - WiFi Simple Receive Callback</span></div><br /><div><span style="color: #7f8c8d;"> This example connects to a MQTT broker and subscribes to a single topic.</span></div><div><span style="color: #7f8c8d;"> When a message is received it prints the message to the Serial Monitor,</span></div><div><span style="color: #7f8c8d;"> it uses the callback functionality of the library.</span></div><br /><div><span style="color: #7f8c8d;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><br /><div><span style="color: #7f8c8d;">// To connect with SSL/TLS:</span></div><div><span style="color: #7f8c8d;">// 1) Change WiFiClient to WiFiSSLClient.</span></div><div><span style="color: #7f8c8d;">// 2) Change port value from 1883 to 8883.</span></div><div><span style="color: #7f8c8d;">// 3) Change broker value to a server with a known SSL/TLS root certificate </span></div><div><span style="color: #7f8c8d;">// flashed in the WiFi module.</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/will"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> inTopic[] = <span style="color: #7fcbcd;">"alex9ufo/in"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> outTopic[] = <span style="color: #7fcbcd;">"alex9ufo/out"</span>;</div><br /><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">long</span> interval = <span style="color: #7fcbcd;">30000</span>;</div><div><span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> previousMillis = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #0ca1a6;">int</span> count = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">2</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/RFID/read"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/RFID/back"</span>;</div><br /><div>byte sector = <span style="color: #7fcbcd;">15</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區段」,可能值:0~15</span></div><div>byte block = <span style="color: #7fcbcd;">1</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區塊」,可能值:0~3</span></div><div>byte <span style="color: #f39c12;">blockData</span>[<span style="color: #7fcbcd;">16</span>] = {<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>} ; </div><div><span style="color: #7f8c8d;">// 最多可存入16個字元</span></div><div><span style="color: #7f8c8d;">// 若要清除區塊內容,請寫入16個 0</span></div><div><span style="color: #7f8c8d;">//byte blockData[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</span></div><div><span style="color: #7f8c8d;">// 暫存讀取區塊內容的陣列,MIFARE_Read()方法要求至少要18位元組空間,來存放16位元組。</span></div><div>byte <span style="color: #f39c12;">bufferarray</span>[<span style="color: #7fcbcd;">18</span>] = {<span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span> } ;</div><div><span style="color: #0ca1a6;">bool</span> RD_flag=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Pub_flag=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">readBlock</span>(byte _sector, byte _block, byte _blockData[]) {</div><div> <span style="color: #c586c0;">if</span> (_sector < <span style="color: #7fcbcd;">0</span> || _sector > <span style="color: #7fcbcd;">15</span> || _block < <span style="color: #7fcbcd;">0</span> || _block > <span style="color: #7fcbcd;">3</span>) {</div><div><span style="color: #7f8c8d;"> // 顯示「區段或區塊碼錯誤」,然後結束函式。</span></div><div><span style="color: #7f8c8d;"> // 判斷區段值是否介於0~15、區塊值介於0~3…</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Wrong sector or block number."</span>));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte blockNum = _sector * <span style="color: #7fcbcd;">4</span> + _block;<span style="color: #7f8c8d;"> // 計算區塊的實際編號(0~63)</span></div><div> byte trailerBlock = _sector * <span style="color: #7fcbcd;">4</span> + <span style="color: #7fcbcd;">3</span>;<span style="color: #7f8c8d;"> // 控制區塊編號</span></div><br /><div><span style="color: #7f8c8d;"> // 驗證金鑰</span></div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Authenticate</span>(MFRC522::PICC_CMD_MF_AUTH_KEY_A, trailerBlock, &key, &(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div><span style="color: #7f8c8d;"> // 若未通過驗證…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"PCD_Authenticate() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div> byte buffersize = <span style="color: #7fcbcd;">18</span>;</div><div> status = (MFRC522::StatusCode) <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">MIFARE_Read</span>(blockNum, _blockData, &buffersize);</div><br /><div><span style="color: #7f8c8d;"> // 若讀取不成功…</span></div><div> <span style="color: #c586c0;">if</span> (status != MFRC522::STATUS_OK) {</div><div><span style="color: #7f8c8d;"> // 顯示錯誤訊息</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"MIFARE_read() failed: "</span>));</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">GetStatusCodeName</span>(status));</div><div> <span style="color: #c586c0;">return</span>;</div><div> }</div><br /><div><span style="color: #7f8c8d;"> // 顯示「讀取成功!」</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Data was read."</span>));</div><br /><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String topicIN=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> topicIN=topicIN+(<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><br /><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topicIN);</div><div> <span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> String sec1 ,blk1 ,text1; </div><div> sec1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">2</span>);</div><div> blk1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">3</span>,<span style="color: #7fcbcd;">5</span>);</div><div> text1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">6</span>);</div><div> sector = <span style="color: #f39c12;">sec1</span>.<span style="color: #f39c12;">toInt</span>();</div><div> block = <span style="color: #f39c12;">blk1</span>.<span style="color: #f39c12;">toInt</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">14</span>,<span style="color: #7fcbcd;">18</span>) == <span style="color: #7fcbcd;">"read"</span>) {</div><div> sec1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">2</span>);</div><div> blk1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">3</span>,<span style="color: #7fcbcd;">5</span>);</div><div><span style="color: #7f8c8d;"> //String text1=message.subString(6);</span></div><div> sector = <span style="color: #f39c12;">sec1</span>.<span style="color: #f39c12;">toInt</span>();</div><div> block = <span style="color: #f39c12;">blk1</span>.<span style="color: #f39c12;">toInt</span>(); </div><br /><div> </div><div> RD_flag=<span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">"Topic: "</span>); </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(Topic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">"Sector: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(sec1); </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">" Block: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(blk1);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"----------onMqttMessage----------"</span>);</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">dump_byte_array</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">" 0"</span> : <span style="color: #7fcbcd;">" "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);<span style="color: #7f8c8d;"> // 設置板上LED引腳為輸出模式</span></div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // 啟動後關閉板上LED</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open:</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);</div><div><span style="color: #7f8c8d;"> // Connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // You can provide a unique client ID, if not set the library uses Arduino-millis()</span></div><div><span style="color: #7f8c8d;"> // Each client must have a unique client ID</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setId("clientId");</span></div><br /><div><span style="color: #7f8c8d;"> // You can provide a username and password for authentication</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setUsernamePassword("username", "password");</span></div><br /><div><span style="color: #7f8c8d;"> // By default the library connects with the "clean session" flag set,</span></div><div><span style="color: #7f8c8d;"> // you can disable this behaviour by using</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setCleanSession(false);</span></div><br /><div><span style="color: #7f8c8d;"> // set a will message, used by the broker when the connection dies unexpectedly</span></div><div><span style="color: #7f8c8d;"> // you must know the size of the message beforehand, and it must be set before connecting</span></div><div> String willPayload = <span style="color: #7fcbcd;">"oh no!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topic1);</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(inTopic, subscribeQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(topic1, subscribeQos);</div><br /><div><span style="color: #7f8c8d;"> // topics can be unsubscribed using:</span></div><div><span style="color: #7f8c8d;"> // mqttClient.unsubscribe(inTopic);</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Waiting for messages on topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> //啟動 mfrc522</span></div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // 初始化MFRC522讀卡機模組</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_DumpVersionToSerial</span>();<span style="color: #7f8c8d;"> // Show details of PCD - MFRC522 Card Reader details</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 準備金鑰(用於key A和key B),出廠預設為6組 0xFF。</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < <span style="color: #7fcbcd;">6</span>; i++) {</div><div> <span style="color: #f39c12;">key</span>.<span style="color: #f39c12;">keyByte</span>[i] = 0x<span style="color: #7fcbcd;">FF</span>;</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (RD_flag==<span style="color: #7fcbcd;">true</span>) {</div><div> String sect1 = <span style="color: #f39c12;">String</span>(sector);</div><div> String bloc1 = <span style="color: #f39c12;">String</span>(block);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"sector="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(sect1);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", block="</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(bloc1);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"RD_flag=true"</span>);</div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div><span style="color: #7f8c8d;"> //if (mfrc522.PICC_ReadCardSerial()) {</span></div><div> <span style="color: #c586c0;">if</span> ((sector><span style="color: #7fcbcd;">0</span>) || (block><span style="color: #7fcbcd;">0</span>)) {</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"Reading RFID block"</span>);</div><div> <span style="color: #f39c12;">readBlock</span>(sector, block, bufferarray);<span style="color: #7f8c8d;"> // 區段編號、區塊編號、存放讀取資料的陣列</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Read block: "</span>));<span style="color: #7f8c8d;"> // 顯示儲存讀取資料的陣列元素值</span></div><div><span style="color: #7f8c8d;"> ///String str=String((char *)bufferarray);</span></div><div> String str=<span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span> ; i <<span style="color: #7fcbcd;">16</span> ; i++) {<span style="color: #7f8c8d;"> //顯示儲存讀取資料的陣列元素值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">write</span> (<span style="color: #f39c12;">bufferarray</span>[i]);</div><div> str+=(<span style="color: #f39c12;">bufferarray</span>[i]);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(str); </div><div> <span style="color: #7f8c8d;">//========publish topic3 =========</span></div><div> json = <span style="color: #7fcbcd;">"sector="</span>;</div><div> json = json + <span style="color: #f39c12;">String</span>(sector);</div><div> json = json + <span style="color: #7fcbcd;">", block="</span>;</div><div> json = json + <span style="color: #f39c12;">String</span>(block);</div><div> json = json + <span style="color: #7fcbcd;">", Read data : "</span>;</div><div><span style="color: #7f8c8d;"> //str=String((char *)bufferarray);</span></div><div> json =json + str;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> </div><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><div> </div><div> } </div><div> <span style="color: #c586c0;">else</span> </div><div> {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = json +(<span style="color: #7fcbcd;">" Card UID: "</span>);</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> json = json +(<span style="color: #7fcbcd;">" , PICC type: "</span>);</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_DumpToSerial</span>(&(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>));</div><div> }</div><br /><div> RD_flag=<span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"RD_flag=false"</span>);</div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD </span></div><div> }<span style="color: #7f8c8d;"> //if (mfrc522.PICC_IsNewCardPresent() && mfrc522.PICC_ReadCardSerial()) {</span></div><div> }<span style="color: #7f8c8d;"> //if (RD_flag==true)</span></div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><br /><br /></div><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;">[{"id":"b4fb005ddd98cabd","type":"function","z":"2f5520a7ea5f3ad2","name":"function ","func":"var arr = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15];\nmsg.payload=arr;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":260,"wires":[["072d1871cda8fe10","b7314e689be39f11"]]},{"id":"241a1221cb70b19a","type":"inject","z":"2f5520a7ea5f3ad2","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":160,"y":260,"wires":[["b4fb005ddd98cabd"]]},{"id":"072d1871cda8fe10","type":"debug","z":"2f5520a7ea5f3ad2","name":"debug 257","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":470,"y":260,"wires":[]},{"id":"b7314e689be39f11","type":"change","z":"2f5520a7ea5f3ad2","name":"","rules":[{"t":"set","p":"options","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":220,"wires":[["9c81ed8345cfbe3a"]]},{"id":"9c81ed8345cfbe3a","type":"ui_dropdown","z":"2f5520a7ea5f3ad2","name":"","label":"SECTOR NO:","tooltip":"","place":"Select option","group":"eebf0fc66c6a4d88","order":1,"width":5,"height":1,"passthru":true,"multiple":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"topic","topicType":"msg","className":"","x":660,"y":220,"wires":[["91390ae2119ac18a","84531c8ecba4f326"]]},{"id":"91390ae2119ac18a","type":"debug","z":"2f5520a7ea5f3ad2","name":"debug 258","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":810,"y":280,"wires":[]},{"id":"9ae822e79055e3aa","type":"inject","z":"2f5520a7ea5f3ad2","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":true,"onceDelay":"1","topic":"","payload":"","payloadType":"date","x":160,"y":320,"wires":[["f51c807150d82db5"]]},{"id":"f51c807150d82db5","type":"function","z":"2f5520a7ea5f3ad2","name":"function ","func":"var arr = [0,1,2];\nmsg.payload=arr;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":300,"y":320,"wires":[["5dcad4e96e4a29ea","beede6ee35ace32e"]]},{"id":"beede6ee35ace32e","type":"change","z":"2f5520a7ea5f3ad2","name":"","rules":[{"t":"set","p":"options","pt":"msg","to":"payload","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":360,"wires":[["542cf166f860474d"]]},{"id":"5dcad4e96e4a29ea","type":"debug","z":"2f5520a7ea5f3ad2","name":"debug 259","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":470,"y":320,"wires":[]},{"id":"542cf166f860474d","type":"ui_dropdown","z":"2f5520a7ea5f3ad2","name":"","label":"BLOCK NO:","tooltip":"","place":"Select option","group":"eebf0fc66c6a4d88","order":3,"width":5,"height":1,"passthru":true,"multiple":false,"options":[{"label":"","value":"","type":"str"}],"payload":"","topic":"topic","topicType":"msg","className":"","x":650,"y":360,"wires":[["8afc0b1d53588863","376a1f319d2a04f8"]]},{"id":"8afc0b1d53588863","type":"debug","z":"2f5520a7ea5f3ad2","name":"debug 260","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":810,"y":420,"wires":[]},{"id":"ca7a327294243506","type":"ui_button","z":"2f5520a7ea5f3ad2","name":"","group":"eebf0fc66c6a4d88","order":5,"width":5,"height":1,"passthru":false,"label":"讀取","tooltip":"","color":"","bgcolor":"","className":"","icon":"","payload":"","payloadType":"str","topic":"topic","topicType":"msg","x":130,"y":60,"wires":[["5aa783b73c232a7f"]]},{"id":"4b626c8ff4fa0f66","type":"ui_text","z":"2f5520a7ea5f3ad2","group":"eebf0fc66c6a4d88","order":12,"width":"10","height":1,"name":"","label":"ESP回來字串","format":"{{msg.payload}}","layout":"row-spread","className":"","x":380,"y":480,"wires":[]},{"id":"5aa783b73c232a7f","type":"function","z":"2f5520a7ea5f3ad2","name":"function ","func":"var par1 = context.global.sec_no ;\nvar par2 = context.global.blk_no ;\nif(par1<10)\n{\n par1 = '0'+par1;\n}\nif(par2<10)\n{\n par2 = '0'+par2;\n}\nvar par3= par1+','+par2;\n\nmsg.payload=par3;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":280,"y":60,"wires":[["aa4676b62203ae9a","bff0898877976165"]]},{"id":"84531c8ecba4f326","type":"function","z":"2f5520a7ea5f3ad2","name":"function ","func":"context.global.sec_no=msg.payload;\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":840,"y":220,"wires":[[]]},{"id":"376a1f319d2a04f8","type":"function","z":"2f5520a7ea5f3ad2","name":"function ","func":"context.global.blk_no=msg.payload;\nreturn msg;\n","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":820,"y":360,"wires":[[]]},{"id":"aa4676b62203ae9a","type":"mqtt out","z":"2f5520a7ea5f3ad2","name":"","topic":"alex9ufo/RFID/read","qos":"1","retain":"false","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"841df58d.ee5e98","x":470,"y":60,"wires":[]},{"id":"bd8b284c8c0b817f","type":"mqtt in","z":"2f5520a7ea5f3ad2","name":"","topic":"alex9ufo/RFID/back","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":170,"y":480,"wires":[["4b626c8ff4fa0f66"]]},{"id":"bff0898877976165","type":"debug","z":"2f5520a7ea5f3ad2","name":"debug 261","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":450,"y":120,"wires":[]},{"id":"e8550dbdd8bd1dca","type":"mqtt in","z":"2f5520a7ea5f3ad2","name":"","topic":"alex9ufo/RFID/read","qos":"1","datatype":"auto-detect","broker":"841df58d.ee5e98","nl":false,"rap":true,"rh":0,"inputs":0,"x":170,"y":420,"wires":[["f14e98e117c6bff9"]]},{"id":"f14e98e117c6bff9","type":"ui_text","z":"2f5520a7ea5f3ad2","group":"eebf0fc66c6a4d88","order":10,"width":"10","height":1,"name":"","label":"MQTT 發行的字串","format":"{{msg.payload}}","layout":"row-left","className":"","x":390,"y":420,"wires":[]},{"id":"eebf0fc66c6a4d88","type":"ui_group","name":"RFID SECTOR BLOCK READ","tab":"048debf3dd7e9641","order":2,"disp":true,"width":"10","collapse":false,"className":""},{"id":"841df58d.ee5e98","type":"mqtt-broker","name":"","broker":"broker.hivemq.com","port":"1883","clientid":"","autoConnect":true,"usetls":false,"compatmode":false,"protocolVersion":"4","keepalive":"15","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""},{"id":"048debf3dd7e9641","type":"ui_tab","name":"2024 RFID ","icon":"dashboard","disabled":false,"hidden":false}]</span></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-451687981729708872024-01-28T03:17:00.000-08:002024-01-28T03:32:10.524-08:00ESP32 使用 ArduinoMqttClient 程式庫 執行MQTT + MFRC522 RFID Reader 讀取UID 號碼<p><span style="font-size: x-large;"><b> ESP32 使用 ArduinoMqttClient 程式庫 執行MQTT + MFRC522 RFID Reader 讀取UID 號碼</b></span></p><p><span style="font-size: x-large;"></span></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwBvhJIcqXL29VrvUtaeemyq2oUVQNCZJj42aSJBwcuaPV5VnEhJX826flYJ_UR5MMh_WxtgSivluThZtTt1X5Oipm0cJ7HQRBZSuNYsoUCw-RfFnCmBJW1K9bkR9v24Poy7n21goKnsAgHEtpYTDyZZFfujUuibOGjGxlZv84Hrj__cDpOgH4An0oPtY/s688/2024-01-28%2019%2031%2008.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="432" data-original-width="688" height="402" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwBvhJIcqXL29VrvUtaeemyq2oUVQNCZJj42aSJBwcuaPV5VnEhJX826flYJ_UR5MMh_WxtgSivluThZtTt1X5Oipm0cJ7HQRBZSuNYsoUCw-RfFnCmBJW1K9bkR9v24Poy7n21goKnsAgHEtpYTDyZZFfujUuibOGjGxlZv84Hrj__cDpOgH4An0oPtY/w640-h402/2024-01-28%2019%2031%2008.png" width="640" /></a></span></div><p></p><div class="separator" style="clear: both; text-align: center;"><span style="font-size: x-large;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimQhmOAGQG-4gNn_FWUoZ2KXBcUumdoiSU7EFcShG3p4S7ZKu2q_j-p6Fhd_odKzFAMqW9TMuha5OqOI5qffbWG7g8E3dNvPjgdKSD0dS3ywhEyjq7OzMEzPgQgiIwFcT6HTv8pU4HQWws6awz3Fr7ewgGq82kuM6wGPqrM8YKIMhL0IBxdUbfDFKi984/s750/RC522-RFID-Reader-Module-Pinout.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="750" height="308" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimQhmOAGQG-4gNn_FWUoZ2KXBcUumdoiSU7EFcShG3p4S7ZKu2q_j-p6Fhd_odKzFAMqW9TMuha5OqOI5qffbWG7g8E3dNvPjgdKSD0dS3ywhEyjq7OzMEzPgQgiIwFcT6HTv8pU4HQWws6awz3Fr7ewgGq82kuM6wGPqrM8YKIMhL0IBxdUbfDFKi984/w400-h308/RC522-RFID-Reader-Module-Pinout.jpg" width="400" /></a></span></div><span style="font-size: x-large;"><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5u17gsC7ynZ611uBDR6PokSk4pS3yU2gc4eoP5m8FytE3ouKuJq9ivgL0PJbuL91s2O8OODSGy0V_Pd_9epPkrQxS2UuQnpXqy2Uw1QcVMYOMHlaDNHleF4H-rc47PIm8uFPrKdTCQ3M3lPmETxuol9_SuNvrBXJISYpF2z2IFBxRnIu-YOjyAZY_CH0/s750/RFID-Reader-Module-Parts.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="376" data-original-width="750" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5u17gsC7ynZ611uBDR6PokSk4pS3yU2gc4eoP5m8FytE3ouKuJq9ivgL0PJbuL91s2O8OODSGy0V_Pd_9epPkrQxS2UuQnpXqy2Uw1QcVMYOMHlaDNHleF4H-rc47PIm8uFPrKdTCQ3M3lPmETxuol9_SuNvrBXJISYpF2z2IFBxRnIu-YOjyAZY_CH0/w400-h200/RFID-Reader-Module-Parts.jpg" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_y9NgXUTeB7gs65iHhMpivb19ZHhcWlLDFi7AGQPiNHlK9nnExO38iQzr9uHeenvIM27C0mTZAZM0tVmQHyC__y8ai_it2MwgRrEHtPG_Tj_9y9zdsIzjoh-kxfyw26LKQQGvtFTA1IU2UrqZx4_2Sr01LsDU0Kyk7XeJBsv158elHlZKmGviSoErsw/s750/RFID-Reader-Module-Working.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="750" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhp_y9NgXUTeB7gs65iHhMpivb19ZHhcWlLDFi7AGQPiNHlK9nnExO38iQzr9uHeenvIM27C0mTZAZM0tVmQHyC__y8ai_it2MwgRrEHtPG_Tj_9y9zdsIzjoh-kxfyw26LKQQGvtFTA1IU2UrqZx4_2Sr01LsDU0Kyk7XeJBsv158elHlZKmGviSoErsw/w640-h398/RFID-Reader-Module-Working.gif" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpkHLgpNFVZOcSXcnoYh1aOEAZ0DAqrRMYhssb3KFlzLKSBDC0tTJqRxhvHcSbI2DJW0JKxc2jFjbjSuKey71H9sj_zJX19IYY7hdajHXhmKBf-tijvRMRYtmmZXLkYi_lSenHFeXYUisybVJO-r6HAne-2ZcBUUEyI_XVZnUbV14qYsXh7uaf30M82U4/s750/RFID-Reader-Module-Working.gif" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="750" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpkHLgpNFVZOcSXcnoYh1aOEAZ0DAqrRMYhssb3KFlzLKSBDC0tTJqRxhvHcSbI2DJW0JKxc2jFjbjSuKey71H9sj_zJX19IYY7hdajHXhmKBf-tijvRMRYtmmZXLkYi_lSenHFeXYUisybVJO-r6HAne-2ZcBUUEyI_XVZnUbV14qYsXh7uaf30M82U4/w640-h398/RFID-Reader-Module-Working.gif" width="640" /></a></div><br /><b><br /></b></span><p></p><p></p><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVZ8abcmBmLhk4mifsh5e5ARB89eAFaMqVYkI7QHmbE-g0FG8IHljiFqBZPoC85PmuFufcMd1-Fq7FSUewVAd4DxqzV1fA4ir6XEJ9jrXLDXObPTXAuaDGmaTBzv_6kqFosZbLE2CErx1pjSO6O3TcZc5UpBW_F7TCVl0Sz33DxaTO7LZL1_rLab6Bgd0/s1260/2024-01-28%2019%2000%2026.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="389" data-original-width="1260" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVZ8abcmBmLhk4mifsh5e5ARB89eAFaMqVYkI7QHmbE-g0FG8IHljiFqBZPoC85PmuFufcMd1-Fq7FSUewVAd4DxqzV1fA4ir6XEJ9jrXLDXObPTXAuaDGmaTBzv_6kqFosZbLE2CErx1pjSO6O3TcZc5UpBW_F7TCVl0Sz33DxaTO7LZL1_rLab6Bgd0/w640-h198/2024-01-28%2019%2000%2026.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7KXcrm4Gxq3jsvVb6KxnpCUsL9Ik3JrS0g5ErzhgD5lbApWvyk8DxOOC21U1a-lC5YKTb9E0smBN4i-VoTp1nodeAa0qoDsWfJcaBlLWV7JlW0LPnu65G3NegJTRfgnuYrcOAHWswZPqpssXrWi62O1X3Lr7r6-what5kdrlH0lai6g1uzSo6jHkJxw0/s513/2024-01-28%2019%2002%2001.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="504" data-original-width="513" height="628" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7KXcrm4Gxq3jsvVb6KxnpCUsL9Ik3JrS0g5ErzhgD5lbApWvyk8DxOOC21U1a-lC5YKTb9E0smBN4i-VoTp1nodeAa0qoDsWfJcaBlLWV7JlW0LPnu65G3NegJTRfgnuYrcOAHWswZPqpssXrWi62O1X3Lr7r6-what5kdrlH0lai6g1uzSo6jHkJxw0/w640-h628/2024-01-28%2019%2002%2001.png" width="640" /></a></div><br /><div class="separator" style="clear: both; font-size: xx-large; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ce1chQFCx6BjdhwZdDkB_6CFwf1JJiMjhpjzQuGHHnjXIzxUtDjEN1VZTB9Ex90EoxAYYTqQwMmbXQe-s8MmOtGBspU5ajpsoR8yMgmbw9BKXmmqvmnkpKb2oU_u4jspJ3dQRQew3aLcFAq6b2hGclj4xYqSsnLDwKHtI93X_N7_92udmpzQuIhxjyk/s925/2024-01-28%2019%2003%2045.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="925" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh4ce1chQFCx6BjdhwZdDkB_6CFwf1JJiMjhpjzQuGHHnjXIzxUtDjEN1VZTB9Ex90EoxAYYTqQwMmbXQe-s8MmOtGBspU5ajpsoR8yMgmbw9BKXmmqvmnkpKb2oU_u4jspJ3dQRQew3aLcFAq6b2hGclj4xYqSsnLDwKHtI93X_N7_92udmpzQuIhxjyk/w640-h288/2024-01-28%2019%2003%2045.png" width="640" /></a></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"><br /></span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><p></p><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">/* Wiring RFID RC522 module </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">==============================================================</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">GND = GND 3.3V = 3.3V</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">The following table shows the typical pin layout used:</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * MFRC522 ESP32 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * Reader/PCD </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * Signal Pin Pin </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * -----------------------------------</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * RST/Reset RST GPIO27 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * SPI SS SDA(SS) GPIO5 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * SPI MOSI MOSI GPIO23 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * SPI MISO MISO GPIO19 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> * SPI SCK SCK GPIO18 </span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;"> *</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">=============================================================</span></div><div style="font-family: Consolas, "Courier New", monospace; font-size: 20px; white-space: pre;"><span style="color: red;">*/</span></div><p></p><p><span style="font-size: medium;"><br /></span></p><p><span style="font-size: medium;"><br /></span></p><p></p><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 20px; line-height: 27px; white-space: pre;"><div><span style="color: #7f8c8d;">/*</span></div><div><span style="color: #7f8c8d;"> ArduinoMqttClient - WiFi Simple Receive Callback</span></div><br /><div><span style="color: #7f8c8d;"> This example connects to a MQTT broker and subscribes to a single topic.</span></div><div><span style="color: #7f8c8d;"> When a message is received it prints the message to the Serial Monitor,</span></div><div><span style="color: #7f8c8d;"> it uses the callback functionality of the library.</span></div><br /><div><span style="color: #7f8c8d;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #7f8c8d;">//char ssid[] = "TOTOLINK_A3002MU"; // your network SSID (name)</span></div><div><span style="color: #7f8c8d;">//char pass[] = "24063173"; // your network password (use for WPA, or use as key for WEP)</span></div><br /><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"dlink-103A"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"bdcce12882"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><br /><div><span style="color: #7f8c8d;">// To connect with SSL/TLS:</span></div><div><span style="color: #7f8c8d;">// 1) Change WiFiClient to WiFiSSLClient.</span></div><div><span style="color: #7f8c8d;">// 2) Change port value from 1883 to 8883.</span></div><div><span style="color: #7f8c8d;">// 3) Change broker value to a server with a known SSL/TLS root certificate </span></div><div><span style="color: #7f8c8d;">// flashed in the WiFi module.</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/will"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> inTopic[] = <span style="color: #7fcbcd;">"alex9ufo/in"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> outTopic[] = <span style="color: #7fcbcd;">"alex9ufo/out"</span>;</div><br /><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">long</span> interval = <span style="color: #7fcbcd;">30000</span>;</div><div><span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> previousMillis = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #0ca1a6;">int</span> count = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">2</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic1 = <span style="color: #7fcbcd;">"alex9ufo/RFID/read"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/RFID/back"</span>;</div><br /><div>byte sector = <span style="color: #7fcbcd;">15</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區段」,可能值:0~15</span></div><div>byte block = <span style="color: #7fcbcd;">1</span>;<span style="color: #7f8c8d;"> // 指定讀寫的「區塊」,可能值:0~3</span></div><div>byte <span style="color: #f39c12;">blockData</span>[<span style="color: #7fcbcd;">16</span>] = {<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">0</span>} ;<span style="color: #7f8c8d;"> // 最多可存入16個字元</span></div><div><span style="color: #7f8c8d;">// 若要清除區塊內容,請寫入16個 0</span></div><div><span style="color: #7f8c8d;">//byte blockData[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};</span></div><div><span style="color: #7f8c8d;">// 暫存讀取區塊內容的陣列,MIFARE_Read()方法要求至少要18位元組空間,來存放16位元組。</span></div><div>byte <span style="color: #f39c12;">bufferarray</span>[<span style="color: #7fcbcd;">18</span>] = {<span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span>, <span style="color: #7fcbcd;">0</span> } ;</div><div><span style="color: #0ca1a6;">bool</span> RD_flag=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #0ca1a6;">bool</span> Pub_flag=<span style="color: #7fcbcd;">false</span>;</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> String Topic= <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String topicIN=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> topicIN=topicIN+(<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><br /><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topicIN);</div><div> <span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> String sec1 ,blk1 ,text1; </div><div> sec1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">2</span>);</div><div> blk1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">3</span>,<span style="color: #7fcbcd;">5</span>);</div><div> text1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">6</span>);</div><div> sector = <span style="color: #f39c12;">sec1</span>.<span style="color: #f39c12;">toInt</span>();</div><div> block = <span style="color: #f39c12;">blk1</span>.<span style="color: #f39c12;">toInt</span>();</div><br /><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">Topic</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">14</span>,<span style="color: #7fcbcd;">18</span>) == <span style="color: #7fcbcd;">"read"</span>) {</div><div> sec1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">0</span>,<span style="color: #7fcbcd;">2</span>);</div><div> blk1=<span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">substring</span>(<span style="color: #7fcbcd;">3</span>,<span style="color: #7fcbcd;">5</span>);</div><div><span style="color: #7f8c8d;"> //String text1=message.subString(6);</span></div><div> sector = <span style="color: #f39c12;">sec1</span>.<span style="color: #f39c12;">toInt</span>();</div><div> block = <span style="color: #f39c12;">blk1</span>.<span style="color: #f39c12;">toInt</span>(); </div><br /><div> </div><div> RD_flag=<span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">"Topic: "</span>); </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(Topic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">"Sector: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(sec1); </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span> (<span style="color: #7fcbcd;">" Block: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(blk1);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">dump_byte_array</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">" 0"</span> : <span style="color: #7fcbcd;">" "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);<span style="color: #7f8c8d;"> // 設置板上LED引腳為輸出模式</span></div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // 啟動後關閉板上LED</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open:</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);</div><div><span style="color: #7f8c8d;"> // Connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // You can provide a unique client ID, if not set the library uses Arduino-millis()</span></div><div><span style="color: #7f8c8d;"> // Each client must have a unique client ID</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setId("clientId");</span></div><br /><div><span style="color: #7f8c8d;"> // You can provide a username and password for authentication</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setUsernamePassword("username", "password");</span></div><br /><div><span style="color: #7f8c8d;"> // By default the library connects with the "clean session" flag set,</span></div><div><span style="color: #7f8c8d;"> // you can disable this behaviour by using</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setCleanSession(false);</span></div><br /><div><span style="color: #7f8c8d;"> // set a will message, used by the broker when the connection dies unexpectedly</span></div><div><span style="color: #7f8c8d;"> // you must know the size of the message beforehand, and it must be set before connecting</span></div><div> String willPayload = <span style="color: #7fcbcd;">"oh no!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topic1);</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(inTopic, subscribeQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(topic1, subscribeQos);</div><br /><div><span style="color: #7f8c8d;"> // topics can be unsubscribed using:</span></div><div><span style="color: #7f8c8d;"> // mqttClient.unsubscribe(inTopic);</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Waiting for messages on topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> //啟動 mfrc522</span></div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // 初始化MFRC522讀卡機模組</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 準備金鑰(用於key A和key B),出廠預設為6組 0xFF。</span></div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < <span style="color: #7fcbcd;">6</span>; i++) {</div><div> <span style="color: #f39c12;">key</span>.<span style="color: #f39c12;">keyByte</span>[i] = 0x<span style="color: #7fcbcd;">FF</span>;</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><br /><div> </div><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = json +(<span style="color: #7fcbcd;">" Card UID: "</span>);</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> json = json +(<span style="color: #7fcbcd;">" , PICC type: "</span>);</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><br /><div>}</div><br /><br /><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><br /></div><p><b style="font-size: xx-large;"><br /></b></p>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-20175081215297746242024-01-24T04:30:00.000-08:002024-01-28T03:05:11.790-08:00ESP32 使用 ArduinoMqttClient 程式庫 執行MQTT + MFRC522 RFID Reader <p><span style="font-size: x-large;"> 使用 ArduinoMqttClient 程式庫 執行MQTT + MFRC522 RFID Reader </span></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjChImRh9uMUwZnbnO_DQ037cdTmtlGE_7xEiJJB3-Rm2v32DfBahCbFYDGjh8it6yua6BJaESpBVNvEfp55_OxEnn9s0kZ0FFF1Tpn-OW4vfFfsAJbCxxe5jiBmEE5u9V8Em-100W4bSQYWdZvQptOYum6vjpbjvMONGbxkwCZcl_YU4vIn0xphhbx_Mw/s750/RFID-Reader-Module-Working.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="466" data-original-width="750" height="398" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjChImRh9uMUwZnbnO_DQ037cdTmtlGE_7xEiJJB3-Rm2v32DfBahCbFYDGjh8it6yua6BJaESpBVNvEfp55_OxEnn9s0kZ0FFF1Tpn-OW4vfFfsAJbCxxe5jiBmEE5u9V8Em-100W4bSQYWdZvQptOYum6vjpbjvMONGbxkwCZcl_YU4vIn0xphhbx_Mw/w640-h398/RFID-Reader-Module-Working.gif" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHmp14lzvoMqwa8spOnnIt4r2xz46yNs5y3voTujUd8Bybjekx_diAPCoguvaOmUd33wQw4_aX_8uVToq8wGHmTvNXtuf8L6tw1yr0n3IOm9AGj2DgR5yVXEOpbp75z5mkt3wFGtCvC9mF4LYhcYm62QXaCgDTCfrgjskJDiq_dTGLhwwBzbc3SsBTyiU/s593/2024-01-24%2020%2026%2019.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="593" data-original-width="486" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHmp14lzvoMqwa8spOnnIt4r2xz46yNs5y3voTujUd8Bybjekx_diAPCoguvaOmUd33wQw4_aX_8uVToq8wGHmTvNXtuf8L6tw1yr0n3IOm9AGj2DgR5yVXEOpbp75z5mkt3wFGtCvC9mF4LYhcYm62QXaCgDTCfrgjskJDiq_dTGLhwwBzbc3SsBTyiU/w524-h640/2024-01-24%2020%2026%2019.png" width="524" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4ubMspTvahYVHPtO-NSdw965FycUxvQLc5YRQbi4J7OkH6ja9GM2qP-q3_Jcajg7pm7P9fl8KIw63QHk2SDbhtxFGJmK-0m91wJlBjPVWdJzuLeur-uvcK6h31QjTeMIhNN54fLSnC7uLncNpQwnfkMS26hluASRYKFWAzfLkfJXmEszUCPqUUDGjECY/s1346/2024-01-24%2020%2026%2052.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="416" data-original-width="1346" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4ubMspTvahYVHPtO-NSdw965FycUxvQLc5YRQbi4J7OkH6ja9GM2qP-q3_Jcajg7pm7P9fl8KIw63QHk2SDbhtxFGJmK-0m91wJlBjPVWdJzuLeur-uvcK6h31QjTeMIhNN54fLSnC7uLncNpQwnfkMS26hluASRYKFWAzfLkfJXmEszUCPqUUDGjECY/w640-h198/2024-01-24%2020%2026%2052.png" width="640" /></a></div><br /><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;">/* Wiring RFID RC522 module </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;">=================================================</span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;">GND = GND 3.3V = 3.3V</span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;">The following table shows the typical pin layout used:</span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * MFRC522 ESP32 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * Reader/PCD </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * Signal Pin Pin </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * -----------------------------------</span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * RST/Reset RST GPIO27 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * SPI SS SDA(SS) GPIO5 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * SPI MOSI MOSI GPIO23 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * SPI MISO MISO GPIO19 </span></div><div style="font-family: Consolas, "Courier New", monospace; white-space: pre;"><span style="color: red; font-size: large;"> * SPI SCK SCK GPIO18 </span></div><div style="color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 16px; white-space: pre;"><span style="color: #7f8c8d;"><br /></span></div><div style="color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 16px; white-space: pre;"><span style="color: #7f8c8d;"><br /></span></div><div style="background-color: #1f272a; color: #dae3e3; font-family: Consolas, "Courier New", monospace; font-size: 16px; line-height: 22px; white-space: pre;"><div><span style="color: #7f8c8d;">/*</span></div><div><span style="color: #7f8c8d;"> ArduinoMqttClient - WiFi Simple Receive Callback</span></div><br /><div><span style="color: #7f8c8d;"> This example connects to a MQTT broker and subscribes to a single topic.</span></div><div><span style="color: #7f8c8d;"> When a message is received it prints the message to the Serial Monitor,</span></div><div><span style="color: #7f8c8d;"> it uses the callback functionality of the library.</span></div><br /><div><span style="color: #7f8c8d;">*/</span></div><br /><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><ArduinoMqttClient.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><WiFi.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;">"arduino_secrets.h"</span></div><br /><div><span style="color: #7f8c8d;">///////please enter your sensitive data in the Secret tab/arduino_secrets.h</span></div><div><span style="color: #0ca1a6;">char</span> ssid[] = <span style="color: #7fcbcd;">"TOTOLINK_A3002MU"</span>;<span style="color: #7f8c8d;"> // your network SSID (name)</span></div><div><span style="color: #0ca1a6;">char</span> pass[] = <span style="color: #7fcbcd;">"24063173"</span>;<span style="color: #7f8c8d;"> // your network password (use for WPA, or use as key for WEP)</span></div><br /><div><span style="color: #7f8c8d;">// To connect with SSL/TLS:</span></div><div><span style="color: #7f8c8d;">// 1) Change WiFiClient to WiFiSSLClient.</span></div><div><span style="color: #7f8c8d;">// 2) Change port value from 1883 to 8883.</span></div><div><span style="color: #7f8c8d;">// 3) Change broker value to a server with a known SSL/TLS root certificate </span></div><div><span style="color: #7f8c8d;">// flashed in the WiFi module.</span></div><br /><div>WiFiClient wifiClient;</div><div>MqttClient <span style="color: #f39c12;">mqttClient</span>(wifiClient);</div><br /><div><span style="color: #7f8c8d;">//const char broker[] = "test.mosquitto.org";</span></div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> broker[] = <span style="color: #7fcbcd;">"broker.mqtt-dashboard.com"</span>;</div><div><span style="color: #0ca1a6;">int</span> port = <span style="color: #7fcbcd;">1883</span>;</div><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> willTopic[] = <span style="color: #7fcbcd;">"alex9ufo/will"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> inTopic[] = <span style="color: #7fcbcd;">"alex9ufo/in"</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> outTopic[] = <span style="color: #7fcbcd;">"alex9ufo/out"</span>;</div><br /><br /><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">long</span> interval = <span style="color: #7fcbcd;">10000</span>;</div><div><span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> previousMillis = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #0ca1a6;">int</span> count = <span style="color: #7fcbcd;">0</span>;</div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">LED</span> <span style="color: #7fcbcd;">2</span><span style="color: #7f8c8d;"> //定義LED接腳</span></div><div><span style="color: #7f8c8d;">//定義MFRC522 RFID read 與 ESP32 介面 接腳連接Pin assign</span></div><div><span style="color: #7f8c8d;">/* Wiring RFID RC522 module </span></div><div><span style="color: #7f8c8d;">==============================================================</span></div><div><span style="color: #7f8c8d;">GND = GND 3.3V = 3.3V</span></div><div><span style="color: #7f8c8d;">The following table shows the typical pin layout used:</span></div><div><span style="color: #7f8c8d;"> * MFRC522 ESP32 </span></div><div><span style="color: #7f8c8d;"> * Reader/PCD </span></div><div><span style="color: #7f8c8d;"> * Signal Pin Pin </span></div><div><span style="color: #7f8c8d;"> * -----------------------------------</span></div><div><span style="color: #7f8c8d;"> * RST/Reset RST GPIO27 </span></div><div><span style="color: #7f8c8d;"> * SPI SS SDA(SS) GPIO5 </span></div><div><span style="color: #7f8c8d;"> * SPI MOSI MOSI GPIO23 </span></div><div><span style="color: #7f8c8d;"> * SPI MISO MISO GPIO19 </span></div><div><span style="color: #7f8c8d;"> * SPI SCK SCK GPIO18 </span></div><div><span style="color: #7f8c8d;"> *</span></div><div><span style="color: #7f8c8d;">[1] (1, 2) Configurable, typically defined as RST_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[2] (1, 2) Configurable, typically defined as SS_PIN in sketch/program.</span></div><div><span style="color: #7f8c8d;">[3] The SDA pin might be labeled SS on some/older MFRC522 boards</span></div><div><span style="color: #7f8c8d;">=============================================================</span></div><div><span style="color: #7f8c8d;">*/</span></div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><SPI.h></span></div><div><span style="color: #c586c0;">#include</span> <span style="color: #7fcbcd;"><MFRC522.h></span></div><br /><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">RST_PIN</span> <span style="color: #7fcbcd;">27</span><span style="color: #7f8c8d;"> // 讀卡機的重置腳位</span></div><div><span style="color: #c586c0;">#define</span> <span style="color: #f39c12;">SS_PIN</span> <span style="color: #7fcbcd;">5</span><span style="color: #7f8c8d;"> // 晶片選擇腳位</span></div><div>MFRC522 <span style="color: #f39c12;">mfrc522</span>(SS_PIN, RST_PIN);<span style="color: #7f8c8d;"> // 建立MFRC522物件</span></div><div>MFRC522::MIFARE_Key key;<span style="color: #7f8c8d;"> // 儲存金鑰</span></div><div>MFRC522::StatusCode status;</div><div>String json = <span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #0ca1a6;">const</span> <span style="color: #0ca1a6;">char</span> *topic3 = <span style="color: #7fcbcd;">"alex9ufo/RFID/back"</span>;</div><br /><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">onMqttMessage</span>(<span style="color: #0ca1a6;">int</span> messageSize) {</div><div><span style="color: #7f8c8d;"> // we received a message, print out the topic and contents</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Received a message with topic '"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageTopic</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', duplicate = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageDup</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", QoS = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageQoS</span>());</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">", retained = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">messageRetain</span>() ? <span style="color: #7fcbcd;">"true"</span> : <span style="color: #7fcbcd;">"false"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"', length "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(messageSize);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">" bytes:"</span>);</div><div> String topicIN=<span style="color: #7fcbcd;">""</span>;</div><div><span style="color: #7f8c8d;"> // use the Stream interface to print the contents</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">available</span>()) {</div><div><span style="color: #7f8c8d;"> //Serial.print((char)mqttClient.read());</span></div><div> topicIN=topicIN+(<span style="color: #0ca1a6;">char</span>)<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">read</span>();</div><br /><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(topicIN);</div><div> <span style="color: #f39c12;">topicIN</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (topicIN == <span style="color: #7fcbcd;">"on"</span>) {<span style="color: #7f8c8d;"> // 如果收到的資訊以“on”為開始</span></div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, LOW);<span style="color: #7f8c8d;"> // 則點亮LED。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"LED on"</span>);</div><div> }</div><div> <span style="color: #c586c0;">if</span> (topicIN == <span style="color: #7fcbcd;">"off"</span>) {<span style="color: #7f8c8d;"> // 如果收到的資訊以“off”為開始} </span></div><div> <span style="color: #f39c12;">digitalWrite</span>(LED , HIGH);<span style="color: #7f8c8d;"> // 否則熄滅LED。</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"LED off"</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #7f8c8d;">//副程式 setup wifi</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup_wifi</span>() {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">10</span>);</div><div><span style="color: #7f8c8d;"> // We start by connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Connecting to "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(ssid);<span style="color: #7f8c8d;"> //print ssid</span></div><div> <span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">begin</span>(ssid, pass);<span style="color: #7f8c8d;"> //初始化WiFi 函式庫並回傳目前的網路狀態</span></div><div> <span style="color: #c586c0;">while</span> (<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">status</span>() != WL_CONNECTED) {</div><div> <span style="color: #f39c12;">delay</span>(<span style="color: #7fcbcd;">500</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"."</span>);</div><div> }<span style="color: #7f8c8d;"> //假設 wifi 未連接 show ………</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">""</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"WiFi connected"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"IP address: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">WiFi</span>.<span style="color: #f39c12;">localIP</span>());</div><div>} </div><div><span style="color: #7f8c8d;">//=========================================================== </span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">dump_byte_array</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">" 0"</span> : <span style="color: #7fcbcd;">" "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> }</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div>String <span style="color: #f39c12;">printHex</span>(byte <span style="color: #0ca1a6;">*</span>buffer, byte bufferSize) {</div><div> String id = <span style="color: #7fcbcd;">""</span>;</div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < bufferSize; i++) {</div><div> id += <span style="color: #f39c12;">buffer</span>[i] < 0x<span style="color: #7fcbcd;">10</span> ? <span style="color: #7fcbcd;">"0"</span> : <span style="color: #7fcbcd;">""</span>;</div><div> id += <span style="color: #f39c12;">String</span>(<span style="color: #f39c12;">buffer</span>[i], HEX);</div><div> id +=<span style="color: #7fcbcd;">" "</span>;</div><div> }</div><div> <span style="color: #c586c0;">return</span> id;</div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">setup</span>() {</div><div> <span style="color: #f39c12;">pinMode</span>(LED, OUTPUT);<span style="color: #7f8c8d;"> // 設置板上LED引腳為輸出模式</span></div><div> <span style="color: #f39c12;">digitalWrite</span>(LED, HIGH);<span style="color: #7f8c8d;"> // 啟動後關閉板上LED</span></div><div><span style="color: #7f8c8d;"> //Initialize serial and wait for port to open:</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">begin</span>(<span style="color: #7fcbcd;">115200</span>);</div><div><span style="color: #7f8c8d;"> // Connecting to a WiFi network</span></div><div> <span style="color: #f39c12;">setup_wifi</span>();</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the network"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // You can provide a unique client ID, if not set the library uses Arduino-millis()</span></div><div><span style="color: #7f8c8d;"> // Each client must have a unique client ID</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setId("clientId");</span></div><br /><div><span style="color: #7f8c8d;"> // You can provide a username and password for authentication</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setUsernamePassword("username", "password");</span></div><br /><div><span style="color: #7f8c8d;"> // By default the library connects with the "clean session" flag set,</span></div><div><span style="color: #7f8c8d;"> // you can disable this behaviour by using</span></div><div><span style="color: #7f8c8d;"> // mqttClient.setCleanSession(false);</span></div><br /><div><span style="color: #7f8c8d;"> // set a will message, used by the broker when the connection dies unexpectedly</span></div><div><span style="color: #7f8c8d;"> // you must know the size of the message beforehand, and it must be set before connecting</span></div><div> String willPayload = <span style="color: #7fcbcd;">"oh no!"</span>;</div><div> <span style="color: #0ca1a6;">bool</span> willRetain = <span style="color: #7fcbcd;">true</span>;</div><div> <span style="color: #0ca1a6;">int</span> willQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginWill</span>(willTopic, <span style="color: #f39c12;">willPayload</span>.<span style="color: #f39c12;">length</span>(), willRetain, willQos);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(willPayload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endWill</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Attempting to connect to the MQTT broker: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(broker);</div><br /><div> <span style="color: #c586c0;">if</span> (!<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connect</span>(broker, port)) {</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"MQTT connection failed! Error code = "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">connectError</span>());</div><br /><div> <span style="color: #c586c0;">while</span> (<span style="color: #7fcbcd;">1</span>);</div><div> }</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #7fcbcd;">"You're connected to the MQTT broker!"</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // set the message receive callback</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">onMessage</span>(onMqttMessage);</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Subscribing to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div><span style="color: #7f8c8d;"> // subscribe to a topic</span></div><div><span style="color: #7f8c8d;"> // the second parameter sets the QoS of the subscription,</span></div><div><span style="color: #7f8c8d;"> // the the library supports subscribing at QoS 0, 1, or 2</span></div><div> <span style="color: #0ca1a6;">int</span> subscribeQos = <span style="color: #7fcbcd;">1</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">subscribe</span>(inTopic, subscribeQos);</div><br /><div><span style="color: #7f8c8d;"> // topics can be unsubscribed using:</span></div><div><span style="color: #7f8c8d;"> // mqttClient.unsubscribe(inTopic);</span></div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Waiting for messages on topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(inTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> //啟動 mfrc522</span></div><div> <span style="color: #f39c12;">SPI</span>.<span style="color: #f39c12;">begin</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_Init</span>();<span style="color: #7f8c8d;"> // 初始化MFRC522讀卡機模組</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><div><span style="color: #0ca1a6;">void</span> <span style="color: #f39c12;">loop</span>() {</div><div><span style="color: #7f8c8d;"> // call poll() regularly to allow the library to receive MQTT messages and</span></div><div><span style="color: #7f8c8d;"> // send MQTT keep alives which avoids being disconnected by the broker</span></div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">poll</span>();</div><br /><div><span style="color: #7f8c8d;"> // to avoid having delays in loop, we'll use the strategy from BlinkWithoutDelay</span></div><div><span style="color: #7f8c8d;"> // see: File -> Examples -> 02.Digital -> BlinkWithoutDelay for more info</span></div><div> <span style="color: #0ca1a6;">unsigned</span> <span style="color: #0ca1a6;">long</span> currentMillis = <span style="color: #f39c12;">millis</span>();</div><br /><div> <span style="color: #c586c0;">if</span> (currentMillis - previousMillis >= interval) {</div><div><span style="color: #7f8c8d;"> // save the last time a message was sent</span></div><div> previousMillis = currentMillis;</div><br /><div> String payload;</div><br /><div> payload += <span style="color: #7fcbcd;">"hello world!"</span>;</div><div> payload += <span style="color: #7fcbcd;">" "</span>;</div><div> payload += count;</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"Sending message to topic: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(outTopic);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(payload);</div><br /><div><span style="color: #7f8c8d;"> // send message, the Print interface can be used to set the message contents</span></div><div><span style="color: #7f8c8d;"> // in this case we know the size ahead of time, so the message payload can be streamed</span></div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(outTopic, <span style="color: #f39c12;">payload</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(payload);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><div> count++;</div><br /><div> }</div><div> </div><div> </div><br /><div> <span style="color: #c586c0;">if</span> (<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_IsNewCardPresent</span>() && <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_ReadCardSerial</span>()) {</div><div> </div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">F</span>(<span style="color: #7fcbcd;">"Please scan MIFARE Classic card..."</span>));</div><div><span style="color: #7f8c8d;"> // 確認是否有新卡片</span></div><div> </div><div> byte *id = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>;<span style="color: #7f8c8d;"> // 取得卡片的UID</span></div><div> byte idSize = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>;<span style="color: #7f8c8d;"> // 取得UID的長度</span></div><div> String Type;</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"PICC type: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片類型</span></div><div><span style="color: #7f8c8d;"> // 根據卡片回應的SAK值(mfrc522.uid.sak)判斷卡片類型</span></div><div> MFRC522::PICC_Type piccType = <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetType</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">sak</span>);</div><div> Type= <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_GetTypeName</span>(piccType));</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"UID Size: "</span>);<span style="color: #7f8c8d;"> // 顯示卡片的UID長度值</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(idSize);</div><div> </div><div> <span style="color: #c586c0;">for</span> (byte i = <span style="color: #7fcbcd;">0</span>; i < idSize; i++) {<span style="color: #7f8c8d;"> // 逐一顯示UID碼</span></div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"id["</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(i);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">print</span>(<span style="color: #7fcbcd;">"]: "</span>);</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>(<span style="color: #f39c12;">id</span>[i], HEX);<span style="color: #7f8c8d;"> // 以16進位顯示UID值</span></div><div> }</div><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><br /><br /><br /><div> json=<span style="color: #7fcbcd;">""</span>;</div><div> json = json +(<span style="color: #7fcbcd;">" Card UID: "</span>);</div><div> String json1=<span style="color: #f39c12;">printHex</span>(<span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">uidByte</span>, <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">uid</span>.<span style="color: #f39c12;">size</span>);</div><div> <span style="color: #f39c12;">json1</span>.<span style="color: #f39c12;">toUpperCase</span>();</div><div> json = json + json1;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><div> json = json +(<span style="color: #7fcbcd;">" , PICC type: "</span>);</div><div> json = json + Type;</div><div> <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">trim</span>();</div><br /><div> <span style="color: #0ca1a6;">bool</span> retained = <span style="color: #7fcbcd;">false</span>;</div><div> <span style="color: #0ca1a6;">int</span> qos = <span style="color: #7fcbcd;">1</span>;</div><div> <span style="color: #0ca1a6;">bool</span> dup = <span style="color: #7fcbcd;">false</span>;</div><br /><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">beginMessage</span>(topic3, <span style="color: #f39c12;">json</span>.<span style="color: #f39c12;">length</span>(), retained, qos, dup);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">print</span>(json);</div><div> <span style="color: #f39c12;">mqttClient</span>.<span style="color: #f39c12;">endMessage</span>();</div><br /><div> <span style="color: #f39c12;">Serial</span>.<span style="color: #f39c12;">println</span>();</div><div><span style="color: #7f8c8d;"> // Dump debug info about the card; PICC_HaltA() is automatically called</span></div><div><span style="color: #7f8c8d;"> // 令卡片進入停止狀態</span></div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PICC_HaltA</span>();</div><div> <span style="color: #f39c12;">mfrc522</span>.<span style="color: #f39c12;">PCD_StopCrypto1</span>();<span style="color: #7f8c8d;"> // stop encryption on PCD</span></div><br /><div>}</div><br /><br /><div>}</div><div><span style="color: #7f8c8d;">//===========================================================</span></div><br /></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0tag:blogger.com,1999:blog-2769060068368517893.post-86274477928657870282024-01-19T02:36:00.000-08:002024-01-19T02:36:17.505-08:00圖解 MQTT教學系列 共十篇<p> <span style="color: var(--primary-text); font-family: inherit; font-size: x-large; white-space-collapse: preserve;">[轉載趙英傑老師文章] 2021/03/11 圖解 MQTT教學系列 共十篇</span></p><div style="font-family: inherit;"><div class="" dir="auto" style="font-family: inherit;"><div class="x1iorvi4 x1pi30zi x1swvt13 xjkvuk6" data-ad-comet-preview="message" data-ad-preview="message" id=":r1c:" style="font-family: inherit; padding: 4px 16px;"><div class="x78zum5 xdt5ytf xz62fqu x16ldp7u" style="display: flex; flex-direction: column; font-family: inherit; margin-bottom: -5px; margin-top: -5px;"><div class="xu06os2 x1ok221b" style="font-family: inherit; margin-bottom: 5px; margin-top: 5px;"><span class="x193iq5w xeuugli x13faqbe x1vvkbs x1xmvt09 x1lliihq x1s928wv xhkezso x1gmr53x x1cpjm7i x1fgarty x1943h6x xudqn12 x3x7a5m x6prxxf xvq8zen xo1l8bm xzsf02u x1yc453h" dir="auto" style="color: var(--primary-text); display: block; font-family: inherit; line-height: 1.3333; max-width: 100%; min-width: 0px; overflow-wrap: break-word; word-break: break-word;"><div class="xdj266r x11i5rnm xat24cr x1mh8g0r x1vvkbs x126k92a" style="font-family: inherit; margin: 0px; overflow-wrap: break-word; white-space-collapse: preserve;"><div dir="auto" style="font-family: inherit;"><span style="font-size: large;"><br /></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(一):認識MQTT</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1002&fbclid=IwAR2ThRNOupH0zf_-Dc5P4w8gIJrCOIkbWazQYe3S5ZPmbisZnEQpEdvwmTQ" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1002</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(二):安裝MQTT伺服器Mosquitto,Windows系統篇</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1005&fbclid=IwAR2ThRNOupH0zf_-Dc5P4w8gIJrCOIkbWazQYe3S5ZPmbisZnEQpEdvwmTQ" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1005</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(三):安裝MQTT伺服器Mosquitto,macOS系統篇</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1007&fbclid=IwAR0jIJCsBwistU5bcbpDDZcMUUacHrM1zWeEIpdE9XgWRdC3J70IuGUlhKY" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1007</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(四):使用MQTTLens訂閱與發布MQTT訊息</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1009&fbclid=IwAR1URZArz7VPfcCXDvR3pULb1XEkinRmlxXG4NYz-_MostoAbgk4CIs1Ezo" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1009</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(五):「保留」發布訊息以及QoS品質設定</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://l.facebook.com/l.php?u=https%3A%2F%2Fswf.com.tw%2F%3Fp%3D1015%26fbclid%3DIwAR0L7NIj3DCerRnueukzZTyH1Sypf3k8dS1QxkkLvM8rHsNCPz5LNTzCN4o&h=AT3XCKlfAjPJjhKGH2DucYakWqSPN_OfunOSFWegFu_GdspUZSK10bl6DJejsyphkqWB9fuCFpgsaT_rfYfkp1rQOlUpzO-_3ohbLYudGLUYztYAJ6EKM2rcz8hvDn0GHw&__tn__=-UK-R&c[0]=AT0TitCEBbalLQfMcKfsZ9pfrwl48LnFmNJT50sqZgrQjyl5yxs5kiXr3RBJlxpnau30WncnPO59A8De01PGZUSl3XevgKuir1UE6MLmg2HaL-zTOKKkkqg35BUTs-Dl4vP-Xwk_qwu5N5TzREB8TNdl1iDEOUGp" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1015</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(六):使用PubSubClient程式庫開發Arduino MQTT應用</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1021&fbclid=IwAR004FY9RHrNNJrRMMVPmu_iLRxbQLjvXzNsL9nWYNTrEOcdRbJXxjsqFFY" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1021</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(七):使用Node.js訂閱MQTT訊息</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1023&fbclid=IwAR07DQAVjScPjoPpPK6Pw4F-g8iOMUyw1rtbR3S3zrC8sSUoCp-FxhMvcnk" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1023</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(八):使用MQTTlens上傳資料到ThingSpeak的MQTT伺服器</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1087&fbclid=IwAR15p77NY6UGkqX83dsqXOaVbdD8irs6uNmt7Rja0BHnOX9PY85kkFk3388" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1087</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(九):使用ESP8266上傳資料到ThingSpeak MQTT伺服器</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://swf.com.tw/?p=1089&fbclid=IwAR004FY9RHrNNJrRMMVPmu_iLRxbQLjvXzNsL9nWYNTrEOcdRbJXxjsqFFY" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1089</span></a></span></div><div dir="auto" style="font-family: inherit;"><span style="font-size: large;">MQTT教學(十):設定Mosquitto 2.x版的mosquitto.conf設置檔</span></div><div dir="auto" style="font-family: inherit;"><span style="font-family: inherit;"><a class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xt0psk2 xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1a2a7pz xt0b8zv x1fey0fg" href="https://l.facebook.com/l.php?u=https%3A%2F%2Fswf.com.tw%2F%3Fp%3D1473%26fbclid%3DIwAR3o0P9CjnedDFF_q4JBDd9W-DwM-MNWx48kpAcoVklTFWQUv9HszyrSdf0&h=AT2FfhswzK2iu3bqRYYR-AHPFigRiBxANTPXoMIjLFE5E2jAr6CgN7FmusiDHfxd9zj-y353RIc_42ui8pn_sDTZcHVEFwrjrKM4MSGCzTFFYDMSwxJL2S72V0ndZEpMfA&__tn__=-UK-R&c[0]=AT0TitCEBbalLQfMcKfsZ9pfrwl48LnFmNJT50sqZgrQjyl5yxs5kiXr3RBJlxpnau30WncnPO59A8De01PGZUSl3XevgKuir1UE6MLmg2HaL-zTOKKkkqg35BUTs-Dl4vP-Xwk_qwu5N5TzREB8TNdl1iDEOUGp" rel="nofollow noreferrer" role="link" style="-webkit-tap-highlight-color: transparent; border-color: initial; border-style: initial; border-width: 0px; box-sizing: border-box; cursor: pointer; display: inline; font-family: inherit; list-style: none; margin: 0px; outline: none; padding: 0px; text-align: inherit; text-decoration-line: none; touch-action: manipulation;" tabindex="0" target="_blank"><span style="font-size: large;">https://swf.com.tw/?p=1473</span></a></span></div></div></span></div></div></div></div></div><div style="font-family: inherit;"><div class="x168nmei x13lgxp2 x30kzoy x9jhf4c x6ikm8r x10wlt62" data-visualcompletion="ignore-dynamic" style="border-radius: 0px 0px 8px 8px; font-family: inherit; overflow: hidden;"><div style="font-family: inherit;"><div style="font-family: inherit;"><div style="font-family: inherit;"><div class="x1n2onr6" style="font-family: inherit; position: relative;"><div class="x6s0dn4 xi81zsa x78zum5 x6prxxf x13a6bvl xvq8zen xdj266r xktsk01 xat24cr x1d52u69 x889kno x4uap5 x1a8lsjc xkhd6sd xdppsyt" style="align-items: center; border-bottom: 1px solid var(--divider); color: var(--secondary-text); display: flex; font-family: inherit; justify-content: flex-end; line-height: 1.3333; margin: 0px 16px; padding: 10px 0px;"><div class="x6s0dn4 x78zum5 x1iyjqo2 x6ikm8r x10wlt62" style="align-items: center; background-color: white; color: #65676b; display: flex; flex-grow: 1; font-family: "Segoe UI Historic", "Segoe UI", Helvetica, Arial, sans-serif; overflow: hidden;"><div class="" style="font-family: inherit;"><span class="x4k7w5x x1h91t0o x1h9r5lt x1jfb8zj xv2umb2 x1beo9mf xaigb6o x12ejxvf x3igimt xarpa2k xedcshv x1lytzrv x1t2pt76 x7ja8zs x1qrby5j" style="align-items: inherit; align-self: inherit; display: inherit; flex-direction: inherit; flex: inherit; font-family: inherit; height: inherit; max-height: inherit; max-width: inherit; min-height: inherit; min-width: inherit; place-content: inherit; width: inherit;"><div class="x1i10hfl xjbqb8w x6umtig x1b1mbwd xaqea5y xav7gou x9f619 x1ypdohk xe8uvvx xdj266r x11i5rnm xat24cr x1mh8g0r xexx8yu x4uap5 x18d9i69 xkhd6sd x16tdsg8 x1hl2dhg xggy1nq x1o1ewxj x3x9cwd x1e5q0jg x13rtm0m x1n2onr6 x87ps6o x1lku1pv x1a2a7pz x1heor9g xnl1qt8 x6ikm8r x10wlt62 x1vjfegm x1lliihq" role="button" style="-webkit-tap-highlight-color: transparent; background-color: transparent; border-color: initial; border-radius: inherit; border-style: initial; border-width: 0px; box-sizing: border-box; color: inherit; cursor: pointer; font-family: inherit; list-style: none; margin: 0px; max-height: 1.3333em; outline: none; overflow: hidden; padding: 0px; position: relative; text-align: inherit; touch-action: manipulation; user-select: none; z-index: 1;" tabindex="0"><div><span style="font-family: inherit;"><span class="x1e558r4" style="font-family: inherit; padding-left: 4px;"><br /></span></span></div></div></span></div></div><div class="x1c4vz4f x2lah0s xci0xqf" style="background-color: white; color: #65676b; flex-grow: 0; flex-shrink: 0; font-family: "Segoe UI Historic", "Segoe UI", Helvetica, Arial, sans-serif; font-size: 0.9375rem; width: 7px;"></div><span style="font-size: 0.9375rem; margin: -6px;"><div class="x9f619 x1n2onr6 x1ja2u2z x78zum5 x2lah0s x1qughib x1qjc9v5 xozqiw3 x1q0g3np xykv574 xbmpl8g x4cne27 xifccgj" style="align-items: stretch; background-color: white; box-sizing: border-box; color: #65676b; display: flex; flex-flow: row; flex-shrink: 0; font-family: "Segoe UI Historic", "Segoe UI", Helvetica, Arial, sans-serif; justify-content: space-between; margin: -6px; position: relative; z-index: 0;"></div></span></div></div></div></div></div></div></div>alex9ufohttp://www.blogger.com/profile/06410520834323738012noreply@blogger.com0