
Laser_SD_W5500
Dependencies: MQTT SDFileSystem WIZnet_Library mbed
Fork of EthW5500 by
Revision 5:48c44bebe8fb, committed 2018-07-23
- 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) +