Laser_SD_W5500

Dependencies:   MQTT SDFileSystem WIZnet_Library mbed

Fork of EthW5500 by YX ZHANG

Files at this revision

API Documentation at this revision

Comitter:
zhangyx
Date:
Mon Jul 23 04:23:25 2018 +0000
Parent:
4:ae6f380a5b41
Child:
6:4c80e598d08c
Commit message:
add Python script

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mqtt_laser.py Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Sun Jul 22 15:53:24 2018 +0000
+++ b/main.cpp	Mon Jul 23 04:23:25 2018 +0000
@@ -103,61 +103,37 @@
 
 void moveto(float x, float y)
 {
-    rotate(0, (x - now_x)*unit_xy);
+    rotate(0, (x - now_x)*unit_xy); //电机旋转
     rotate(1, (y - now_y)*unit_xy);
     now_x = x;
     now_y = y;
 }
-void fuwei()
-{
-    moveto(0, 0);
-    status = 1;
-}
 void markdot(float value)
 {
     //switch_GS=1;
     int Ndot = floor(value * dot_max / H_max);
     for (int i = 0; i < Ndot; i++) {
-        switch_GS = 1;
-        wait(dot_last);
-        switch_GS = 0;
+        switch_GS = 1; // 开激光
+        wait(dot_last); // 等待
+        switch_GS = 0; // 关激光
     }
 }
-/*
-void dealdata(){
-    ser2usb.printf("getdata: %s \r\n",sdata);
-    int data_size = 0;//strlen(pch);
-    char * pch;
-    pch = strtok (sdata,"\r\n ,.-)(");
-    while (pch != NULL)
-    {
-        thedata[data_size/3][data_size%3]=atof(pch);
-        pch = strtok (NULL, "\r\n ,.-)(");
-        data_size++;
-    }
-    Nofdata = (data_size)/3;
-}
-void usbprintdata(){
-    ser2usb.printf("dealdata:  \r\n   <<<<<<<<<<<<<<<<");
-    for(int i=0;i<Nofdata;i++){
-        ser2usb.printf("<<< i: %i  x: %f  y: %f  v: %f \r\n",i,thedata[i][0],thedata[i][1],thedata[i][2]);
-    }
-    ser2usb.printf("dealdata done!    \r\n    >>>>>>>>>>>>");
-}
-*/
 
 void draw()
 {
     float x, y, v;
-    fp_drawing = fopen("/sd/write.txt", "r");
+    fp_drawing = fopen("/sd/write.txt", "r"); // 打开文件
     for (int i = 0; fscanf(fp_drawing, "(%f,%f,%f)", &x, &y, &v) == 3; i++) {
         pc.printf("(%f,%f,%f)\r\n", x, y, v);
-        moveto(x, y);
-        markdot(v);
-        // moveto(thedata[i][0],thedata[i][1]);
-        // markdot(thedata[i][2]);
+        moveto(x, y); // 移动到坐标位置
+        markdot(v); // 打点
     }
-    fclose(fp_drawing);
+    fclose(fp_drawing); // 关闭文件
+}
+void fuwei()
+{
+    moveto(0, 0);
+    status = 1;
 }
 
 void on_control_cmd(const char* actuator_name, const char* control_value)
@@ -241,10 +217,10 @@
             pc.printf("Drawing.. \r\n");
             // usbprintdata();
             draw();
+            pc.printf("Finished\r\n");
             publish_value(client, "report", "done.");
             status = 2;
         }
         client.yield(1000);
     }
-
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mqtt_laser.py	Mon Jul 23 04:23:25 2018 +0000
@@ -0,0 +1,89 @@
+#!/usr/bin/env python  
+# -*- coding: UTF-8 -*-
+
+'''
+File name:          laser_server_v2.py
+Description:        项目激光部分服务器代码
+Author:             秦智
+Date:               June 4, 2018
+Others:             
+Dependency:         pip install Pillow paho-mqtt
+                    
+'''
+
+from time import sleep
+import paho.mqtt.client as mqtt
+import threading
+import time
+from PIL import Image
+
+
+def waitfile(NumofOnce,minvalue):
+    filename = "laser-6-4.JPG"
+    im = Image.open(filename) #打开图片
+    print("get a picture,the info about filename, im.format, im.size, im.mode:")
+    print(filename, im.format, im.size, im.mode)
+    imL = im.convert("L")
+    x = imL.size[0] #图片的长
+    y = imL.size[1] #图片的宽
+    y=int(y*100/x)
+    x=100
+    imL=imL.resize((x,y)) #缩放图片
+    datalist = [] #存放坐标点的数组
+    for iy in range(0,y):
+        for ix in range(0,x):
+            value = imL.getpixel((ix,iy)) #获取像素亮度
+            if value >=minvalue: #判断阈值
+                datalist.append([ix,iy,value])
+    strdatalist=[]
+    sdata = ""
+    nn=0
+    while len(datalist)>0:
+        data = datalist.pop(0)
+        nn=nn+1
+        # 将坐标转为字符串(x,y,v)
+        sdata = sdata+"("+str(data[0])+","+str(data[1])+","+str(data[2])+")"
+        if nn == NumofOnce or len(datalist)==0:
+            # 构造要发送的字符串数组
+            strdatalist.append(sdata)
+            sdata = ""
+            nn = 0
+    strdatalist.append("(0,0,0)")
+    return strdatalist
+
+def NewWork(conn):
+    datalist = waitfile(5,30)
+    for datastr in datalist:
+        print("senddata:"+datastr)
+        conn.publish('/control/laser/dat', datastr, qos=1)
+        time.sleep(0.01)
+
+def on_message(conn, userdata, msg):
+    print(msg.topic+" "+str(msg.payload))
+    if msg.payload == 'ready.':
+        print('设备已启动')
+        # 告诉设备,有新任务
+        conn.publish('/control/laser/cmd', "1", qos=1)
+    elif msg.payload == 'wait data.':
+        print('等待接收数据')
+        # 调用发送数据函数
+        NewWork(conn)
+        # 告诉设备,数据发送完
+        conn.publish('/control/laser/cmd', "2", qos=1)
+    elif msg.payload == 'received.':
+        print('数据接收完成')
+    elif msg.payload == 'done.':
+        print('任务完成')
+
+def on_connect(client, userdata, flags, rc):
+    print("Connected with result code "+str(rc))
+
+client = mqtt.Client()
+client.on_connect = on_connect
+client.on_message = on_message
+client.connect("tdxls-iot.xicp.net", 1883, 60)
+client.subscribe('/values/laser/report', 1)
+client.loop_start()
+while True:
+    sleep(0.1)
+