Jelajahi Sumber

add readme.md

mrh 10 bulan lalu
induk
melakukan
c4fc9595a5
5 mengubah file dengan 98 tambahan dan 45 penghapusan
  1. 5 1
      esp8266/debug.py
  2. 9 0
      esp8266/mywifi.py
  3. 18 5
      esp8266/readme.md
  4. 13 39
      esp8266/test.py
  5. 53 0
      readme.md

+ 5 - 1
esp8266/debug.py

@@ -3,4 +3,8 @@ import main
 main.device.mqtt.publish_timer_callback()
 device.mqtt.upload_stop()
 device.mqtt.upload_start(2000)
-device.mqtt.client.subscribe("$sys/522417/esp8266/#", qos=1)
+device.mqtt.client.subscribe("$sys/522417/esp8266/#", qos=1)
+# $sys/{pid}/{device-name}/cmd/response/{cmdid}
+device.mqtt.client_msg_callback(rec_topic, rec_payload)
+rec_topic = b'$sys/522417/esp8266/cmd/request/7a4b4995-93a0-4d79-963b-a89faad3d458'
+rec_payload = b'fcuck'

+ 9 - 0
esp8266/mywifi.py

@@ -19,6 +19,7 @@ class MyWifi():
         self.tim = Timer(0)
         # 每 2000ms 定时回调一次 self.upload_data()
         self.tim.init(period=5000, mode=Timer.PERIODIC,callback=self.do_connect)
+        self.connect_status = False
 
     def do_connect(self, timer):
         if not self.wlan.isconnected():
@@ -27,3 +28,11 @@ class MyWifi():
             while not self.wlan.isconnected():
                 pass
             print('network config:', self.wlan.ifconfig())
+            self.connect_status = True
+    
+    # 松耦合设计原理:利用接口访问他们的状态,防止随意访问这个类的内部导致数据意外篡改
+    def get_status(self):
+        return self.connect_status
+    
+if __name__ == '__main__':
+    MyWifi()

+ 18 - 5
esp8266/readme.md

@@ -1,5 +1,9 @@
+# 开始使用  MicroPython port to ESP8266
+
+## 环境
+
+官方固件无法使用
 
-# 官方固件无法使用
 https://micropython.org/download/esp8266/
 在乐鑫下载flash工具,选择bin文件烧录,不论是什么版本的bin文件、flash大小、还是SPI通信方式、波特率,
 程序运行后全部都是乱码
@@ -9,9 +13,10 @@ https://micropython.org/download/esp8266/
 MicroPython v1.9-6-g821dc27e-dirty on 2017-07-21; ESP module 
 
 或者下载官方推荐的工具 esptool.py 来烧录
-参考:E:\Engineer\Engineer_sync\one-chip-computer\micropython\micropython\ports\esp8266\README.md
+[参考文档](E:\Engineer\Engineer_sync\one-chip-computer\micropython\micropython\ports\esp8266\README.md)
+
+
 
-# 开始使用 MicroPython port to ESP8266
 参考中文文档:http://www.gdradio.com.cn/en/latet/esp8266/quickref.html#networking
 ## 连接到本地WiFi网络:
 ```
@@ -33,11 +38,19 @@ def do_connect():
 connecting to network...
 network config: ('192.168.31.237', '255.255.255.0', '192.168.31.1', '192.168.31.1')
 ```
-## 下载第三方扩展包
+**下载第三方扩展包**
+
 有需要第三方库的,可以下载所需的包到esp8266
 参考:http://www.gdradio.com.cn/en/latet/reference/packages.html
 例如,我想下载pystone_lowmem模块安装到esp8266中,在REPL中输入以下代码:
 ```
 import upip
 upip.install("micropython-pystone_lowmem")
-```
+```
+
+# 红外遥控
+
+https://github.com/peterhinch/micropython_ir
+
+
+

+ 13 - 39
esp8266/test.py

@@ -5,56 +5,30 @@ import struct
 import os
 import time
 import re
-from esp_mqtt import MQTTClient
+
 
 class Client():
     def __init__(self):
-        self.data = os.urandom(1)
+        self.count = 0
+        self.timer = Timer(0)
+        self.timer.init(period=2000, mode=Timer.PERIODIC, callback=self.push)
     
-    def push(self):
-        self.data=os.urandom(1)
-        print("upload:", self.data)
+    def push(self, timer):
+        self.count += 1
+        print("Client:", self.count)
 
     
 class Test():
     def __init__(self) -> None:
-        temp = struct.unpack('!BBBB', os.urandom(4))
-        print(temp)
-        self.timer = Timer(-1)
-        print("self", self)
-        
-        # self.client = Client()
-        # # # 每 2000ms 定时回调一次 self.upload_data()
-        # self.timer.init(period=2000, mode=Timer.PERIODIC, callback=self.publish_timer_callback)
-        # self.count = 0
+        self.count = 0
+        self.timer = Timer(0)
+        self.timer.init(period=2000, mode=Timer.PERIODIC, callback=self.publish_timer_callback)
         
     def publish_timer_callback(self, timer):
         self.count += 1
-        print("upload:", self.count)
-        print("self", self.client)
-        self.client.push()
-        print("self.client")
-        print("self.timer:", self.timer)
+        print("Test:", self.count)
     
-    def receive_cmd_callback(self, topic_list, msg):
-        if topic_list[4] == 'request':
-            cmdid = topic_list[5]
-            response_topic = f"$sys/{pid}/{device-name}/cmd/response/{cmdid}"
-            print(response_topic)
-        
-        
-    def client_msg_callback(self, topic, msg):
-        print("\n------------- receive ------------- \n")
-        print("topic:%s\n" % topic)
-        print("payload:%s\n" % msg)
-        re.compile("$sys/(\d+)/(w+)/(w+)/(w+)")
-        topic_list = topic.split('/')
-        # 收到服务器命令:$sys/{pid}/{device-name}/cmd/request/{cmdid}
-        if topic_list[3] == 'cmd':
-            self.receive_cmd_callback(topic_list, msg)
 
-t = Test()
-topick = "$sys/522417/emq_online/cmd/request/c9f24219-1ec2-4e21-9b37-4673c5ca3db7"
-payload = "open"
-t.client_msg_callback(topick, payload)
 
+t = Test()
+c= Client()

+ 53 - 0
readme.md

@@ -0,0 +1,53 @@
+# 项目说明
+
+本仓库包含基于 MicroPython 的 ESP8266 和 Python3.8 的相关代码,主要用于物联网设备开发和通信。以下是项目的目录结构和功能说明:
+
+## 目录结构
+
+### esp8266/
+ESP8266 相关代码,主要用于设备的核心逻辑和通信功能。
+
+- **esp_http.py**: 提供 HTTP 请求功能,包括 GET、POST 等方法。
+- **esp_mqtt.py**: 实现 MQTT 协议,支持与 OneNet 平台的数据交互。
+- **main.py**: 设备的核心逻辑,定义了 `Device` 类。
+- **mywifi.py**: 管理 Wi-Fi 连接,提供 `MyWifi` 类。
+- **test.py**: 包含测试类 `Client` 和 `Test`。
+- **demo/**: 示例代码,展示文件系统操作和 MQTT 使用。
+
+### python38/
+Python3.8 相关代码,主要用于与 OneNet 平台的交互和开发板通信。
+
+- **communicate.py**: 提供 MQTT 连接和消息处理功能。
+- **connect.py**: 包含核心秘钥计算算法和 MQTT 功能。
+- **mqtt_onenet.py**: 实现与 OneNet 平台的交互。
+- **mylib.py**: 工具函数库,如生成 Token 和格式化数据。
+- **OneNet_API.py**: 提供调用 OneNet API 的功能。
+- **pyboard.py**: 与开发板通信,支持文件系统操作和命令执行。
+- **test.py**: 包含测试类 `Test`。
+
+### umqtt/
+MicroPython 的 MQTT 库,提供轻量级的 MQTT 客户端实现。
+
+- **simple.py**: 实现 MQTT 协议的基本功能,包括连接、发布、订阅等。
+
+## 使用说明
+
+1. **ESP8266**:
+   - 使用 `mywifi.py` 配置 Wi-Fi 连接。
+   - 使用 `esp_http.py` 或 `esp_mqtt.py` 实现与服务器的通信。
+   - 核心逻辑在 `main.py` 中实现。
+
+2. **Python3.8**:
+   - 使用 `OneNet_API.py` 调用 OneNet 平台的 API。
+   - 使用 `pyboard.py` 与开发板进行通信。
+
+3. **umqtt**:
+   - 使用 `simple.py` 实现 MQTT 客户端功能。
+
+## 测试
+
+- 各目录下的 `test.py` 文件包含测试代码,可用于验证功能。
+
+## 其他
+
+- 每个目录下可能包含 `readme.md` 文件,提供更多详细信息。